Commit 4c16d6a0 authored by Laurent Pinchart's avatar Laurent Pinchart Committed by Mauro Carvalho Chehab

[media] v4l: vsp1: Propagate vsp1_device_get errors to the callers

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: default avatarLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Signed-off-by: default avatarMauro Carvalho Chehab <m.chehab@samsung.com>
parent 1499be67
...@@ -66,7 +66,7 @@ struct vsp1_device { ...@@ -66,7 +66,7 @@ struct vsp1_device {
struct media_device media_dev; 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); void vsp1_device_put(struct vsp1_device *vsp1);
static inline u32 vsp1_read(struct vsp1_device *vsp1, u32 reg) static inline u32 vsp1_read(struct vsp1_device *vsp1, u32 reg)
......
...@@ -345,36 +345,32 @@ static int vsp1_device_init(struct vsp1_device *vsp1) ...@@ -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 * Increment the VSP1 reference count and initialize the device if the first
* reference is taken. * 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 = 0;
int ret;
mutex_lock(&vsp1->lock); mutex_lock(&vsp1->lock);
if (vsp1->ref_count > 0) if (vsp1->ref_count > 0)
goto done; goto done;
ret = clk_prepare_enable(vsp1->clock); ret = clk_prepare_enable(vsp1->clock);
if (ret < 0) { if (ret < 0)
__vsp1 = NULL;
goto done; goto done;
}
ret = vsp1_device_init(vsp1); ret = vsp1_device_init(vsp1);
if (ret < 0) { if (ret < 0) {
clk_disable_unprepare(vsp1->clock); clk_disable_unprepare(vsp1->clock);
__vsp1 = NULL;
goto done; goto done;
} }
done: done:
if (__vsp1) if (!ret)
vsp1->ref_count++; vsp1->ref_count++;
mutex_unlock(&vsp1->lock); mutex_unlock(&vsp1->lock);
return __vsp1; return ret;
} }
/* /*
......
...@@ -955,8 +955,8 @@ static int vsp1_video_open(struct file *file) ...@@ -955,8 +955,8 @@ static int vsp1_video_open(struct file *file)
file->private_data = vfh; file->private_data = vfh;
if (!vsp1_device_get(video->vsp1)) { ret = vsp1_device_get(video->vsp1);
ret = -EBUSY; if (ret < 0) {
v4l2_fh_del(vfh); v4l2_fh_del(vfh);
kfree(vfh); kfree(vfh);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment