forked from Minki/linux
[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 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)
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user