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: Ricardo Ribalda <ribalda@chromium.org>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
This commit is contained in:
Ricardo Ribalda 2025-02-23 18:58:14 +00:00 committed by Mauro Carvalho Chehab
parent 0d75129312
commit 6494d3504c
3 changed files with 46 additions and 49 deletions

View file

@ -1157,6 +1157,36 @@ int v4l2_query_ext_ctrl(struct v4l2_ctrl_handler *hdl, struct v4l2_query_ext_ctr
}
EXPORT_SYMBOL(v4l2_query_ext_ctrl);
void v4l2_query_ext_ctrl_to_v4l2_queryctrl(struct v4l2_queryctrl *to,
const struct v4l2_query_ext_ctrl *from)
{
to->id = from->id;
to->type = from->type;
to->flags = from->flags;
strscpy(to->name, from->name, sizeof(to->name));
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:
to->minimum = from->minimum;
to->maximum = from->maximum;
to->step = from->step;
to->default_value = from->default_value;
break;
default:
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)
{
@ -1167,29 +1197,8 @@ int v4l2_queryctrl(struct v4l2_ctrl_handler *hdl, struct v4l2_queryctrl *qc)
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) {
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;
break;
default:
qc->minimum = 0;
qc->maximum = 0;
qc->step = 0;
qc->default_value = 0;
break;
}
v4l2_query_ext_ctrl_to_v4l2_queryctrl(qc, &qec);
return 0;
}
EXPORT_SYMBOL(v4l2_queryctrl);

View file

@ -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,

View file

@ -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