Hi Laurent, On 20/11/2020 15:30, Laurent Pinchart wrote: > The Shenzhen Aoni Electronic Co.,Ltd 2K FHD camera reports a UVC 1.10 > version, but implements UVC 1.0a as shown by the UVC probe control being > 26 bytes long. Force the UVC version for that device. > I wonder if that was a typo someone made confusing 0xa with '10' some point in the development? > Signed-off-by: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx> > Reported-by: Doncho Minkov <donchominkov@xxxxxxxxx> > Tested-by: Doncho Minkov <donchominkov@xxxxxxxxx> Painful to manually track these things, but I see the UVC driver already handles lots of quirks like that. So: Reviewed-by: Kieran Bingham <kieran.bingham+renesas@xxxxxxxxxxxxxxxx> > --- > drivers/media/usb/uvc/uvc_driver.c | 17 +++++++++++++++++ > drivers/media/usb/uvc/uvcvideo.h | 1 + > 2 files changed, 18 insertions(+) > > diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c > index ddb9eaa11be7..ae970f19bfca 100644 > --- a/drivers/media/usb/uvc/uvc_driver.c > +++ b/drivers/media/usb/uvc/uvc_driver.c > @@ -2274,6 +2274,12 @@ static int uvc_probe(struct usb_interface *intf, > "linux-uvc-devel mailing list.\n"); > } > > + if (dev->info->uvc_version) { > + dev->uvc_version = dev->info->uvc_version; > + uvc_printk(KERN_INFO, "Forcing UVC version to %u.%02x\n", > + dev->uvc_version >> 8, dev->uvc_version & 0xff); > + } > + > /* Register the V4L2 device. */ > if (v4l2_device_register(&intf->dev, &dev->vdev) < 0) > goto error; > @@ -2923,6 +2929,17 @@ static const struct usb_device_id uvc_ids[] = { > .bInterfaceSubClass = 1, > .bInterfaceProtocol = 0, > .driver_info = (kernel_ulong_t)&uvc_quirk_probe_minmax }, > + /* Shenzhen Aoni Electronic Co.,Ltd 2K FHD camera */ > + { .match_flags = USB_DEVICE_ID_MATCH_DEVICE > + | USB_DEVICE_ID_MATCH_INT_INFO, > + .idVendor = 0x1bcf, > + .idProduct = 0x0b40, > + .bInterfaceClass = USB_CLASS_VIDEO, > + .bInterfaceSubClass = 1, > + .bInterfaceProtocol = 0, > + .driver_info = (kernel_ulong_t)&(const struct uvc_device_info){ > + .uvc_version = 0x010a, > + } }, > /* SiGma Micro USB Web Camera */ > { .match_flags = USB_DEVICE_ID_MATCH_DEVICE > | USB_DEVICE_ID_MATCH_INT_INFO, > diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvideo.h > index a3dfacf069c4..8ec9eca07f06 100644 > --- a/drivers/media/usb/uvc/uvcvideo.h > +++ b/drivers/media/usb/uvc/uvcvideo.h > @@ -635,6 +635,7 @@ static inline u32 uvc_urb_index(const struct uvc_urb *uvc_urb) > struct uvc_device_info { > u32 quirks; > u32 meta_format; > + u16 uvc_version; > }; > > struct uvc_device { >