All of lore.kernel.org
 help / color / mirror / Atom feed
* Soc camera:Is there anyone dealing with ov9650chip?Let's talk about soc camera driver.
@ 2009-10-30 12:28 dean_go Zhang
  2009-11-01 17:44   ` Jonathan Cameron
  0 siblings, 1 reply; 6+ messages in thread
From: dean_go Zhang @ 2009-10-30 12:28 UTC (permalink / raw)
  To: linux-arm-kernel

I'm reading to documentation in linux-2.6.30,and ov7670 driver ,and I'm
trying to make a driver for ov9650.

> struct soc_camera_ops provides .probe and .remove methods, which are called
> by
> the soc-camera core, when a camera is matched against or removed from a
> camera
> host bus, .init, .release, .suspend, and .resume are called from the camera
> host
> driver as discussed above. Other members of this struct provide respective
> V4L2
> functionality.
>

This is from the documentation,but I didn't find any thing about
soc_camera_host_device in ov7670's driver code.
Does anyone know how to make a v4l2 soc camera driver?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20091030/9d20025c/attachment.htm>

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Soc camera:Is there anyone dealing with ov9650chip?Let's talk about  soc camera driver.
  2009-10-30 12:28 Soc camera:Is there anyone dealing with ov9650chip?Let's talk about soc camera driver dean_go Zhang
@ 2009-11-01 17:44   ` Jonathan Cameron
  0 siblings, 0 replies; 6+ messages in thread
From: Jonathan Cameron @ 2009-11-01 17:44 UTC (permalink / raw)
  To: dean_go Zhang
  Cc: linux-arm-kernel, Guennadi Liakhovetski, Linux Media Mailing List

dean_go Zhang wrote:
> I'm reading to documentation in linux-2.6.30,and ov7670 driver ,and I'm
> trying to make a driver for ov9650.
> 
>     struct soc_camera_ops provides .probe and .remove methods, which are
>     called by
>     the soc-camera core, when a camera is matched against or removed
>     from a camera
>     host bus, .init, .release, .suspend, and .resume are called from the
>     camera host
>     driver as discussed above. Other members of this struct provide
>     respective V4L2
>     functionality.
> 
>  
> This is from the documentation,but I didn't find any thing about
> soc_camera_host_device in ov7670's driver code.
> Does anyone know how to make a v4l2 soc camera driver? 
This isn't really an arm related question.  Should really be asked on
linux-media. (now cc'd along with Guennadi)

Having said that...

The reason you aren't finding soc camera related stuff in the ov7670 driver
is that it isn't currently a soc camera driver.  There is ongoing work to
move the soc-camera framework fully over to using v4l2-subdevs thus allowing
drivers like this one to work both with soc-camera interfaces and others.

There are still a few elements being cleaned up (primarily to do with
negotiation of image formats) that make it tricky for a single driver to
directly support use through soc camera and without it. 

I would suggest looking in the linux-media archive for
Guennanadi Liakhovetski's latest imagebus patches for what still needs doing.

In meantime, the following patch against 2.6.32-rc5 adds soc camera support to the
ov7670 driver.  I've been posting updates tracking Guennadi's changes to soc camera
to linux-media (though I haven't had a chance to do the recent imagebus changes yet).

Unfortunately omnivision aren't exactly free with datasheets (I can get the ov9650 from
google but not the ov9640), so I can't check, but based purely on numbering how does
this chip compare to the ov9640 which as a driver in kernel (probably in a queue
for next merge window? - it's certainly in the tree Guennadi is using and has been
posted to linux-media)

Google did however give me this hit, which mentions an ov9650 driver
http://marex-hnd.blogspot.com/2009/08/omnivision-ov9640-hacking-part-iv.html
Perhaps Guennadi has more info on this?


>From 408902c5584796924f8f9903f6c7338db4a0fd0f Mon Sep 17 00:00:00 2001
From: Jonathan Cameron <jic23@cam.ac.uk>
Date: Sat, 4 Jul 2009 13:25:06 +0000
Subject: [PATCH 02/10] ov7670: Temporary soc-camera support

Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
---
 drivers/media/video/ov7670.c |   50 ++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 50 insertions(+), 0 deletions(-)

diff --git a/drivers/media/video/ov7670.c b/drivers/media/video/ov7670.c
index 0e2184e..910a499 100644
--- a/drivers/media/video/ov7670.c
+++ b/drivers/media/video/ov7670.c
@@ -19,6 +19,8 @@
 #include <media/v4l2-chip-ident.h>
 #include <media/v4l2-i2c-drv.h>
 
+#include <media/soc_camera.h>
+#include <linux/autoconf.h>
 
 MODULE_AUTHOR("Jonathan Corbet <corbet@lwn.net>");
 MODULE_DESCRIPTION("A low-level driver for OmniVision ov7670 sensors");
@@ -745,6 +747,10 @@ static int ov7670_s_fmt(struct v4l2_subdev *sd, struct v4l2_format *fmt)
 	struct ov7670_info *info = to_state(sd);
 	unsigned char com7, clkrc = 0;
 
+	ret = ov7670_init(sd, 0);
+	if (ret)
+		return ret;
+
 	ret = ov7670_try_fmt_internal(sd, fmt, &ovfmt, &wsize);
 	if (ret)
 		return ret;
@@ -1239,6 +1245,41 @@ static const struct v4l2_subdev_ops ov7670_ops = {
 };
 
 /* ----------------------------------------------------------------------- */
+static unsigned long ov7670_soc_query_bus_param(struct soc_camera_device *icd)
+{
+	struct soc_camera_link *icl = to_soc_camera_link(icd);
+
+	unsigned long flags = SOCAM_PCLK_SAMPLE_RISING | SOCAM_MASTER |
+		SOCAM_VSYNC_ACTIVE_HIGH | SOCAM_HSYNC_ACTIVE_HIGH |
+		SOCAM_DATAWIDTH_8 | SOCAM_DATA_ACTIVE_HIGH;
+
+	return soc_camera_apply_sensor_flags(icl, flags);
+}
+
+/* This device only supports one bus option */
+static int ov7670_soc_set_bus_param(struct soc_camera_device *icd,
+				    unsigned long flags)
+{
+	return 0;
+}
+
+static struct soc_camera_ops ov7670_soc_ops = {
+	.set_bus_param = ov7670_soc_set_bus_param,
+	.query_bus_param = ov7670_soc_query_bus_param,
+};
+
+#define SETFOURCC(type) .name = (#type), .fourcc = (V4L2_PIX_FMT_ ## type)
+static const struct soc_camera_data_format ov7670_soc_fmt_lists[] = {
+	{
+		SETFOURCC(YUYV),
+		.depth = 16,
+		.colorspace = V4L2_COLORSPACE_JPEG,
+	}, {
+		SETFOURCC(RGB565),
+		.depth = 16,
+		.colorspace = V4L2_COLORSPACE_SRGB,
+	},
+};
 
 static int ov7670_probe(struct i2c_client *client,
 			const struct i2c_device_id *id)
@@ -1246,7 +1287,16 @@ static int ov7670_probe(struct i2c_client *client,
 	struct v4l2_subdev *sd;
 	struct ov7670_info *info;
 	int ret;
+	struct soc_camera_device *icd = client->dev.platform_data;
+
+	if (!icd) {
+		dev_err(&client->dev, "OV7670: missing soc-camera data!\n");
+		return -EINVAL;
+	}
 
+	icd->ops = &ov7670_soc_ops;
+	icd->formats = ov7670_soc_fmt_lists;
+	icd->num_formats = ARRAY_SIZE(ov7670_soc_fmt_lists);
 	info = kzalloc(sizeof(struct ov7670_info), GFP_KERNEL);
 	if (info == NULL)
 		return -ENOMEM;
-- 
1.6.3.3




^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Soc camera:Is there anyone dealing with ov9650chip?Let's talk about  soc camera driver.
@ 2009-11-01 17:44   ` Jonathan Cameron
  0 siblings, 0 replies; 6+ messages in thread
From: Jonathan Cameron @ 2009-11-01 17:44 UTC (permalink / raw)
  To: linux-arm-kernel

dean_go Zhang wrote:
> I'm reading to documentation in linux-2.6.30,and ov7670 driver ,and I'm
> trying to make a driver for ov9650.
> 
>     struct soc_camera_ops provides .probe and .remove methods, which are
>     called by
>     the soc-camera core, when a camera is matched against or removed
>     from a camera
>     host bus, .init, .release, .suspend, and .resume are called from the
>     camera host
>     driver as discussed above. Other members of this struct provide
>     respective V4L2
>     functionality.
> 
>  
> This is from the documentation,but I didn't find any thing about
> soc_camera_host_device in ov7670's driver code.
> Does anyone know how to make a v4l2 soc camera driver? 
This isn't really an arm related question.  Should really be asked on
linux-media. (now cc'd along with Guennadi)

Having said that...

The reason you aren't finding soc camera related stuff in the ov7670 driver
is that it isn't currently a soc camera driver.  There is ongoing work to
move the soc-camera framework fully over to using v4l2-subdevs thus allowing
drivers like this one to work both with soc-camera interfaces and others.

There are still a few elements being cleaned up (primarily to do with
negotiation of image formats) that make it tricky for a single driver to
directly support use through soc camera and without it. 

I would suggest looking in the linux-media archive for
Guennanadi Liakhovetski's latest imagebus patches for what still needs doing.

In meantime, the following patch against 2.6.32-rc5 adds soc camera support to the
ov7670 driver.  I've been posting updates tracking Guennadi's changes to soc camera
to linux-media (though I haven't had a chance to do the recent imagebus changes yet).

Unfortunately omnivision aren't exactly free with datasheets (I can get the ov9650 from
google but not the ov9640), so I can't check, but based purely on numbering how does
this chip compare to the ov9640 which as a driver in kernel (probably in a queue
for next merge window? - it's certainly in the tree Guennadi is using and has been
posted to linux-media)

Google did however give me this hit, which mentions an ov9650 driver
http://marex-hnd.blogspot.com/2009/08/omnivision-ov9640-hacking-part-iv.html
Perhaps Guennadi has more info on this?

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Soc camera:Is there anyone dealing with ov9650chip?Let's talk about  soc camera driver.
  2009-11-01 17:44   ` Jonathan Cameron
@ 2009-11-01 20:00     ` Guennadi Liakhovetski
  -1 siblings, 0 replies; 6+ messages in thread
From: Guennadi Liakhovetski @ 2009-11-01 20:00 UTC (permalink / raw)
  To: Jonathan Cameron
  Cc: dean_go Zhang, linux-arm-kernel, Linux Media Mailing List

On Sun, 1 Nov 2009, Jonathan Cameron wrote:

> dean_go Zhang wrote:
> > I'm reading to documentation in linux-2.6.30,and ov7670 driver ,and I'm
> > trying to make a driver for ov9650.
> > 
> >     struct soc_camera_ops provides .probe and .remove methods, which are
> >     called by
> >     the soc-camera core, when a camera is matched against or removed
> >     from a camera
> >     host bus, .init, .release, .suspend, and .resume are called from the
> >     camera host
> >     driver as discussed above. Other members of this struct provide
> >     respective V4L2
> >     functionality.
> > 
> >  
> > This is from the documentation,but I didn't find any thing about
> > soc_camera_host_device in ov7670's driver code.
> > Does anyone know how to make a v4l2 soc camera driver? 
> This isn't really an arm related question.  Should really be asked on
> linux-media. (now cc'd along with Guennadi)
> 
> Having said that...
> 
> The reason you aren't finding soc camera related stuff in the ov7670 driver
> is that it isn't currently a soc camera driver.  There is ongoing work to
> move the soc-camera framework fully over to using v4l2-subdevs thus allowing
> drivers like this one to work both with soc-camera interfaces and others.
> 
> There are still a few elements being cleaned up (primarily to do with
> negotiation of image formats) that make it tricky for a single driver to
> directly support use through soc camera and without it. 
> 
> I would suggest looking in the linux-media archive for
> Guennanadi Liakhovetski's latest imagebus patches for what still needs doing.
> 
> In meantime, the following patch against 2.6.32-rc5 adds soc camera support to the
> ov7670 driver.  I've been posting updates tracking Guennadi's changes to soc camera
> to linux-media (though I haven't had a chance to do the recent imagebus changes yet).
> 
> Unfortunately omnivision aren't exactly free with datasheets (I can get the ov9650 from
> google but not the ov9640), so I can't check, but based purely on numbering how does
> this chip compare to the ov9640 which as a driver in kernel (probably in a queue
> for next merge window?

Yes, we didn't manage to push it for 2.6.32, so, it should be merged for 
2.6.33.

> - it's certainly in the tree Guennadi is using and has been
> posted to linux-media)
> 
> Google did however give me this hit, which mentions an ov9650 driver
> http://marex-hnd.blogspot.com/2009/08/omnivision-ov9640-hacking-part-iv.html
> Perhaps Guennadi has more info on this?

Well, I think, the post describes the situation correctly - none of the 
drivers can currently handle both 9640 and 9650, and they do seem to be 
different enough to deserve separate drivers. As for 9655, the posting is 
not quite correct, saying that "For that model there's another driver 
scheduled for merge written by Stefan Herbrechtsmeier," the reak situation 
is, that there is already a gspca driver in the mainline kernel for that 
sensor, and it would be preferable to re-use that one instead of 
committing a new one. This is similar to the situation with the ov7670 
sensor.

As for ways to enable the use of sensor (video-client) with soc-camera and 
other frameworks, I'll try to prepare a proposal for that to standardise 
the use of the platform_data field of the underlying device, in the common 
i2c case it's the client->dev.platform_data link. Having done that we will 
be able to do checks for which framework we're currently using like in the 
patch below. Until then, unfortunately, such testing is not safe.

Thanks
Guennadi

> 
> 
> >From 408902c5584796924f8f9903f6c7338db4a0fd0f Mon Sep 17 00:00:00 2001
> From: Jonathan Cameron <jic23@cam.ac.uk>
> Date: Sat, 4 Jul 2009 13:25:06 +0000
> Subject: [PATCH 02/10] ov7670: Temporary soc-camera support
> 
> Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
> ---
>  drivers/media/video/ov7670.c |   50 ++++++++++++++++++++++++++++++++++++++++++
>  1 files changed, 50 insertions(+), 0 deletions(-)
> 
> diff --git a/drivers/media/video/ov7670.c b/drivers/media/video/ov7670.c
> index 0e2184e..910a499 100644
> --- a/drivers/media/video/ov7670.c
> +++ b/drivers/media/video/ov7670.c
> @@ -19,6 +19,8 @@
>  #include <media/v4l2-chip-ident.h>
>  #include <media/v4l2-i2c-drv.h>
>  
> +#include <media/soc_camera.h>
> +#include <linux/autoconf.h>
>  
>  MODULE_AUTHOR("Jonathan Corbet <corbet@lwn.net>");
>  MODULE_DESCRIPTION("A low-level driver for OmniVision ov7670 sensors");
> @@ -745,6 +747,10 @@ static int ov7670_s_fmt(struct v4l2_subdev *sd, struct v4l2_format *fmt)
>  	struct ov7670_info *info = to_state(sd);
>  	unsigned char com7, clkrc = 0;
>  
> +	ret = ov7670_init(sd, 0);
> +	if (ret)
> +		return ret;
> +
>  	ret = ov7670_try_fmt_internal(sd, fmt, &ovfmt, &wsize);
>  	if (ret)
>  		return ret;
> @@ -1239,6 +1245,41 @@ static const struct v4l2_subdev_ops ov7670_ops = {
>  };
>  
>  /* ----------------------------------------------------------------------- */
> +static unsigned long ov7670_soc_query_bus_param(struct soc_camera_device *icd)
> +{
> +	struct soc_camera_link *icl = to_soc_camera_link(icd);
> +
> +	unsigned long flags = SOCAM_PCLK_SAMPLE_RISING | SOCAM_MASTER |
> +		SOCAM_VSYNC_ACTIVE_HIGH | SOCAM_HSYNC_ACTIVE_HIGH |
> +		SOCAM_DATAWIDTH_8 | SOCAM_DATA_ACTIVE_HIGH;
> +
> +	return soc_camera_apply_sensor_flags(icl, flags);
> +}
> +
> +/* This device only supports one bus option */
> +static int ov7670_soc_set_bus_param(struct soc_camera_device *icd,
> +				    unsigned long flags)
> +{
> +	return 0;
> +}
> +
> +static struct soc_camera_ops ov7670_soc_ops = {
> +	.set_bus_param = ov7670_soc_set_bus_param,
> +	.query_bus_param = ov7670_soc_query_bus_param,
> +};
> +
> +#define SETFOURCC(type) .name = (#type), .fourcc = (V4L2_PIX_FMT_ ## type)
> +static const struct soc_camera_data_format ov7670_soc_fmt_lists[] = {
> +	{
> +		SETFOURCC(YUYV),
> +		.depth = 16,
> +		.colorspace = V4L2_COLORSPACE_JPEG,
> +	}, {
> +		SETFOURCC(RGB565),
> +		.depth = 16,
> +		.colorspace = V4L2_COLORSPACE_SRGB,
> +	},
> +};
>  
>  static int ov7670_probe(struct i2c_client *client,
>  			const struct i2c_device_id *id)
> @@ -1246,7 +1287,16 @@ static int ov7670_probe(struct i2c_client *client,
>  	struct v4l2_subdev *sd;
>  	struct ov7670_info *info;
>  	int ret;
> +	struct soc_camera_device *icd = client->dev.platform_data;
> +
> +	if (!icd) {
> +		dev_err(&client->dev, "OV7670: missing soc-camera data!\n");
> +		return -EINVAL;
> +	}
>  
> +	icd->ops = &ov7670_soc_ops;
> +	icd->formats = ov7670_soc_fmt_lists;
> +	icd->num_formats = ARRAY_SIZE(ov7670_soc_fmt_lists);
>  	info = kzalloc(sizeof(struct ov7670_info), GFP_KERNEL);
>  	if (info == NULL)
>  		return -ENOMEM;
> -- 
> 1.6.3.3
> 
> 
> 

---
Guennadi Liakhovetski

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Soc camera:Is there anyone dealing with ov9650chip?Let's talk about  soc camera driver.
@ 2009-11-01 20:00     ` Guennadi Liakhovetski
  0 siblings, 0 replies; 6+ messages in thread
From: Guennadi Liakhovetski @ 2009-11-01 20:00 UTC (permalink / raw)
  To: linux-arm-kernel

On Sun, 1 Nov 2009, Jonathan Cameron wrote:

> dean_go Zhang wrote:
> > I'm reading to documentation in linux-2.6.30,and ov7670 driver ,and I'm
> > trying to make a driver for ov9650.
> > 
> >     struct soc_camera_ops provides .probe and .remove methods, which are
> >     called by
> >     the soc-camera core, when a camera is matched against or removed
> >     from a camera
> >     host bus, .init, .release, .suspend, and .resume are called from the
> >     camera host
> >     driver as discussed above. Other members of this struct provide
> >     respective V4L2
> >     functionality.
> > 
> >  
> > This is from the documentation,but I didn't find any thing about
> > soc_camera_host_device in ov7670's driver code.
> > Does anyone know how to make a v4l2 soc camera driver? 
> This isn't really an arm related question.  Should really be asked on
> linux-media. (now cc'd along with Guennadi)
> 
> Having said that...
> 
> The reason you aren't finding soc camera related stuff in the ov7670 driver
> is that it isn't currently a soc camera driver.  There is ongoing work to
> move the soc-camera framework fully over to using v4l2-subdevs thus allowing
> drivers like this one to work both with soc-camera interfaces and others.
> 
> There are still a few elements being cleaned up (primarily to do with
> negotiation of image formats) that make it tricky for a single driver to
> directly support use through soc camera and without it. 
> 
> I would suggest looking in the linux-media archive for
> Guennanadi Liakhovetski's latest imagebus patches for what still needs doing.
> 
> In meantime, the following patch against 2.6.32-rc5 adds soc camera support to the
> ov7670 driver.  I've been posting updates tracking Guennadi's changes to soc camera
> to linux-media (though I haven't had a chance to do the recent imagebus changes yet).
> 
> Unfortunately omnivision aren't exactly free with datasheets (I can get the ov9650 from
> google but not the ov9640), so I can't check, but based purely on numbering how does
> this chip compare to the ov9640 which as a driver in kernel (probably in a queue
> for next merge window?

Yes, we didn't manage to push it for 2.6.32, so, it should be merged for 
2.6.33.

> - it's certainly in the tree Guennadi is using and has been
> posted to linux-media)
> 
> Google did however give me this hit, which mentions an ov9650 driver
> http://marex-hnd.blogspot.com/2009/08/omnivision-ov9640-hacking-part-iv.html
> Perhaps Guennadi has more info on this?

Well, I think, the post describes the situation correctly - none of the 
drivers can currently handle both 9640 and 9650, and they do seem to be 
different enough to deserve separate drivers. As for 9655, the posting is 
not quite correct, saying that "For that model there's another driver 
scheduled for merge written by Stefan Herbrechtsmeier," the reak situation 
is, that there is already a gspca driver in the mainline kernel for that 
sensor, and it would be preferable to re-use that one instead of 
committing a new one. This is similar to the situation with the ov7670 
sensor.

As for ways to enable the use of sensor (video-client) with soc-camera and 
other frameworks, I'll try to prepare a proposal for that to standardise 
the use of the platform_data field of the underlying device, in the common 
i2c case it's the client->dev.platform_data link. Having done that we will 
be able to do checks for which framework we're currently using like in the 
patch below. Until then, unfortunately, such testing is not safe.

Thanks
Guennadi

> 
> 
> >From 408902c5584796924f8f9903f6c7338db4a0fd0f Mon Sep 17 00:00:00 2001
> From: Jonathan Cameron <jic23@cam.ac.uk>
> Date: Sat, 4 Jul 2009 13:25:06 +0000
> Subject: [PATCH 02/10] ov7670: Temporary soc-camera support
> 
> Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
> ---
>  drivers/media/video/ov7670.c |   50 ++++++++++++++++++++++++++++++++++++++++++
>  1 files changed, 50 insertions(+), 0 deletions(-)
> 
> diff --git a/drivers/media/video/ov7670.c b/drivers/media/video/ov7670.c
> index 0e2184e..910a499 100644
> --- a/drivers/media/video/ov7670.c
> +++ b/drivers/media/video/ov7670.c
> @@ -19,6 +19,8 @@
>  #include <media/v4l2-chip-ident.h>
>  #include <media/v4l2-i2c-drv.h>
>  
> +#include <media/soc_camera.h>
> +#include <linux/autoconf.h>
>  
>  MODULE_AUTHOR("Jonathan Corbet <corbet@lwn.net>");
>  MODULE_DESCRIPTION("A low-level driver for OmniVision ov7670 sensors");
> @@ -745,6 +747,10 @@ static int ov7670_s_fmt(struct v4l2_subdev *sd, struct v4l2_format *fmt)
>  	struct ov7670_info *info = to_state(sd);
>  	unsigned char com7, clkrc = 0;
>  
> +	ret = ov7670_init(sd, 0);
> +	if (ret)
> +		return ret;
> +
>  	ret = ov7670_try_fmt_internal(sd, fmt, &ovfmt, &wsize);
>  	if (ret)
>  		return ret;
> @@ -1239,6 +1245,41 @@ static const struct v4l2_subdev_ops ov7670_ops = {
>  };
>  
>  /* ----------------------------------------------------------------------- */
> +static unsigned long ov7670_soc_query_bus_param(struct soc_camera_device *icd)
> +{
> +	struct soc_camera_link *icl = to_soc_camera_link(icd);
> +
> +	unsigned long flags = SOCAM_PCLK_SAMPLE_RISING | SOCAM_MASTER |
> +		SOCAM_VSYNC_ACTIVE_HIGH | SOCAM_HSYNC_ACTIVE_HIGH |
> +		SOCAM_DATAWIDTH_8 | SOCAM_DATA_ACTIVE_HIGH;
> +
> +	return soc_camera_apply_sensor_flags(icl, flags);
> +}
> +
> +/* This device only supports one bus option */
> +static int ov7670_soc_set_bus_param(struct soc_camera_device *icd,
> +				    unsigned long flags)
> +{
> +	return 0;
> +}
> +
> +static struct soc_camera_ops ov7670_soc_ops = {
> +	.set_bus_param = ov7670_soc_set_bus_param,
> +	.query_bus_param = ov7670_soc_query_bus_param,
> +};
> +
> +#define SETFOURCC(type) .name = (#type), .fourcc = (V4L2_PIX_FMT_ ## type)
> +static const struct soc_camera_data_format ov7670_soc_fmt_lists[] = {
> +	{
> +		SETFOURCC(YUYV),
> +		.depth = 16,
> +		.colorspace = V4L2_COLORSPACE_JPEG,
> +	}, {
> +		SETFOURCC(RGB565),
> +		.depth = 16,
> +		.colorspace = V4L2_COLORSPACE_SRGB,
> +	},
> +};
>  
>  static int ov7670_probe(struct i2c_client *client,
>  			const struct i2c_device_id *id)
> @@ -1246,7 +1287,16 @@ static int ov7670_probe(struct i2c_client *client,
>  	struct v4l2_subdev *sd;
>  	struct ov7670_info *info;
>  	int ret;
> +	struct soc_camera_device *icd = client->dev.platform_data;
> +
> +	if (!icd) {
> +		dev_err(&client->dev, "OV7670: missing soc-camera data!\n");
> +		return -EINVAL;
> +	}
>  
> +	icd->ops = &ov7670_soc_ops;
> +	icd->formats = ov7670_soc_fmt_lists;
> +	icd->num_formats = ARRAY_SIZE(ov7670_soc_fmt_lists);
>  	info = kzalloc(sizeof(struct ov7670_info), GFP_KERNEL);
>  	if (info == NULL)
>  		return -ENOMEM;
> -- 
> 1.6.3.3
> 
> 
> 

---
Guennadi Liakhovetski

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Soc camera:Is there anyone dealing with ov9650chip?Let's talk about soc camera driver.
  2009-11-01 17:44   ` Jonathan Cameron
  (?)
  (?)
@ 2009-11-03 10:48   ` dean_go Zhang
  -1 siblings, 0 replies; 6+ messages in thread
From: dean_go Zhang @ 2009-11-03 10:48 UTC (permalink / raw)
  To: linux-arm-kernel

In fact ,what I am dealing with is s3c2440 camera interface.I have a ov9650
camera senser and I want to get a v4l2 driver for it . I'm trying to do it
myself,however my knowlegde is not enough. May it's more chip specific other
than arm architecture related.Anyway thanks for your (Guennadi Liakhovetski
and Jonathan Cameron)reply.

2009/11/2 Jonathan Cameron <jic23@cam.ac.uk>

> dean_go Zhang wrote:
> > I'm reading to documentation in linux-2.6.30,and ov7670 driver ,and I'm
> > trying to make a driver for ov9650.
> >
> >     struct soc_camera_ops provides .probe and .remove methods, which are
> >     called by
> >     the soc-camera core, when a camera is matched against or removed
> >     from a camera
> >     host bus, .init, .release, .suspend, and .resume are called from the
> >     camera host
> >     driver as discussed above. Other members of this struct provide
> >     respective V4L2
> >     functionality.
> >
> >
> > This is from the documentation,but I didn't find any thing about
> > soc_camera_host_device in ov7670's driver code.
> > Does anyone know how to make a v4l2 soc camera driver?
> This isn't really an arm related question.  Should really be asked on
> linux-media. (now cc'd along with Guennadi)
>
> Having said that...
>
> The reason you aren't finding soc camera related stuff in the ov7670 driver
> is that it isn't currently a soc camera driver.  There is ongoing work to
> move the soc-camera framework fully over to using v4l2-subdevs thus
> allowing
> drivers like this one to work both with soc-camera interfaces and others.
>
> There are still a few elements being cleaned up (primarily to do with
> negotiation of image formats) that make it tricky for a single driver to
> directly support use through soc camera and without it.
>
> I would suggest looking in the linux-media archive for
> Guennanadi Liakhovetski's latest imagebus patches for what still needs
> doing.
>
> In meantime, the following patch against 2.6.32-rc5 adds soc camera support
> to the
> ov7670 driver.  I've been posting updates tracking Guennadi's changes to
> soc camera
> to linux-media (though I haven't had a chance to do the recent imagebus
> changes yet).
>
> Unfortunately omnivision aren't exactly free with datasheets (I can get the
> ov9650 from
> google but not the ov9640), so I can't check, but based purely on numbering
> how does
> this chip compare to the ov9640 which as a driver in kernel (probably in a
> queue
> for next merge window? - it's certainly in the tree Guennadi is using and
> has been
> posted to linux-media)
>
> Google did however give me this hit, which mentions an ov9650 driver
>
> http://marex-hnd.blogspot.com/2009/08/omnivision-ov9640-hacking-part-iv.html
> Perhaps Guennadi has more info on this?
>
>
> From 408902c5584796924f8f9903f6c7338db4a0fd0f Mon Sep 17 00:00:00 2001
> From: Jonathan Cameron <jic23@cam.ac.uk>
> Date: Sat, 4 Jul 2009 13:25:06 +0000
> Subject: [PATCH 02/10] ov7670: Temporary soc-camera support
>
> Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
> ---
>  drivers/media/video/ov7670.c |   50
> ++++++++++++++++++++++++++++++++++++++++++
>  1 files changed, 50 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/media/video/ov7670.c b/drivers/media/video/ov7670.c
> index 0e2184e..910a499 100644
> --- a/drivers/media/video/ov7670.c
> +++ b/drivers/media/video/ov7670.c
> @@ -19,6 +19,8 @@
>  #include <media/v4l2-chip-ident.h>
>  #include <media/v4l2-i2c-drv.h>
>
> +#include <media/soc_camera.h>
> +#include <linux/autoconf.h>
>
>  MODULE_AUTHOR("Jonathan Corbet <corbet@lwn.net>");
>  MODULE_DESCRIPTION("A low-level driver for OmniVision ov7670 sensors");
> @@ -745,6 +747,10 @@ static int ov7670_s_fmt(struct v4l2_subdev *sd, struct
> v4l2_format *fmt)
>        struct ov7670_info *info = to_state(sd);
>        unsigned char com7, clkrc = 0;
>
> +       ret = ov7670_init(sd, 0);
> +       if (ret)
> +               return ret;
> +
>        ret = ov7670_try_fmt_internal(sd, fmt, &ovfmt, &wsize);
>        if (ret)
>                return ret;
> @@ -1239,6 +1245,41 @@ static const struct v4l2_subdev_ops ov7670_ops = {
>  };
>
>  /* -----------------------------------------------------------------------
> */
> +static unsigned long ov7670_soc_query_bus_param(struct soc_camera_device
> *icd)
> +{
> +       struct soc_camera_link *icl = to_soc_camera_link(icd);
> +
> +       unsigned long flags = SOCAM_PCLK_SAMPLE_RISING | SOCAM_MASTER |
> +               SOCAM_VSYNC_ACTIVE_HIGH | SOCAM_HSYNC_ACTIVE_HIGH |
> +               SOCAM_DATAWIDTH_8 | SOCAM_DATA_ACTIVE_HIGH;
> +
> +       return soc_camera_apply_sensor_flags(icl, flags);
> +}
> +
> +/* This device only supports one bus option */
> +static int ov7670_soc_set_bus_param(struct soc_camera_device *icd,
> +                                   unsigned long flags)
> +{
> +       return 0;
> +}
> +
> +static struct soc_camera_ops ov7670_soc_ops = {
> +       .set_bus_param = ov7670_soc_set_bus_param,
> +       .query_bus_param = ov7670_soc_query_bus_param,
> +};
> +
> +#define SETFOURCC(type) .name = (#type), .fourcc = (V4L2_PIX_FMT_ ## type)
> +static const struct soc_camera_data_format ov7670_soc_fmt_lists[] = {
> +       {
> +               SETFOURCC(YUYV),
> +               .depth = 16,
> +               .colorspace = V4L2_COLORSPACE_JPEG,
> +       }, {
> +               SETFOURCC(RGB565),
> +               .depth = 16,
> +               .colorspace = V4L2_COLORSPACE_SRGB,
> +       },
> +};
>
>  static int ov7670_probe(struct i2c_client *client,
>                        const struct i2c_device_id *id)
> @@ -1246,7 +1287,16 @@ static int ov7670_probe(struct i2c_client *client,
>        struct v4l2_subdev *sd;
>        struct ov7670_info *info;
>        int ret;
> +       struct soc_camera_device *icd = client->dev.platform_data;
> +
> +       if (!icd) {
> +               dev_err(&client->dev, "OV7670: missing soc-camera
> data!\n");
> +               return -EINVAL;
> +       }
>
> +       icd->ops = &ov7670_soc_ops;
> +       icd->formats = ov7670_soc_fmt_lists;
> +       icd->num_formats = ARRAY_SIZE(ov7670_soc_fmt_lists);
>        info = kzalloc(sizeof(struct ov7670_info), GFP_KERNEL);
>        if (info == NULL)
>                return -ENOMEM;
> --
> 1.6.3.3
>
>
>
>


-- 
??,???????
??,???????
???????????
?????
??????????????
??????????????
?????
www.junziju.com.cn
????????
www.eledsn.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20091103/6596700c/attachment-0001.htm>

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2009-11-03 10:48 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-10-30 12:28 Soc camera:Is there anyone dealing with ov9650chip?Let's talk about soc camera driver dean_go Zhang
2009-11-01 17:44 ` Jonathan Cameron
2009-11-01 17:44   ` Jonathan Cameron
2009-11-01 20:00   ` Guennadi Liakhovetski
2009-11-01 20:00     ` Guennadi Liakhovetski
2009-11-03 10:48   ` dean_go Zhang

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.