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