]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
media: uvcvideo: Do not turn on the camera for some ioctls
authorRicardo Ribalda <ribalda@chromium.org>
Thu, 27 Mar 2025 21:05:31 +0000 (21:05 +0000)
committerHans Verkuil <hverkuil@xs4all.nl>
Fri, 9 May 2025 13:29:12 +0000 (15:29 +0200)
There are some ioctls that do not need to turn on the camera. Do not
call uvc_pm_get in those cases.

Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
Message-ID: <20250327-uvc-granpower-ng-v6-5-35a2357ff348@chromium.org>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
drivers/media/usb/uvc/uvc_v4l2.c

index 0f1ed0387b2611c8d21e211afe21a35101071d93..668a4e9d772c6d91f045ca75e2744b3a6c69da6b 100644 (file)
@@ -1440,6 +1440,26 @@ static long uvc_v4l2_unlocked_ioctl(struct file *file,
        struct uvc_fh *handle = file->private_data;
        int ret;
 
+       /* The following IOCTLs do not need to turn on the camera. */
+       switch (cmd) {
+       case VIDIOC_CREATE_BUFS:
+       case VIDIOC_DQBUF:
+       case VIDIOC_ENUM_FMT:
+       case VIDIOC_ENUM_FRAMEINTERVALS:
+       case VIDIOC_ENUM_FRAMESIZES:
+       case VIDIOC_ENUMINPUT:
+       case VIDIOC_EXPBUF:
+       case VIDIOC_G_FMT:
+       case VIDIOC_G_PARM:
+       case VIDIOC_G_SELECTION:
+       case VIDIOC_QBUF:
+       case VIDIOC_QUERYCAP:
+       case VIDIOC_REQBUFS:
+       case VIDIOC_SUBSCRIBE_EVENT:
+       case VIDIOC_UNSUBSCRIBE_EVENT:
+               return video_ioctl2(file, cmd, arg);
+       }
+
        ret = uvc_pm_get(handle->stream->dev);
        if (ret)
                return ret;