[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:
parent
1499be67a5
commit
4c16d6a079
@ -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)
|
|||||||
* 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)
|
|||||||
|
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user