Signed-off-by: Jean-François Moine <moin...@free.fr>
---
 drivers/media/video/pwc/pwc-v4l.c |   23 +++++++++++++++++++++--
 1 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/drivers/media/video/pwc/pwc-v4l.c 
b/drivers/media/video/pwc/pwc-v4l.c
index aa87e46..f85c512 100644
--- a/drivers/media/video/pwc/pwc-v4l.c
+++ b/drivers/media/video/pwc/pwc-v4l.c
@@ -379,8 +379,27 @@ static int pwc_s_input(struct file *file, void *fh, 
unsigned int i)
 
 static int pwc_queryctrl(struct file *file, void *fh, struct v4l2_queryctrl *c)
 {
-       int i;
-
+       int i, idx;
+       u32 id;
+
+       id = c->id;
+       if (id & V4L2_CTRL_FLAG_NEXT_CTRL) {
+               id &= V4L2_CTRL_ID_MASK;
+               id++;
+               idx = -1;
+               for (i = 0; i < ARRAY_SIZE(pwc_controls); i++) {
+                       if (pwc_controls[i].id < id)
+                               continue;
+                       if (idx >= 0
+                        && pwc_controls[i].id > pwc_controls[idx].id)
+                               continue;
+                       idx = i;
+               }
+               if (idx < 0)
+                       return -EINVAL;
+               memcpy(c, &pwc_controls[idx], sizeof pwc_controls[0]);
+               return 0;
+       }
        for (i = 0; i < sizeof(pwc_controls) / sizeof(struct v4l2_queryctrl); 
i++) {
                if (pwc_controls[i].id == c->id) {
                        PWC_DEBUG_IOCTL("ioctl(VIDIOC_QUERYCTRL) found\n");
-- 
1.7.4.1
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to