summaryrefslogtreecommitdiff
path: root/linux/drivers/media/video/mt9m001.c
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <mchehab@infradead.org>2008-03-24 12:18:36 +0000
committerMauro Carvalho Chehab <mchehab@infradead.org>2008-03-24 12:18:36 +0000
commita325b0a427757946052053834c1dbbc50f89526c (patch)
tree99a345753187aa97eadff18453a3d8ab84a19c79 /linux/drivers/media/video/mt9m001.c
parenteea2301e210243d3bedcd2441624c6082cc73789 (diff)
downloadmediapointer-dvb-s2-a325b0a427757946052053834c1dbbc50f89526c.tar.gz
mediapointer-dvb-s2-a325b0a427757946052053834c1dbbc50f89526c.tar.bz2
soc-camera: improve separation between soc_camera_ops and soc_camera_device
From: Guennadi Liakhovetski <g.liakhovetski@pengutronix.de> In case of muliple cameras, handled by the same driver, they can support different picture formats, therefore formats and num_formats cannot belong to soc_camera_ops, which is only one per driver, move them to soc_camera_device, which is one per device instance. OTOH, probe and remove methods are always the same, move them to soc_camera_ops. Thanks to Eric Miao for making me look at this code again:-) Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@pengutronix.de> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Diffstat (limited to 'linux/drivers/media/video/mt9m001.c')
-rw-r--r--linux/drivers/media/video/mt9m001.c24
1 files changed, 12 insertions, 12 deletions
diff --git a/linux/drivers/media/video/mt9m001.c b/linux/drivers/media/video/mt9m001.c
index acb5454b5..2ea133e8a 100644
--- a/linux/drivers/media/video/mt9m001.c
+++ b/linux/drivers/media/video/mt9m001.c
@@ -410,11 +410,15 @@ const struct v4l2_queryctrl mt9m001_controls[] = {
}
};
-static int mt9m001_get_control(struct soc_camera_device *icd, struct v4l2_control *ctrl);
-static int mt9m001_set_control(struct soc_camera_device *icd, struct v4l2_control *ctrl);
+static int mt9m001_video_probe(struct soc_camera_device *);
+static void mt9m001_video_remove(struct soc_camera_device *);
+static int mt9m001_get_control(struct soc_camera_device *, struct v4l2_control *);
+static int mt9m001_set_control(struct soc_camera_device *, struct v4l2_control *);
static struct soc_camera_ops mt9m001_ops = {
.owner = THIS_MODULE,
+ .probe = mt9m001_video_probe,
+ .remove = mt9m001_video_remove,
.init = mt9m001_init,
.release = mt9m001_release,
.start_capture = mt9m001_start_capture,
@@ -423,8 +427,6 @@ static struct soc_camera_ops mt9m001_ops = {
.try_fmt_cap = mt9m001_try_fmt_cap,
.set_bus_param = mt9m001_set_bus_param,
.query_bus_param = mt9m001_query_bus_param,
- .formats = NULL, /* Filled in later depending on the */
- .num_formats = 0, /* camera type and data widths */
.controls = mt9m001_controls,
.num_controls = ARRAY_SIZE(mt9m001_controls),
.get_control = mt9m001_get_control,
@@ -573,19 +575,19 @@ static int mt9m001_video_probe(struct soc_camera_device *icd)
case 0x8411:
case 0x8421:
mt9m001->model = V4L2_IDENT_MT9M001C12ST;
- mt9m001_ops.formats = mt9m001_colour_formats;
+ icd->formats = mt9m001_colour_formats;
if (mt9m001->client->dev.platform_data)
- mt9m001_ops.num_formats = ARRAY_SIZE(mt9m001_colour_formats);
+ icd->num_formats = ARRAY_SIZE(mt9m001_colour_formats);
else
- mt9m001_ops.num_formats = 1;
+ icd->num_formats = 1;
break;
case 0x8431:
mt9m001->model = V4L2_IDENT_MT9M001C12STM;
- mt9m001_ops.formats = mt9m001_monochrome_formats;
+ icd->formats = mt9m001_monochrome_formats;
if (mt9m001->client->dev.platform_data)
- mt9m001_ops.num_formats = ARRAY_SIZE(mt9m001_monochrome_formats);
+ icd->num_formats = ARRAY_SIZE(mt9m001_monochrome_formats);
else
- mt9m001_ops.num_formats = 1;
+ icd->num_formats = 1;
break;
default:
ret = -ENODEV;
@@ -646,8 +648,6 @@ static int mt9m001_probe(struct i2c_client *client)
/* Second stage probe - when a capture adapter is there */
icd = &mt9m001->icd;
- icd->probe = mt9m001_video_probe;
- icd->remove = mt9m001_video_remove;
icd->ops = &mt9m001_ops;
icd->control = &client->dev;
icd->x_min = 20;