From: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
To: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: linux-media@vger.kernel.org, Hans Verkuil <hverkuil@xs4all.nl>
Subject: Re: [PATCH 2/3 v7] uvcvideo: add extensible device information
Date: Tue, 28 Nov 2017 17:20:47 +0100 (CET) [thread overview]
Message-ID: <alpine.DEB.2.20.1711281720140.16991@axis700.grange> (raw)
In-Reply-To: <4235306.7C2kvEcLJA@avalon>
Hi Laurent,
Thanks for reviewing.
On Tue, 28 Nov 2017, Laurent Pinchart wrote:
> Hi Guennadi,
>
> Thank you for the patch.
>
> On Wednesday, 8 November 2017 18:00:13 EET Guennadi Liakhovetski wrote:
> > From: Guennadi Liakhovetski <guennadi.liakhovetski@intel.com>
> >
> > Currently the UVC driver assigns a quirk bitmask to the .driver_info
> > field of struct usb_device_id. This patch instroduces a struct to store
> > quirks and possibly other per-device parameters in the future.
>
> I'd drop the "possibly" as I'm fairly certain we will have other parameters in
> the future. Otherwise the patch would be a bit pointless :-)
>
> > Signed-off-by: Guennadi Liakhovetski <guennadi.liakhovetski@intel.com>
> > ---
> >
> > v7: this is a new patch in the series. Needed to enable specifying
> > private camera metadata formats
> >
> > drivers/media/usb/uvc/uvc_driver.c | 127 ++++++++++++++++++++--------------
> > 1 file changed, 78 insertions(+), 49 deletions(-)
> >
> > diff --git a/drivers/media/usb/uvc/uvc_driver.c
> > b/drivers/media/usb/uvc/uvc_driver.c index 6d22b22..cbf79b9 100644
> > --- a/drivers/media/usb/uvc/uvc_driver.c
> > +++ b/drivers/media/usb/uvc/uvc_driver.c
> > @@ -2001,11 +2001,18 @@ static int uvc_register_chains(struct uvc_device
> > *dev) * USB probe, disconnect, suspend and resume
> > */
> >
> > +struct uvc_device_info {
> > + u32 quirks;
> > +};
> > +
> > static int uvc_probe(struct usb_interface *intf,
> > const struct usb_device_id *id)
> > {
> > struct usb_device *udev = interface_to_usbdev(intf);
> > struct uvc_device *dev;
> > + const struct uvc_device_info *info =
> > + (const struct uvc_device_info *)id->driver_info;
> > + u32 quirks = info ? info->quirks : 0;
> > int function;
> > int ret;
> >
> > @@ -2032,7 +2039,7 @@ static int uvc_probe(struct usb_interface *intf,
> > dev->intf = usb_get_intf(intf);
> > dev->intfnum = intf->cur_altsetting->desc.bInterfaceNumber;
> > dev->quirks = (uvc_quirks_param == -1)
> > - ? id->driver_info : uvc_quirks_param;
> > + ? quirks : uvc_quirks_param;
> >
> > if (udev->product != NULL)
> > strlcpy(dev->name, udev->product, sizeof dev->name);
> > @@ -2073,7 +2080,7 @@ static int uvc_probe(struct usb_interface *intf,
> > le16_to_cpu(udev->descriptor.idVendor),
> > le16_to_cpu(udev->descriptor.idProduct));
> >
> > - if (dev->quirks != id->driver_info) {
> > + if (dev->quirks != quirks) {
> > uvc_printk(KERN_INFO, "Forcing device quirks to 0x%x by module "
> > "parameter for testing purpose.\n", dev->quirks);
> > uvc_printk(KERN_INFO, "Please report required quirks to the "
> > @@ -2271,6 +2278,28 @@ static int uvc_clock_param_set(const char *val,
> > struct kernel_param *kp) * Driver initialization and cleanup
> > */
> >
> > +static struct uvc_device_info uvc_quirk_probe_minmax = {
> > + .quirks = UVC_QUIRK_PROBE_MINMAX,
> > +};
> > +
> > +static struct uvc_device_info uvc_quirk_fix_bandwidth = {
> > + .quirks = UVC_QUIRK_FIX_BANDWIDTH,
> > +};
> > +
> > +static struct uvc_device_info uvc_quirk_probe_def = {
> > + .quirks = UVC_QUIRK_PROBE_DEF,
> > +};
> > +
> > +static struct uvc_device_info uvc_quirk_stream_no_fid = {
> > + .quirks = UVC_QUIRK_STREAM_NO_FID,
> > +};
> > +
> > +static struct uvc_device_info uvc_quirk_force_y8 = {
> > + .quirks = UVC_QUIRK_FORCE_Y8,
> > +};
>
> You can make all of these static const.
>
> > +#define UVC_QUIRK_INFO(q) (kernel_ulong_t)&(struct uvc_device_info){.quirks
> > = q}
> > +
> > /*
> > * The Logitech cameras listed below have their interface class set to
> > * VENDOR_SPEC because they don't announce themselves as UVC devices, even
> > @@ -2285,7 +2314,7 @@ static int uvc_clock_param_set(const char *val, struct
> > kernel_param *kp) .bInterfaceClass = USB_CLASS_VIDEO,
> > .bInterfaceSubClass = 1,
> > .bInterfaceProtocol = 0,
> > - .driver_info = UVC_QUIRK_PROBE_MINMAX },
> > + .driver_info = (kernel_ulong_t)&uvc_quirk_probe_minmax },
> > /* Genius eFace 2025 */
> > { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
> >
> > | USB_DEVICE_ID_MATCH_INT_INFO,
> >
> > @@ -2294,7 +2323,7 @@ static int uvc_clock_param_set(const char *val, struct
> > kernel_param *kp) .bInterfaceClass = USB_CLASS_VIDEO,
> > .bInterfaceSubClass = 1,
> > .bInterfaceProtocol = 0,
> > - .driver_info = UVC_QUIRK_PROBE_MINMAX },
> > + .driver_info = (kernel_ulong_t)&uvc_quirk_probe_minmax },
> > /* Microsoft Lifecam NX-6000 */
> > { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
> >
> > | USB_DEVICE_ID_MATCH_INT_INFO,
> >
> > @@ -2303,7 +2332,7 @@ static int uvc_clock_param_set(const char *val, struct
> > kernel_param *kp) .bInterfaceClass = USB_CLASS_VIDEO,
> > .bInterfaceSubClass = 1,
> > .bInterfaceProtocol = 0,
> > - .driver_info = UVC_QUIRK_PROBE_MINMAX },
> > + .driver_info = (kernel_ulong_t)&uvc_quirk_probe_minmax },
> > /* Microsoft Lifecam NX-3000 */
> > { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
> >
> > | USB_DEVICE_ID_MATCH_INT_INFO,
> >
> > @@ -2312,7 +2341,7 @@ static int uvc_clock_param_set(const char *val, struct
> > kernel_param *kp) .bInterfaceClass = USB_CLASS_VIDEO,
> > .bInterfaceSubClass = 1,
> > .bInterfaceProtocol = 0,
> > - .driver_info = UVC_QUIRK_PROBE_DEF },
> > + .driver_info = (kernel_ulong_t)&uvc_quirk_probe_def },
> > /* Microsoft Lifecam VX-7000 */
> > { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
> >
> > | USB_DEVICE_ID_MATCH_INT_INFO,
> >
> > @@ -2321,7 +2350,7 @@ static int uvc_clock_param_set(const char *val, struct
> > kernel_param *kp) .bInterfaceClass = USB_CLASS_VIDEO,
> > .bInterfaceSubClass = 1,
> > .bInterfaceProtocol = 0,
> > - .driver_info = UVC_QUIRK_PROBE_MINMAX },
> > + .driver_info = (kernel_ulong_t)&uvc_quirk_probe_minmax },
> > /* Logitech Quickcam Fusion */
> > { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
> >
> > | USB_DEVICE_ID_MATCH_INT_INFO,
> >
> > @@ -2378,7 +2407,7 @@ static int uvc_clock_param_set(const char *val, struct
> > kernel_param *kp) .bInterfaceClass = USB_CLASS_VIDEO,
> > .bInterfaceSubClass = 1,
> > .bInterfaceProtocol = 0,
> > - .driver_info = UVC_QUIRK_RESTORE_CTRLS_ON_INIT },
> > + .driver_info = UVC_QUIRK_INFO(UVC_QUIRK_RESTORE_CTRLS_ON_INIT) },
> > /* Chicony CNF7129 (Asus EEE 100HE) */
> > { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
> >
> > | USB_DEVICE_ID_MATCH_INT_INFO,
> >
> > @@ -2387,7 +2416,7 @@ static int uvc_clock_param_set(const char *val, struct
> > kernel_param *kp) .bInterfaceClass = USB_CLASS_VIDEO,
> > .bInterfaceSubClass = 1,
> > .bInterfaceProtocol = 0,
> > - .driver_info = UVC_QUIRK_RESTRICT_FRAME_RATE },
> > + .driver_info = UVC_QUIRK_INFO(UVC_QUIRK_RESTRICT_FRAME_RATE) },
> > /* Alcor Micro AU3820 (Future Boy PC USB Webcam) */
> > { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
> >
> > | USB_DEVICE_ID_MATCH_INT_INFO,
> >
> > @@ -2396,7 +2425,7 @@ static int uvc_clock_param_set(const char *val, struct
> > kernel_param *kp) .bInterfaceClass = USB_CLASS_VIDEO,
> > .bInterfaceSubClass = 1,
> > .bInterfaceProtocol = 0,
> > - .driver_info = UVC_QUIRK_PROBE_MINMAX },
> > + .driver_info = (kernel_ulong_t)&uvc_quirk_probe_minmax },
> > /* Dell XPS m1530 */
> > { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
> >
> > | USB_DEVICE_ID_MATCH_INT_INFO,
> >
> > @@ -2405,7 +2434,7 @@ static int uvc_clock_param_set(const char *val, struct
> > kernel_param *kp) .bInterfaceClass = USB_CLASS_VIDEO,
> > .bInterfaceSubClass = 1,
> > .bInterfaceProtocol = 0,
> > - .driver_info = UVC_QUIRK_PROBE_DEF },
> > + .driver_info = (kernel_ulong_t)&uvc_quirk_probe_def },
> > /* Dell SP2008WFP Monitor */
> > { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
> >
> > | USB_DEVICE_ID_MATCH_INT_INFO,
> >
> > @@ -2414,7 +2443,7 @@ static int uvc_clock_param_set(const char *val, struct
> > kernel_param *kp) .bInterfaceClass = USB_CLASS_VIDEO,
> > .bInterfaceSubClass = 1,
> > .bInterfaceProtocol = 0,
> > - .driver_info = UVC_QUIRK_PROBE_DEF },
> > + .driver_info = (kernel_ulong_t)&uvc_quirk_probe_def },
> > /* Dell Alienware X51 */
> > { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
> >
> > | USB_DEVICE_ID_MATCH_INT_INFO,
> >
> > @@ -2423,7 +2452,7 @@ static int uvc_clock_param_set(const char *val, struct
> > kernel_param *kp) .bInterfaceClass = USB_CLASS_VIDEO,
> > .bInterfaceSubClass = 1,
> > .bInterfaceProtocol = 0,
> > - .driver_info = UVC_QUIRK_PROBE_DEF },
> > + .driver_info = UVC_QUIRK_INFO(UVC_QUIRK_PROBE_DEF) },
>
> This one can be (kernel_ulong_t)&uvc_quirk_probe_def.
>
> If you're fine with those changes there's no need to resubmit, I'll update the
> patch when applying, and
>
> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Yes, please, do.
Thanks
Guennadi
>
> > /* Dell Studio Hybrid 140g (OmniVision webcam) */
> > { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
> >
> > | USB_DEVICE_ID_MATCH_INT_INFO,
> >
> > @@ -2432,7 +2461,7 @@ static int uvc_clock_param_set(const char *val, struct
> > kernel_param *kp) .bInterfaceClass = USB_CLASS_VIDEO,
> > .bInterfaceSubClass = 1,
> > .bInterfaceProtocol = 0,
> > - .driver_info = UVC_QUIRK_PROBE_DEF },
> > + .driver_info = (kernel_ulong_t)&uvc_quirk_probe_def },
> > /* Dell XPS M1330 (OmniVision OV7670 webcam) */
> > { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
> >
> > | USB_DEVICE_ID_MATCH_INT_INFO,
> >
> > @@ -2441,7 +2470,7 @@ static int uvc_clock_param_set(const char *val, struct
> > kernel_param *kp) .bInterfaceClass = USB_CLASS_VIDEO,
> > .bInterfaceSubClass = 1,
> > .bInterfaceProtocol = 0,
> > - .driver_info = UVC_QUIRK_PROBE_DEF },
> > + .driver_info = (kernel_ulong_t)&uvc_quirk_probe_def },
> > /* Apple Built-In iSight */
> > { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
> >
> > | USB_DEVICE_ID_MATCH_INT_INFO,
> >
> > @@ -2450,8 +2479,8 @@ static int uvc_clock_param_set(const char *val, struct
> > kernel_param *kp) .bInterfaceClass = USB_CLASS_VIDEO,
> > .bInterfaceSubClass = 1,
> > .bInterfaceProtocol = 0,
> > - .driver_info = UVC_QUIRK_PROBE_MINMAX
> > - | UVC_QUIRK_BUILTIN_ISIGHT },
> > + .driver_info = UVC_QUIRK_INFO(UVC_QUIRK_PROBE_MINMAX
> > + | UVC_QUIRK_BUILTIN_ISIGHT) },
> > /* Apple Built-In iSight via iBridge */
> > { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
> >
> > | USB_DEVICE_ID_MATCH_INT_INFO,
> >
> > @@ -2460,7 +2489,7 @@ static int uvc_clock_param_set(const char *val, struct
> > kernel_param *kp) .bInterfaceClass = USB_CLASS_VIDEO,
> > .bInterfaceSubClass = 1,
> > .bInterfaceProtocol = 0,
> > - .driver_info = UVC_QUIRK_PROBE_DEF },
> > + .driver_info = (kernel_ulong_t)&uvc_quirk_probe_def },
> > /* Foxlink ("HP Webcam" on HP Mini 5103) */
> > { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
> >
> > | USB_DEVICE_ID_MATCH_INT_INFO,
> >
> > @@ -2469,7 +2498,7 @@ static int uvc_clock_param_set(const char *val, struct
> > kernel_param *kp) .bInterfaceClass = USB_CLASS_VIDEO,
> > .bInterfaceSubClass = 1,
> > .bInterfaceProtocol = 0,
> > - .driver_info = UVC_QUIRK_FIX_BANDWIDTH },
> > + .driver_info = (kernel_ulong_t)&uvc_quirk_fix_bandwidth },
> > /* Genesys Logic USB 2.0 PC Camera */
> > { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
> >
> > | USB_DEVICE_ID_MATCH_INT_INFO,
> >
> > @@ -2478,7 +2507,7 @@ static int uvc_clock_param_set(const char *val, struct
> > kernel_param *kp) .bInterfaceClass = USB_CLASS_VIDEO,
> > .bInterfaceSubClass = 1,
> > .bInterfaceProtocol = 0,
> > - .driver_info = UVC_QUIRK_STREAM_NO_FID },
> > + .driver_info = (kernel_ulong_t)&uvc_quirk_stream_no_fid },
> > /* Hercules Classic Silver */
> > { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
> >
> > | USB_DEVICE_ID_MATCH_INT_INFO,
> >
> > @@ -2487,7 +2516,7 @@ static int uvc_clock_param_set(const char *val, struct
> > kernel_param *kp) .bInterfaceClass = USB_CLASS_VIDEO,
> > .bInterfaceSubClass = 1,
> > .bInterfaceProtocol = 0,
> > - .driver_info = UVC_QUIRK_FIX_BANDWIDTH },
> > + .driver_info = (kernel_ulong_t)&uvc_quirk_fix_bandwidth },
> > /* ViMicro Vega */
> > { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
> >
> > | USB_DEVICE_ID_MATCH_INT_INFO,
> >
> > @@ -2496,7 +2525,7 @@ static int uvc_clock_param_set(const char *val, struct
> > kernel_param *kp) .bInterfaceClass = USB_CLASS_VIDEO,
> > .bInterfaceSubClass = 1,
> > .bInterfaceProtocol = 0,
> > - .driver_info = UVC_QUIRK_FIX_BANDWIDTH },
> > + .driver_info = (kernel_ulong_t)&uvc_quirk_fix_bandwidth },
> > /* ViMicro - Minoru3D */
> > { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
> >
> > | USB_DEVICE_ID_MATCH_INT_INFO,
> >
> > @@ -2505,7 +2534,7 @@ static int uvc_clock_param_set(const char *val, struct
> > kernel_param *kp) .bInterfaceClass = USB_CLASS_VIDEO,
> > .bInterfaceSubClass = 1,
> > .bInterfaceProtocol = 0,
> > - .driver_info = UVC_QUIRK_FIX_BANDWIDTH },
> > + .driver_info = (kernel_ulong_t)&uvc_quirk_fix_bandwidth },
> > /* ViMicro Venus - Minoru3D */
> > { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
> >
> > | USB_DEVICE_ID_MATCH_INT_INFO,
> >
> > @@ -2514,7 +2543,7 @@ static int uvc_clock_param_set(const char *val, struct
> > kernel_param *kp) .bInterfaceClass = USB_CLASS_VIDEO,
> > .bInterfaceSubClass = 1,
> > .bInterfaceProtocol = 0,
> > - .driver_info = UVC_QUIRK_FIX_BANDWIDTH },
> > + .driver_info = (kernel_ulong_t)&uvc_quirk_fix_bandwidth },
> > /* Ophir Optronics - SPCAM 620U */
> > { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
> >
> > | USB_DEVICE_ID_MATCH_INT_INFO,
> >
> > @@ -2523,7 +2552,7 @@ static int uvc_clock_param_set(const char *val, struct
> > kernel_param *kp) .bInterfaceClass = USB_CLASS_VIDEO,
> > .bInterfaceSubClass = 1,
> > .bInterfaceProtocol = 0,
> > - .driver_info = UVC_QUIRK_PROBE_MINMAX },
> > + .driver_info = (kernel_ulong_t)&uvc_quirk_probe_minmax },
> > /* MT6227 */
> > { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
> >
> > | USB_DEVICE_ID_MATCH_INT_INFO,
> >
> > @@ -2532,8 +2561,8 @@ static int uvc_clock_param_set(const char *val, struct
> > kernel_param *kp) .bInterfaceClass = USB_CLASS_VIDEO,
> > .bInterfaceSubClass = 1,
> > .bInterfaceProtocol = 0,
> > - .driver_info = UVC_QUIRK_PROBE_MINMAX
> > - | UVC_QUIRK_PROBE_DEF },
> > + .driver_info = UVC_QUIRK_INFO(UVC_QUIRK_PROBE_MINMAX
> > + | UVC_QUIRK_PROBE_DEF) },
> > /* IMC Networks (Medion Akoya) */
> > { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
> >
> > | USB_DEVICE_ID_MATCH_INT_INFO,
> >
> > @@ -2542,7 +2571,7 @@ static int uvc_clock_param_set(const char *val, struct
> > kernel_param *kp) .bInterfaceClass = USB_CLASS_VIDEO,
> > .bInterfaceSubClass = 1,
> > .bInterfaceProtocol = 0,
> > - .driver_info = UVC_QUIRK_STREAM_NO_FID },
> > + .driver_info = (kernel_ulong_t)&uvc_quirk_stream_no_fid },
> > /* JMicron USB2.0 XGA WebCam */
> > { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
> >
> > | USB_DEVICE_ID_MATCH_INT_INFO,
> >
> > @@ -2551,7 +2580,7 @@ static int uvc_clock_param_set(const char *val, struct
> > kernel_param *kp) .bInterfaceClass = USB_CLASS_VIDEO,
> > .bInterfaceSubClass = 1,
> > .bInterfaceProtocol = 0,
> > - .driver_info = UVC_QUIRK_PROBE_MINMAX },
> > + .driver_info = (kernel_ulong_t)&uvc_quirk_probe_minmax },
> > /* Syntek (HP Spartan) */
> > { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
> >
> > | USB_DEVICE_ID_MATCH_INT_INFO,
> >
> > @@ -2560,7 +2589,7 @@ static int uvc_clock_param_set(const char *val, struct
> > kernel_param *kp) .bInterfaceClass = USB_CLASS_VIDEO,
> > .bInterfaceSubClass = 1,
> > .bInterfaceProtocol = 0,
> > - .driver_info = UVC_QUIRK_STREAM_NO_FID },
> > + .driver_info = (kernel_ulong_t)&uvc_quirk_stream_no_fid },
> > /* Syntek (Samsung Q310) */
> > { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
> >
> > | USB_DEVICE_ID_MATCH_INT_INFO,
> >
> > @@ -2569,7 +2598,7 @@ static int uvc_clock_param_set(const char *val, struct
> > kernel_param *kp) .bInterfaceClass = USB_CLASS_VIDEO,
> > .bInterfaceSubClass = 1,
> > .bInterfaceProtocol = 0,
> > - .driver_info = UVC_QUIRK_STREAM_NO_FID },
> > + .driver_info = (kernel_ulong_t)&uvc_quirk_stream_no_fid },
> > /* Syntek (Packard Bell EasyNote MX52 */
> > { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
> >
> > | USB_DEVICE_ID_MATCH_INT_INFO,
> >
> > @@ -2578,7 +2607,7 @@ static int uvc_clock_param_set(const char *val, struct
> > kernel_param *kp) .bInterfaceClass = USB_CLASS_VIDEO,
> > .bInterfaceSubClass = 1,
> > .bInterfaceProtocol = 0,
> > - .driver_info = UVC_QUIRK_STREAM_NO_FID },
> > + .driver_info = (kernel_ulong_t)&uvc_quirk_stream_no_fid },
> > /* Syntek (Asus F9SG) */
> > { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
> >
> > | USB_DEVICE_ID_MATCH_INT_INFO,
> >
> > @@ -2587,7 +2616,7 @@ static int uvc_clock_param_set(const char *val, struct
> > kernel_param *kp) .bInterfaceClass = USB_CLASS_VIDEO,
> > .bInterfaceSubClass = 1,
> > .bInterfaceProtocol = 0,
> > - .driver_info = UVC_QUIRK_STREAM_NO_FID },
> > + .driver_info = (kernel_ulong_t)&uvc_quirk_stream_no_fid },
> > /* Syntek (Asus U3S) */
> > { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
> >
> > | USB_DEVICE_ID_MATCH_INT_INFO,
> >
> > @@ -2596,7 +2625,7 @@ static int uvc_clock_param_set(const char *val, struct
> > kernel_param *kp) .bInterfaceClass = USB_CLASS_VIDEO,
> > .bInterfaceSubClass = 1,
> > .bInterfaceProtocol = 0,
> > - .driver_info = UVC_QUIRK_STREAM_NO_FID },
> > + .driver_info = (kernel_ulong_t)&uvc_quirk_stream_no_fid },
> > /* Syntek (JAOtech Smart Terminal) */
> > { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
> >
> > | USB_DEVICE_ID_MATCH_INT_INFO,
> >
> > @@ -2605,7 +2634,7 @@ static int uvc_clock_param_set(const char *val, struct
> > kernel_param *kp) .bInterfaceClass = USB_CLASS_VIDEO,
> > .bInterfaceSubClass = 1,
> > .bInterfaceProtocol = 0,
> > - .driver_info = UVC_QUIRK_STREAM_NO_FID },
> > + .driver_info = (kernel_ulong_t)&uvc_quirk_stream_no_fid },
> > /* Miricle 307K */
> > { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
> >
> > | USB_DEVICE_ID_MATCH_INT_INFO,
> >
> > @@ -2614,7 +2643,7 @@ static int uvc_clock_param_set(const char *val, struct
> > kernel_param *kp) .bInterfaceClass = USB_CLASS_VIDEO,
> > .bInterfaceSubClass = 1,
> > .bInterfaceProtocol = 0,
> > - .driver_info = UVC_QUIRK_STREAM_NO_FID },
> > + .driver_info = (kernel_ulong_t)&uvc_quirk_stream_no_fid },
> > /* Lenovo Thinkpad SL400/SL500 */
> > { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
> >
> > | USB_DEVICE_ID_MATCH_INT_INFO,
> >
> > @@ -2623,7 +2652,7 @@ static int uvc_clock_param_set(const char *val, struct
> > kernel_param *kp) .bInterfaceClass = USB_CLASS_VIDEO,
> > .bInterfaceSubClass = 1,
> > .bInterfaceProtocol = 0,
> > - .driver_info = UVC_QUIRK_STREAM_NO_FID },
> > + .driver_info = (kernel_ulong_t)&uvc_quirk_stream_no_fid },
> > /* Aveo Technology USB 2.0 Camera */
> > { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
> >
> > | USB_DEVICE_ID_MATCH_INT_INFO,
> >
> > @@ -2632,8 +2661,8 @@ static int uvc_clock_param_set(const char *val, struct
> > kernel_param *kp) .bInterfaceClass = USB_CLASS_VIDEO,
> > .bInterfaceSubClass = 1,
> > .bInterfaceProtocol = 0,
> > - .driver_info = UVC_QUIRK_PROBE_MINMAX
> > - | UVC_QUIRK_PROBE_EXTRAFIELDS },
> > + .driver_info = UVC_QUIRK_INFO(UVC_QUIRK_PROBE_MINMAX
> > + | UVC_QUIRK_PROBE_EXTRAFIELDS) },
> > /* Aveo Technology USB 2.0 Camera (Tasco USB Microscope) */
> > { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
> >
> > | USB_DEVICE_ID_MATCH_INT_INFO,
> >
> > @@ -2650,7 +2679,7 @@ static int uvc_clock_param_set(const char *val, struct
> > kernel_param *kp) .bInterfaceClass = USB_CLASS_VIDEO,
> > .bInterfaceSubClass = 1,
> > .bInterfaceProtocol = 0,
> > - .driver_info = UVC_QUIRK_PROBE_EXTRAFIELDS },
> > + .driver_info = UVC_QUIRK_INFO(UVC_QUIRK_PROBE_EXTRAFIELDS) },
> > /* Manta MM-353 Plako */
> > { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
> >
> > | USB_DEVICE_ID_MATCH_INT_INFO,
> >
> > @@ -2659,7 +2688,7 @@ static int uvc_clock_param_set(const char *val, struct
> > kernel_param *kp) .bInterfaceClass = USB_CLASS_VIDEO,
> > .bInterfaceSubClass = 1,
> > .bInterfaceProtocol = 0,
> > - .driver_info = UVC_QUIRK_PROBE_MINMAX },
> > + .driver_info = (kernel_ulong_t)&uvc_quirk_probe_minmax },
> > /* FSC WebCam V30S */
> > { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
> >
> > | USB_DEVICE_ID_MATCH_INT_INFO,
> >
> > @@ -2668,7 +2697,7 @@ static int uvc_clock_param_set(const char *val, struct
> > kernel_param *kp) .bInterfaceClass = USB_CLASS_VIDEO,
> > .bInterfaceSubClass = 1,
> > .bInterfaceProtocol = 0,
> > - .driver_info = UVC_QUIRK_PROBE_MINMAX },
> > + .driver_info = (kernel_ulong_t)&uvc_quirk_probe_minmax },
> > /* Arkmicro unbranded */
> > { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
> >
> > | USB_DEVICE_ID_MATCH_INT_INFO,
> >
> > @@ -2677,7 +2706,7 @@ static int uvc_clock_param_set(const char *val, struct
> > kernel_param *kp) .bInterfaceClass = USB_CLASS_VIDEO,
> > .bInterfaceSubClass = 1,
> > .bInterfaceProtocol = 0,
> > - .driver_info = UVC_QUIRK_PROBE_DEF },
> > + .driver_info = (kernel_ulong_t)&uvc_quirk_probe_def },
> > /* The Imaging Source USB CCD cameras */
> > { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
> >
> > | USB_DEVICE_ID_MATCH_INT_INFO,
> >
> > @@ -2696,7 +2725,7 @@ static int uvc_clock_param_set(const char *val, struct
> > kernel_param *kp) .bInterfaceClass = USB_CLASS_VIDEO,
> > .bInterfaceSubClass = 1,
> > .bInterfaceProtocol = 0,
> > - .driver_info = UVC_QUIRK_STATUS_INTERVAL },
> > + .driver_info = UVC_QUIRK_INFO(UVC_QUIRK_STATUS_INTERVAL) },
> > /* MSI StarCam 370i */
> > { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
> >
> > | USB_DEVICE_ID_MATCH_INT_INFO,
> >
> > @@ -2705,7 +2734,7 @@ static int uvc_clock_param_set(const char *val, struct
> > kernel_param *kp) .bInterfaceClass = USB_CLASS_VIDEO,
> > .bInterfaceSubClass = 1,
> > .bInterfaceProtocol = 0,
> > - .driver_info = UVC_QUIRK_PROBE_MINMAX },
> > + .driver_info = (kernel_ulong_t)&uvc_quirk_probe_minmax },
> > /* SiGma Micro USB Web Camera */
> > { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
> >
> > | USB_DEVICE_ID_MATCH_INT_INFO,
> >
> > @@ -2714,8 +2743,8 @@ static int uvc_clock_param_set(const char *val, struct
> > kernel_param *kp) .bInterfaceClass = USB_CLASS_VIDEO,
> > .bInterfaceSubClass = 1,
> > .bInterfaceProtocol = 0,
> > - .driver_info = UVC_QUIRK_PROBE_MINMAX
> > - | UVC_QUIRK_IGNORE_SELECTOR_UNIT },
> > + .driver_info = UVC_QUIRK_INFO(UVC_QUIRK_PROBE_MINMAX
> > + | UVC_QUIRK_IGNORE_SELECTOR_UNIT) },
> > /* Oculus VR Positional Tracker DK2 */
> > { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
> >
> > | USB_DEVICE_ID_MATCH_INT_INFO,
> >
> > @@ -2724,7 +2753,7 @@ static int uvc_clock_param_set(const char *val, struct
> > kernel_param *kp) .bInterfaceClass = USB_CLASS_VIDEO,
> > .bInterfaceSubClass = 1,
> > .bInterfaceProtocol = 0,
> > - .driver_info = UVC_QUIRK_FORCE_Y8 },
> > + .driver_info = (kernel_ulong_t)&uvc_quirk_force_y8 },
> > /* Oculus VR Rift Sensor */
> > { .match_flags = USB_DEVICE_ID_MATCH_DEVICE
> >
> > | USB_DEVICE_ID_MATCH_INT_INFO,
> >
> > @@ -2733,7 +2762,7 @@ static int uvc_clock_param_set(const char *val, struct
> > kernel_param *kp) .bInterfaceClass = USB_CLASS_VENDOR_SPEC,
> > .bInterfaceSubClass = 1,
> > .bInterfaceProtocol = 0,
> > - .driver_info = UVC_QUIRK_FORCE_Y8 },
> > + .driver_info = (kernel_ulong_t)&uvc_quirk_force_y8 },
> > /* Generic USB Video Class */
> > { USB_INTERFACE_INFO(USB_CLASS_VIDEO, 1, UVC_PC_PROTOCOL_UNDEFINED) },
> > { USB_INTERFACE_INFO(USB_CLASS_VIDEO, 1, UVC_PC_PROTOCOL_15) },
>
>
> --
> Regards,
>
> Laurent Pinchart
>
next prev parent reply other threads:[~2017-11-28 16:20 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-11-08 16:00 [PATCH 0/3 v7] uvcvideo: metadata nodes Guennadi Liakhovetski
2017-11-08 16:00 ` [PATCH 1/3 v7] V4L: Add a UVC Metadata format Guennadi Liakhovetski
2017-11-28 15:20 ` Laurent Pinchart
2017-11-28 15:26 ` Guennadi Liakhovetski
2017-11-08 16:00 ` [PATCH 2/3 v7] uvcvideo: add extensible device information Guennadi Liakhovetski
2017-11-28 15:55 ` Laurent Pinchart
2017-11-28 16:20 ` Guennadi Liakhovetski [this message]
2017-11-08 16:00 ` [PATCH 3/3 v7] uvcvideo: add a metadata device node Guennadi Liakhovetski
2017-12-05 0:24 ` Laurent Pinchart
2017-12-05 1:03 ` Laurent Pinchart
2017-12-05 8:06 ` Guennadi Liakhovetski
2017-12-05 9:44 ` Laurent Pinchart
2017-12-05 10:56 ` Guennadi Liakhovetski
2017-12-05 13:35 ` Laurent Pinchart
2017-12-05 13:44 ` Guennadi Liakhovetski
2017-12-05 13:49 ` Laurent Pinchart
2017-12-05 14:00 ` Guennadi Liakhovetski
2017-12-06 15:08 ` Guennadi Liakhovetski
2017-12-11 19:53 ` Laurent Pinchart
2017-12-06 15:15 ` [PATCH v8] uvcvideo: Add " Guennadi Liakhovetski
2017-12-11 20:16 ` Laurent Pinchart
2017-12-11 21:15 ` Laurent Pinchart
2017-12-11 21:44 ` Guennadi Liakhovetski
2017-12-11 21:53 ` Laurent Pinchart
2017-12-12 8:30 ` Guennadi Liakhovetski
2017-12-13 9:41 ` Laurent Pinchart
2017-12-13 9:51 ` Guennadi Liakhovetski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=alpine.DEB.2.20.1711281720140.16991@axis700.grange \
--to=g.liakhovetski@gmx.de \
--cc=hverkuil@xs4all.nl \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linux-media@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox