Re: [PATCH] media: uvcvideo: Force UVC version to 1.0a for 1bcf:0b40

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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 {
> 



[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux