[media] soc-camera: make .clock_{start,stop} compulsory, .add / .remove optional
authorGuennadi Liakhovetski <g.liakhovetski@gmx.de>
Thu, 4 Apr 2013 16:19:58 +0000 (13:19 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Fri, 21 Jun 2013 18:46:42 +0000 (15:46 -0300)
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>
drivers/media/platform/soc_camera/soc_camera.c

index 3cc0860360700a1184dc073a7259ed308391005d..24393a14aaf6790eb05e239982f6ae6fab957551 100644 (file)
@@ -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;