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

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

View File

@ -955,8 +955,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);
}