diff --git a/sys/dev/usb/ukbd.c b/sys/dev/usb/ukbd.c index 9a5baf42d77..4b458331abc 100644 --- a/sys/dev/usb/ukbd.c +++ b/sys/dev/usb/ukbd.c @@ -151,6 +151,9 @@ USB_MATCH(ukbd) if ((*sw->probe)(unit, (void *)arg, 0)) return (UMATCH_NONE); + if (usbd_get_quirks(uaa->device)->uq_flags & UQ_KBD_IGNORE) + return (UMATCH_NONE); + return (UMATCH_IFACECLASS_IFACESUBCLASS_IFACEPROTO); } diff --git a/sys/dev/usb/usb_quirks.c b/sys/dev/usb/usb_quirks.c index 901a6ca45d9..508b6535a0d 100644 --- a/sys/dev/usb/usb_quirks.c +++ b/sys/dev/usb/usb_quirks.c @@ -119,6 +119,9 @@ static const struct usbd_quirk_entry { ANY, { UQ_HID_IGNORE }}, { USB_VENDOR_MGE, USB_PRODUCT_MGE_UPS2, ANY, { UQ_HID_IGNORE }}, + /* Devices which should be ignored by both ukbd and uhid */ + { USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_WISPY, + ANY, { UQ_KBD_IGNORE }}, { 0, 0, 0, { 0 } } }; diff --git a/sys/dev/usb/usb_quirks.h b/sys/dev/usb/usb_quirks.h index a9a93c44da0..cb140b9b9ec 100644 --- a/sys/dev/usb/usb_quirks.h +++ b/sys/dev/usb/usb_quirks.h @@ -56,6 +56,7 @@ struct usbd_quirks { #define UQ_BROKEN_BIDIR 0x2000 /* printer has broken bidir mode */ #define UQ_OPEN_CLEARSTALL 0x4000 /* device needs clear endpoint stall */ #define UQ_HID_IGNORE 0x8000 /* device should be ignored by hid class */ +#define UQ_KBD_IGNORE 0x18000 /* device should be ignored by both kbd and hid class */ }; diff --git a/sys/dev/usb/usbdevs b/sys/dev/usb/usbdevs index bc0a7063dd5..78d2e552a2c 100644 --- a/sys/dev/usb/usbdevs +++ b/sys/dev/usb/usbdevs @@ -836,6 +836,7 @@ product CURITEL PC5740 0x3701 Broadband wireless modem /* Cypress Semiconductor products */ product CYPRESS MOUSE 0x0001 mouse product CYPRESS THERMO 0x0002 thermometer +product CYPRESS WISPY 0x0bad MetaGeek Wi-Spy product CYPRESS FMRADIO 0x1002 FM Radio product CYPRESS SLIM_HUB 0x6560 Slim Hub