I'm in no way qualified to OK this, but I'd like to see this get in,
because it does help me out :-)

martijn@

On Mon, 2021-03-15 at 08:35 +0100, Marcus Glocker wrote:
> martijn@ has recently reported that in his machine he has two cams
> of which one is doing IR, which isn't really supported by uvideo(4).
> This IR device attaches always first as uvideo0, so he needs to swap
> that regularly with his working cam which by default attaches to uvideo1.
> 
> I came up with a new quirk flag to *not* attach certain devices.  Tested
> successfully by martijn@, the IR cam attaches to ugen0 and the supported
> cam to uvideo0.
> 
> This patch shouldn't affect any supported uvideo(4) devices.
> 
> OK?
> 
> 
> Index: sys/dev/usb/uvideo.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/usb/uvideo.c,v
> retrieving revision 1.211
> diff -u -p -u -p -r1.211 uvideo.c
> --- sys/dev/usb/uvideo.c        27 Jan 2021 17:28:19 -0000      1.211
> +++ sys/dev/usb/uvideo.c        8 Mar 2021 22:06:51 -0000
> @@ -307,6 +307,7 @@ struct video_hw_if uvideo_hw_if = {
>  #define UVIDEO_FLAG_ISIGHT_STREAM_HEADER       0x1
>  #define UVIDEO_FLAG_REATTACH                   0x2
>  #define UVIDEO_FLAG_VENDOR_CLASS               0x4
> +#define UVIDEO_FLAG_NOATTACH                   0x8
>  struct uvideo_devs {
>         struct usb_devno         uv_dev;
>         char                    *ucode_name;
> @@ -382,6 +383,12 @@ struct uvideo_devs {
>             NULL,
>             UVIDEO_FLAG_VENDOR_CLASS
>         },
> +       {   /* Infrared camera not supported */
> +           { USB_VENDOR_CHICONY, USB_PRODUCT_CHICONY_IRCAMERA },
> +           NULL,
> +           NULL,
> +           UVIDEO_FLAG_NOATTACH
> +       },
>  };
>  #define uvideo_lookup(v, p) \
>         ((struct uvideo_devs *)usb_lookup(uvideo_devs, v, p))
> @@ -480,13 +487,12 @@ uvideo_match(struct device *parent, void
>         if (id == NULL)
>                 return (UMATCH_NONE);
>  
> -       if (id->bInterfaceClass == UICLASS_VIDEO &&
> -           id->bInterfaceSubClass == UISUBCLASS_VIDEOCONTROL)
> -               return (UMATCH_VENDOR_PRODUCT_CONF_IFACE);
> -
> -       /* quirk devices which we want to attach */
> +       /* quirk devices */
>         quirk = uvideo_lookup(uaa->vendor, uaa->product);
>         if (quirk != NULL) {
> +               if (quirk->flags & UVIDEO_FLAG_NOATTACH)
> +                       return (UMATCH_NONE);
> +
>                 if (quirk->flags & UVIDEO_FLAG_REATTACH)
>                         return (UMATCH_VENDOR_PRODUCT_CONF_IFACE);
>  
> @@ -495,6 +501,10 @@ uvideo_match(struct device *parent, void
>                     id->bInterfaceSubClass == UISUBCLASS_VIDEOCONTROL)
>                         return (UMATCH_VENDOR_PRODUCT_CONF_IFACE);
>         }
> +
> +       if (id->bInterfaceClass == UICLASS_VIDEO &&
> +           id->bInterfaceSubClass == UISUBCLASS_VIDEOCONTROL)
> +               return (UMATCH_VENDOR_PRODUCT_CONF_IFACE);
>  
>         return (UMATCH_NONE);
>  }
> Index: sys/dev/usb/usbdevs
> ===================================================================
> RCS file: /cvs/src/sys/dev/usb/usbdevs,v
> retrieving revision 1.731
> diff -u -p -u -p -r1.731 usbdevs
> --- sys/dev/usb/usbdevs 27 Feb 2021 03:03:40 -0000      1.731
> +++ sys/dev/usb/usbdevs 8 Mar 2021 22:06:53 -0000
> @@ -1336,6 +1336,7 @@ product CHICONY RTL8188CUS_3      0xaff9  RTL8
>  product CHICONY RTL8188CUS_4   0xaffa  RTL8188CUS
>  product CHICONY RTL8188CUS_5   0xaffb  RTL8188CUS
>  product CHICONY RTL8188CUS_6   0xaffc  RTL8188CUS
> +product CHICONY IRCAMERA       0xb615  Integrated IR Camera
>  
>  /* CH Products */
>  product CHPRODUCTS PROTHROTTLE 0x00f1  Pro Throttle
> 


Reply via email to