]> www.infradead.org Git - users/hch/misc.git/commitdiff
media: usb: uvcvideo: Store v4l2_fh pointer in file->private_data
authorLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Sun, 10 Aug 2025 01:29:48 +0000 (04:29 +0300)
committerHans Verkuil <hverkuil+cisco@kernel.org>
Wed, 13 Aug 2025 06:33:21 +0000 (08:33 +0200)
Most V4L2 drivers store the v4l2_fh pointer in file->private_data. The
uvcvideo driver instead stores the pointer to the driver-specific
structure that embeds the v4l2_fh. Switch to storing the v4l2_fh pointer
itself to standardize behaviour across drivers. This also prepares for
future refactoring that depends on v4l2_fh being stored in private_data.

Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
drivers/media/usb/uvc/uvc_v4l2.c
drivers/media/usb/uvc/uvcvideo.h

index 160f9cf6e6dbdbf39e3eff56a5d5ea1d977fbe22..6dd329a972fda5c2574231b8526105676df3d4a1 100644 (file)
@@ -603,14 +603,14 @@ static int uvc_v4l2_open(struct file *file)
        v4l2_fh_add(&handle->vfh);
        handle->chain = stream->chain;
        handle->stream = stream;
-       file->private_data = handle;
+       file->private_data = &handle->vfh;
 
        return 0;
 }
 
 static int uvc_v4l2_release(struct file *file)
 {
-       struct uvc_fh *handle = file->private_data;
+       struct uvc_fh *handle = to_uvc_fh(file);
        struct uvc_streaming *stream = handle->stream;
 
        uvc_dbg(stream->dev, CALLS, "%s\n", __func__);
@@ -626,7 +626,7 @@ static int uvc_v4l2_release(struct file *file)
 static int uvc_ioctl_querycap(struct file *file, void *fh,
                              struct v4l2_capability *cap)
 {
-       struct uvc_fh *handle = file->private_data;
+       struct uvc_fh *handle = to_uvc_fh(file);
        struct uvc_video_chain *chain = handle->chain;
        struct uvc_streaming *stream = handle->stream;
 
@@ -1170,7 +1170,7 @@ static int uvc_v4l2_put_xu_query(const struct uvc_xu_control_query *kp,
 static long uvc_v4l2_compat_ioctl32(struct file *file,
                     unsigned int cmd, unsigned long arg)
 {
-       struct uvc_fh *handle = file->private_data;
+       struct uvc_fh *handle = to_uvc_fh(file);
        union {
                struct uvc_xu_control_mapping xmap;
                struct uvc_xu_control_query xqry;
@@ -1221,7 +1221,7 @@ static long uvc_v4l2_compat_ioctl32(struct file *file,
 static long uvc_v4l2_unlocked_ioctl(struct file *file,
                                    unsigned int cmd, unsigned long arg)
 {
-       struct uvc_fh *handle = file->private_data;
+       struct uvc_fh *handle = to_uvc_fh(file);
        unsigned int converted_cmd = v4l2_translate_cmd(cmd);
        int ret;
 
index 757254fc4fe930ae61c9d0425f04d4cd074a617e..8b56252030480b8a5d2ef6de24902b544357ff02 100644 (file)
@@ -637,6 +637,11 @@ struct uvc_fh {
        unsigned int pending_async_ctrls;
 };
 
+static inline struct uvc_fh *to_uvc_fh(struct file *filp)
+{
+       return container_of(filp->private_data, struct uvc_fh, vfh);
+}
+
 /* ------------------------------------------------------------------------
  * Debugging, printing and logging
  */