]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
media: v4l2-core: Introduce v4l2_query_ext_ctrl_to_v4l2_queryctrl
authorRicardo Ribalda <ribalda@chromium.org>
Sun, 23 Feb 2025 18:58:14 +0000 (18:58 +0000)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Wed, 5 Mar 2025 09:43:26 +0000 (10:43 +0100)
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>
drivers/media/v4l2-core/v4l2-ctrls-api.c
drivers/media/v4l2-core/v4l2-ioctl.c
include/media/v4l2-ctrls.h

index c61f3ec09d244ac1473b7f153af9137a8638b859..d49a68b36c28ba4b38b90b86b5bdfa631d86ada1 100644 (file)
@@ -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);
index d80a20ed22541770651af5dfe42db99b05d195a5..226495fc15e929d09bb3cda57525c3d28aa64629 100644 (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,
index 9ed7be1e696fabaa95db1f4dc61c371abe884c83..3a87096e064f501442f1e45396bfa444cfca059e 100644 (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