[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: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
This commit is contained in:
Laurent Pinchart 2014-05-31 08:50:32 -03:00 committed by Mauro Carvalho Chehab
parent 1499be67a5
commit 4c16d6a079
3 changed files with 9 additions and 13 deletions

View File

@ -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)

View 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 * 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;
} }
/* /*

View 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);
} }