On Sun Feb 23 18:58:08 2025 +0000, Ricardo Ribalda wrote:
> The ioctl framework provides an emulator of queryctrl using
> query_ext_ctrl.
> Replace our implementation of queryctrl to support both.
> 
> Now that we are at it:
> - Add comment about missing functionality.
> - Remove superfluous clear of reserved[0].
> - Remove ret var.
> 
> 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/staging/media/atomisp/pci/atomisp_ioctl.c | 33 ++++++++++++-----------
 1 file changed, 18 insertions(+), 15 deletions(-)

---

diff --git a/drivers/staging/media/atomisp/pci/atomisp_ioctl.c 
b/drivers/staging/media/atomisp/pci/atomisp_ioctl.c
index 1a960a01854f..6b84bd8e6cf3 100644
--- a/drivers/staging/media/atomisp/pci/atomisp_ioctl.c
+++ b/drivers/staging/media/atomisp/pci/atomisp_ioctl.c
@@ -34,7 +34,7 @@ static const char *CARD = "ATOM ISP"; /* max size 31 */
  * FIXME: ISP should not know beforehand all CIDs supported by sensor.
  * Instead, it needs to propagate to sensor unknown CIDs.
  */
-static struct v4l2_queryctrl ci_v4l2_controls[] = {
+static struct v4l2_query_ext_ctrl ci_v4l2_controls[] = {
        {
                .id = V4L2_CID_AUTO_WHITE_BALANCE,
                .type = V4L2_CTRL_TYPE_BOOLEAN,
@@ -1140,31 +1140,34 @@ static int atomisp_s_ctrl(struct file *file, void *fh,
 
 /*
  * To query the attributes of a control.
- * applications set the id field of a struct v4l2_queryctrl and call the
+ * applications set the id field of a struct v4l2_query_ext_ctrl and call the
  * this ioctl with a pointer to this structure. The driver fills
  * the rest of the structure.
  */
-static int atomisp_queryctl(struct file *file, void *fh,
-                           struct v4l2_queryctrl *qc)
+static int atomisp_query_ext_ctrl(struct file *file, void *fh,
+                                 struct v4l2_query_ext_ctrl *qc)
 {
-       int i, ret = -EINVAL;
+       int i;
 
+       /* TODO: implement V4L2_CTRL_FLAG_NEXT_CTRL */
        if (qc->id & V4L2_CTRL_FLAG_NEXT_CTRL)
-               return ret;
+               return -EINVAL;
 
        for (i = 0; i < ctrls_num; i++) {
                if (ci_v4l2_controls[i].id == qc->id) {
-                       memcpy(qc, &ci_v4l2_controls[i],
-                              sizeof(struct v4l2_queryctrl));
-                       qc->reserved[0] = 0;
-                       ret = 0;
-                       break;
+                       *qc = ci_v4l2_controls[i];
+                       qc->elems = 1;
+                       qc->elem_size = 4;
+                       return 0;
                }
        }
-       if (ret != 0)
-               qc->flags = V4L2_CTRL_FLAG_DISABLED;
 
-       return ret;
+       /*
+        * This is probably not needed, but this flag has been set for
+        * many kernel versions. Leave it to avoid breaking any apps.
+        */
+       qc->flags = V4L2_CTRL_FLAG_DISABLED;
+       return -EINVAL;
 }
 
 static int atomisp_camera_g_ext_ctrls(struct file *file, void *fh,
@@ -1561,7 +1564,7 @@ const struct v4l2_ioctl_ops atomisp_ioctl_ops = {
        .vidioc_enum_input = atomisp_enum_input,
        .vidioc_g_input = atomisp_g_input,
        .vidioc_s_input = atomisp_s_input,
-       .vidioc_queryctrl = atomisp_queryctl,
+       .vidioc_query_ext_ctrl = atomisp_query_ext_ctrl,
        .vidioc_s_ctrl = atomisp_s_ctrl,
        .vidioc_g_ctrl = atomisp_g_ctrl,
        .vidioc_s_ext_ctrls = atomisp_s_ext_ctrls,

Reply via email to