v4l: vsp1: Propagate vsp1_device_get errors to the callers
authorLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Sat, 31 May 2014 11:50:32 +0000 (08:50 -0300)
committerSimon Horman <horms@verge.net.au>
Fri, 5 Dec 2014 00:24:28 +0000 (09:24 +0900)
Modify the vsp1_device_get() function to return an error code instead of
a pointer to the VSP1 device, and use the return value in the callers.

Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
(cherry picked from commit 4c16d6a079a4c9a64d664cc9c30ebae5f0bd0c64)
Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
drivers/media/platform/vsp1/vsp1.h
drivers/media/platform/vsp1/vsp1_drv.c
drivers/media/platform/vsp1/vsp1_video.c

index 3cfa393..1246719 100644 (file)
@@ -66,7 +66,7 @@ struct vsp1_device {
        struct media_device media_dev;
 };
 
-struct vsp1_device *vsp1_device_get(struct vsp1_device *vsp1);
+int vsp1_device_get(struct vsp1_device *vsp1);
 void vsp1_device_put(struct vsp1_device *vsp1);
 
 static inline u32 vsp1_read(struct vsp1_device *vsp1, u32 reg)
index 0c5e74c..3e6601b 100644 (file)
@@ -345,36 +345,32 @@ static int vsp1_device_init(struct vsp1_device *vsp1)
  * Increment the VSP1 reference count and initialize the device if the first
  * reference is taken.
  *
- * Return a pointer to the VSP1 device or NULL if an error occurred.
+ * Return 0 on success or a negative error code otherwise.
  */
-struct vsp1_device *vsp1_device_get(struct vsp1_device *vsp1)
+int vsp1_device_get(struct vsp1_device *vsp1)
 {
-       struct vsp1_device *__vsp1 = vsp1;
-       int ret;
+       int ret = 0;
 
        mutex_lock(&vsp1->lock);
        if (vsp1->ref_count > 0)
                goto done;
 
        ret = clk_prepare_enable(vsp1->clock);
-       if (ret < 0) {
-               __vsp1 = NULL;
+       if (ret < 0)
                goto done;
-       }
 
        ret = vsp1_device_init(vsp1);
        if (ret < 0) {
                clk_disable_unprepare(vsp1->clock);
-               __vsp1 = NULL;
                goto done;
        }
 
 done:
-       if (__vsp1)
+       if (!ret)
                vsp1->ref_count++;
 
        mutex_unlock(&vsp1->lock);
-       return __vsp1;
+       return ret;
 }
 
 /*
index 61ac316..00ca981 100644 (file)
@@ -957,8 +957,8 @@ static int vsp1_video_open(struct file *file)
 
        file->private_data = vfh;
 
-       if (!vsp1_device_get(video->vsp1)) {
-               ret = -EBUSY;
+       ret = vsp1_device_get(video->vsp1);
+       if (ret < 0) {
                v4l2_fh_del(vfh);
                kfree(vfh);
        }