On Sun Feb 23 18:58:14 2025 +0000, Ricardo Ribalda wrote:
> 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 <riba...@chromium.org>
> Signed-off-by: Hans Verkuil <hverk...@xs4all.nl>
> Signed-off-by: Mauro Carvalho Chehab <mchehab+hua...@kernel.org>

Patch committed.

Thanks,
Mauro Carvalho Chehab

 drivers/media/v4l2-core/v4l2-ctrls-api.c | 51 +++++++++++++++++++-------------
 drivers/media/v4l2-core/v4l2-ioctl.c     | 28 ++----------------
 include/media/v4l2-ctrls.h               | 12 ++++++++
 3 files changed, 44 insertions(+), 47 deletions(-)

---

diff --git a/drivers/media/v4l2-core/v4l2-ctrls-api.c 
b/drivers/media/v4l2-core/v4l2-ctrls-api.c
index c61f3ec09d24..d49a68b36c28 100644
--- a/drivers/media/v4l2-core/v4l2-ctrls-api.c
+++ b/drivers/media/v4l2-core/v4l2-ctrls-api.c
@@ -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);
diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c 
b/drivers/media/v4l2-core/v4l2-ioctl.c
index d80a20ed2254..226495fc15e9 100644
--- a/drivers/media/v4l2-core/v4l2-ioctl.c
+++ b/drivers/media/v4l2-core/v4l2-ioctl.c
@@ -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,
diff --git a/include/media/v4l2-ctrls.h b/include/media/v4l2-ctrls.h
index 9ed7be1e696f..3a87096e064f 100644
--- a/include/media/v4l2-ctrls.h
+++ b/include/media/v4l2-ctrls.h
@@ -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

Reply via email to