Commit 6494d350 authored by Ricardo Ribalda's avatar Ricardo Ribalda Committed by Mauro Carvalho Chehab
Browse files

media: v4l2-core: Introduce v4l2_query_ext_ctrl_to_v4l2_queryctrl



We use this logic in a couple of places. Refactor into a function.
No functional change expected from this patch.

Signed-off-by: default avatarRicardo Ribalda <ribalda@chromium.org>
Signed-off-by: default avatarHans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
parent 0d751293
Loading
Loading
Loading
Loading
+30 −21
Original line number Diff line number Diff line
@@ -1157,39 +1157,48 @@ int v4l2_query_ext_ctrl(struct v4l2_ctrl_handler *hdl, struct v4l2_query_ext_ctr
}
EXPORT_SYMBOL(v4l2_query_ext_ctrl);

/* Implement VIDIOC_QUERYCTRL */
int v4l2_queryctrl(struct v4l2_ctrl_handler *hdl, struct v4l2_queryctrl *qc)
void v4l2_query_ext_ctrl_to_v4l2_queryctrl(struct v4l2_queryctrl *to,
					   const struct v4l2_query_ext_ctrl *from)
{
	struct v4l2_query_ext_ctrl qec = { qc->id };
	int rc;
	to->id = from->id;
	to->type = from->type;
	to->flags = from->flags;
	strscpy(to->name, from->name, sizeof(to->name));

	rc = v4l2_query_ext_ctrl(hdl, &qec);
	if (rc)
		return rc;

	qc->id = qec.id;
	qc->type = qec.type;
	qc->flags = qec.flags;
	strscpy(qc->name, qec.name, sizeof(qc->name));
	switch (qc->type) {
	switch (from->type) {
	case V4L2_CTRL_TYPE_INTEGER:
	case V4L2_CTRL_TYPE_BOOLEAN:
	case V4L2_CTRL_TYPE_MENU:
	case V4L2_CTRL_TYPE_INTEGER_MENU:
	case V4L2_CTRL_TYPE_STRING:
	case V4L2_CTRL_TYPE_BITMASK:
		qc->minimum = qec.minimum;
		qc->maximum = qec.maximum;
		qc->step = qec.step;
		qc->default_value = qec.default_value;
		to->minimum = from->minimum;
		to->maximum = from->maximum;
		to->step = from->step;
		to->default_value = from->default_value;
		break;
	default:
		qc->minimum = 0;
		qc->maximum = 0;
		qc->step = 0;
		qc->default_value = 0;
		to->minimum = 0;
		to->maximum = 0;
		to->step = 0;
		to->default_value = 0;
		break;
	}
}
EXPORT_SYMBOL(v4l2_query_ext_ctrl_to_v4l2_queryctrl);

/* Implement VIDIOC_QUERYCTRL */
int v4l2_queryctrl(struct v4l2_ctrl_handler *hdl, struct v4l2_queryctrl *qc)
{
	struct v4l2_query_ext_ctrl qec = { qc->id };
	int rc;

	rc = v4l2_query_ext_ctrl(hdl, &qec);
	if (rc)
		return rc;

	v4l2_query_ext_ctrl_to_v4l2_queryctrl(qc, &qec);

	return 0;
}
EXPORT_SYMBOL(v4l2_queryctrl);
+2 −26
Original line number Diff line number Diff line
@@ -2304,32 +2304,8 @@ static int v4l_queryctrl(const struct v4l2_ioctl_ops *ops,
	ret = ops->vidioc_query_ext_ctrl(file, fh, &qec);
	if (ret)
		return ret;

	p->id = qec.id;
	p->type = qec.type;
	p->flags = qec.flags;
	strscpy(p->name, qec.name, sizeof(p->name));
	switch (p->type) {
	case V4L2_CTRL_TYPE_INTEGER:
	case V4L2_CTRL_TYPE_BOOLEAN:
	case V4L2_CTRL_TYPE_MENU:
	case V4L2_CTRL_TYPE_INTEGER_MENU:
	case V4L2_CTRL_TYPE_STRING:
	case V4L2_CTRL_TYPE_BITMASK:
		p->minimum = qec.minimum;
		p->maximum = qec.maximum;
		p->step = qec.step;
		p->default_value = qec.default_value;
		break;
	default:
		p->minimum = 0;
		p->maximum = 0;
		p->step = 0;
		p->default_value = 0;
		break;
	}

	return 0;
	v4l2_query_ext_ctrl_to_v4l2_queryctrl(p, &qec);
	return ret;
}

static int v4l_query_ext_ctrl(const struct v4l2_ioctl_ops *ops,
+12 −0
Original line number Diff line number Diff line
@@ -1432,6 +1432,18 @@ v4l2_ctrl_request_hdl_ctrl_find(struct v4l2_ctrl_handler *hdl, u32 id);
 */
int v4l2_queryctrl(struct v4l2_ctrl_handler *hdl, struct v4l2_queryctrl *qc);

/**
 * v4l2_query_ext_ctrl_to_v4l2_queryctrl - Convert a qec to qe.
 *
 * @to: The v4l2_queryctrl to write to.
 * @from: The v4l2_query_ext_ctrl to read from.
 *
 * This function is a helper to convert a v4l2_query_ext_ctrl into a
 * v4l2_queryctrl.
 */
void v4l2_query_ext_ctrl_to_v4l2_queryctrl(struct v4l2_queryctrl *to,
					   const struct v4l2_query_ext_ctrl *from);

/**
 * v4l2_query_ext_ctrl - Helper function to implement
 *	 :ref:`VIDIOC_QUERY_EXT_CTRL <vidioc_queryctrl>` ioctl