aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/platform/soc_camera
diff options
context:
space:
mode:
authorGuennadi Liakhovetski <g.liakhovetski@gmx.de>2013-04-04 13:19:58 -0300
committerMauro Carvalho Chehab <mchehab@redhat.com>2013-06-21 15:46:42 -0300
commita78fcc11264b824d9651b55abfeedd16d5cd8415 (patch)
tree695b7d7ca102d2f55b0ae1903506eaa598d06c2a /drivers/media/platform/soc_camera
parent[media] sh-mobile-ceu-camera: move interface activation and deactivation to clock callbacks (diff)
downloadlinux-dev-a78fcc11264b824d9651b55abfeedd16d5cd8415.tar.xz
linux-dev-a78fcc11264b824d9651b55abfeedd16d5cd8415.zip
[media] soc-camera: make .clock_{start,stop} compulsory, .add / .remove optional
All existing soc-camera host drivers use .clock_start() and .clock_stop() callbacks to activate and deactivate their camera interfaces, whereas .add() and .remove() callbacks are usually dummy. Make the former two compulsory and the latter two optional. Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de> Acked-by: Hans Verkuil <hans.verkuil@cisco.com> Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/platform/soc_camera')
-rw-r--r--drivers/media/platform/soc_camera/soc_camera.c27
1 files changed, 13 insertions, 14 deletions
diff --git a/drivers/media/platform/soc_camera/soc_camera.c b/drivers/media/platform/soc_camera/soc_camera.c
index 3cc086036070..24393a14aaf6 100644
--- a/drivers/media/platform/soc_camera/soc_camera.c
+++ b/drivers/media/platform/soc_camera/soc_camera.c
@@ -512,23 +512,22 @@ static int soc_camera_add_device(struct soc_camera_device *icd)
if (ici->icd)
return -EBUSY;
- if (ici->ops->clock_start) {
- ret = ici->ops->clock_start(ici);
+ ret = ici->ops->clock_start(ici);
+ if (ret < 0)
+ return ret;
+
+ if (ici->ops->add) {
+ ret = ici->ops->add(icd);
if (ret < 0)
- return ret;
+ goto eadd;
}
- ret = ici->ops->add(icd);
- if (ret < 0)
- goto eadd;
-
ici->icd = icd;
return 0;
eadd:
- if (ici->ops->clock_stop)
- ici->ops->clock_stop(ici);
+ ici->ops->clock_stop(ici);
return ret;
}
@@ -539,9 +538,9 @@ static void soc_camera_remove_device(struct soc_camera_device *icd)
if (WARN_ON(icd != ici->icd))
return;
- ici->ops->remove(icd);
- if (ici->ops->clock_stop)
- ici->ops->clock_stop(ici);
+ if (ici->ops->remove)
+ ici->ops->remove(icd);
+ ici->ops->clock_stop(ici);
ici->icd = NULL;
}
@@ -1383,8 +1382,8 @@ int soc_camera_host_register(struct soc_camera_host *ici)
((!ici->ops->init_videobuf ||
!ici->ops->reqbufs) &&
!ici->ops->init_videobuf2) ||
- !ici->ops->add ||
- !ici->ops->remove ||
+ !ici->ops->clock_start ||
+ !ici->ops->clock_stop ||
!ici->ops->poll ||
!ici->v4l2_dev.dev)
return -EINVAL;