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 >