Hi Christoph,

Thank you for the patch.

On Wednesday, 21 February 2018 13:26:29 EET Christoph Fritz wrote:
> This patch adds a quirk to force Phytec CAM 004H to format GBRG because
> it is announcing its format wrong.

Could you please send me the output of 'lsusb -d 199e:8302 -v' (if possible 
running as root) ?

> Signed-off-by: Christoph Fritz <chf.fr...@googlemail.com>
> Tested-by: Norbert Wesp <n.w...@phytec.de>
> ---
>  drivers/media/usb/uvc/uvc_driver.c | 16 ++++++++++++++++
>  drivers/media/usb/uvc/uvcvideo.h   |  1 +
>  2 files changed, 17 insertions(+)
> 
> diff --git a/drivers/media/usb/uvc/uvc_driver.c
> b/drivers/media/usb/uvc/uvc_driver.c index cde43b6..8bfa40b 100644
> --- a/drivers/media/usb/uvc/uvc_driver.c
> +++ b/drivers/media/usb/uvc/uvc_driver.c
> @@ -406,6 +406,13 @@ static int uvc_parse_format(struct uvc_device *dev,
>                               width_multiplier = 2;
>                       }
>               }
> +             if (dev->quirks & UVC_QUIRK_FORCE_GBRG) {
> +                     if (format->fcc == V4L2_PIX_FMT_SGRBG8) {
> +                             strlcpy(format->name, "GBRG Bayer (GBRG)",
> +                                     sizeof(format->name));
> +                             format->fcc = V4L2_PIX_FMT_SGBRG8;
> +                     }
> +             }
> 
>               if (buffer[2] == UVC_VS_FORMAT_UNCOMPRESSED) {
>                       ftype = UVC_VS_FRAME_UNCOMPRESSED;
> @@ -2631,6 +2638,15 @@ static struct usb_device_id uvc_ids[] = {
>         .bInterfaceClass      = USB_CLASS_VENDOR_SPEC,
>         .bInterfaceSubClass   = 1,
>         .bInterfaceProtocol   = 0 },
> +     /* PHYTEC CAM 004H cameras */
> +     { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
> +                             | USB_DEVICE_ID_MATCH_INT_INFO,
> +       .idVendor             = 0x199e,
> +       .idProduct            = 0x8302,
> +       .bInterfaceClass      = USB_CLASS_VIDEO,
> +       .bInterfaceSubClass   = 1,
> +       .bInterfaceProtocol   = 0,
> +       .driver_info          = UVC_QUIRK_FORCE_GBRG },
>       /* Bodelin ProScopeHR */
>       { .match_flags          = USB_DEVICE_ID_MATCH_DEVICE
> 
>                               | USB_DEVICE_ID_MATCH_DEV_HI
> 
> diff --git a/drivers/media/usb/uvc/uvcvideo.h
> b/drivers/media/usb/uvc/uvcvideo.h index 7e4d3ee..ad51002 100644
> --- a/drivers/media/usb/uvc/uvcvideo.h
> +++ b/drivers/media/usb/uvc/uvcvideo.h
> @@ -164,6 +164,7 @@
>  #define UVC_QUIRK_RESTRICT_FRAME_RATE        0x00000200
>  #define UVC_QUIRK_RESTORE_CTRLS_ON_INIT      0x00000400
>  #define UVC_QUIRK_FORCE_Y8           0x00000800
> +#define UVC_QUIRK_FORCE_GBRG         0x00001000

I don't think we should add a quirk flag for every format that needs to be 
forced. Instead, now that we have a new way to store per-device parameters 
since commit 3bc85817d798 ("media: uvcvideo: Add extensible device 
information"), how about making use of it and adding a field to the 
uvc_device_info structure to store the forced format ?

>  /* Format flags */
>  #define UVC_FMT_FLAG_COMPRESSED              0x00000001

-- 
Regards,

Laurent Pinchart

Reply via email to