diff --git a/sys/dev/usb/serial/uipaq.c b/sys/dev/usb/serial/uipaq.c index 79fe21e5c2c..89a4cd254ab 100644 --- a/sys/dev/usb/serial/uipaq.c +++ b/sys/dev/usb/serial/uipaq.c @@ -1103,6 +1103,10 @@ uipaq_probe(device_t dev) if (uaa->info.bIfaceIndex != UIPAQ_IFACE_INDEX) { return (ENXIO); } + if (uaa->info.bInterfaceClass == UICLASS_IAD) { + DPRINTF("IAD detected - not UIPAQ serial device\n"); + return (ENXIO); + } return (usbd_lookup_id_by_uaa(uipaq_devs, sizeof(uipaq_devs), uaa)); } diff --git a/sys/dev/usb/usb.h b/sys/dev/usb/usb.h index 68c3caf6a05..119839831c1 100644 --- a/sys/dev/usb/usb.h +++ b/sys/dev/usb/usb.h @@ -484,6 +484,8 @@ typedef struct usb_interface_assoc_descriptor usb_interface_assoc_descriptor_t; #define UISUBCLASS_RF 0x01 #define UIPROTO_BLUETOOTH 0x01 +#define UICLASS_IAD 0xEF /* Interface Association Descriptor */ + #define UICLASS_APPL_SPEC 0xfe #define UISUBCLASS_FIRMWARE_DOWNLOAD 1 #define UISUBCLASS_IRDA 2