Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

[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
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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)
+6 −10
Original line number Diff line number Diff line
@@ -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;
}

/*
+2 −2
Original line number Diff line number Diff line
@@ -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);
	}