Quirks cleanup and hid-generic niceness
Subsystems (4)
cover Quirks cleanup and hid-generic niceness
From: Benjamin Tissoires <[email protected]>
Hi,
This is the series I was talking about earlier[1].
Basically, Jiri, I'd like to see 1-3 applied in for-next at your earliest convenience, and we can discuss about 4/4 without any rush.
I have this in my local tree since June, but I made some late minute changes before sending, though the tests showed they are fine (I wouldn't mind a second pair of eyes on it).
I am pretty sure we can optimize the things more, but for now this should be just fine and just convert the quirks mechanism in hid-core.
For instance, there is a second call of hid_lookup_quirk() in usbhid/hid-core.c that I am not sure about the absolute need.
Niels, please have a look at this and tell me if you are OK to rebase your series on top of it.
Cheers,
Benjamin
[1] https://patchwork.kernel.org/patch/9980443/
Benjamin Tissoires (4):
HID: core: move the dynamic quirks handling in core
HID: quirks: move the list of special devices into a quirk
HID: core: move the list of ignored devices in hid-quirks.c
HID: core: remove the absolute need of hid_have_special_driver[]
drivers/hid/Makefile | 2 +- drivers/hid/hid-core.c | 925 ++--------------------------- drivers/hid/hid-generic.c | 68 ++- drivers/hid/hid-quirks.c | 1242 +++++++++++++++++++++++++++++++++++++++ drivers/hid/usbhid/Makefile | 2 +- drivers/hid/usbhid/hid-core.c | 10 +- drivers/hid/usbhid/hid-quirks.c | 401 ------------- include/linux/hid.h | 21 +- net/bluetooth/hidp/core.c | 2 +- 9 files changed, 1388 insertions(+), 1285 deletions(-) create mode 100644 drivers/hid/hid-quirks.c delete mode 100644 drivers/hid/usbhid/hid-quirks.c
Signature · 1 line
2.9.5
PATCH 1/4 HID: core: move the dynamic quirks handling in core
From: Benjamin Tissoires <[email protected]>
usbhid has a list of dynamic quirks in addition to a list of static quirks. There is not much USB specific in that, so move this part of the module in core so we can have one central place for quirks.
--- drivers/hid/Makefile | 2 +- drivers/hid/hid-core.c | 9 +- drivers/hid/hid-quirks.c | 396 +++++++++++++++++++++++++++++++++++++++ drivers/hid/usbhid/Makefile | 2 +- drivers/hid/usbhid/hid-core.c | 10 +- drivers/hid/usbhid/hid-quirks.c | 401 ---------------------------------------- include/linux/hid.h | 10 +- 7 files changed, 414 insertions(+), 416 deletions(-) create mode 100644 drivers/hid/hid-quirks.c delete mode 100644 drivers/hid/usbhid/hid-quirks.c
drivers/hid/Makefile +1 -1
@@ -1,7 +1,7 @@ # # Makefile for the HID driver # -hid-y := hid-core.o hid-input.o +hid-y := hid-core.o hid-input.o hid-quirks.o hid-$(CONFIG_DEBUG_FS) += hid-debug.o obj-$(CONFIG_HID) += hid.o
drivers/hid/hid-core.c +6 -3
@@ -1597,8 +1597,8 @@ int hid_input_report(struct hid_device *hid, int type, u8 *data, int size, int i }EXPORT_SYMBOL_GPL (hid_input_report); -static bool hid_match_one_id (struct hid_device *hdev, -const struct hid_device_id *id) +bool hid_match_one_id (const struct hid_device *hdev, +const struct hid_device_id *id) {return (id->bus ==HID_BUS_ANY || id->bus == hdev->bus) && (id->group == HID_GROUP_ANY || id->group == hdev->group) &&
@@ -1606,7 +1606,7 @@ static bool hid_match_one_id(struct hid_device *hdev, (id->product ==HID_ANY_ID || id->product == hdev->product); } -const struct hid_device_id *hid_match_id (struct hid_device *hdev, +const struct hid_device_id *hid_match_id (const struct hid_device *hdev,const struct hid_device_id *id) {for (; id->bus; id++)
@@ -2925,6 +2925,8 @@ int hid_add_device(struct hid_device *hdev)if (WARN_ON (hdev->status &HID_STAT_ADDED ))return -EBUSY ; + hdev->quirks =hid_lookup_quirk (hdev); +/* we need to kill them here, otherwise they will stay allocated to * wait for coming driver */ if (hid_ignore (hdev))
@@ -3111,6 +3113,7 @@ static void __exit hid_exit(void)hid_debug_exit ();hidraw_exit ();bus_unregister (&hid_bus_type); +hid_quirks_exit (HID_BUS_ANY ); }module_init (hid_init);
drivers/hid/hid-quirks.c new file +396 -0
396 lines not on this page · raw message
drivers/hid/usbhid/Makefile +1 -1
@@ -2,7 +2,7 @@ # Makefile for the USB input drivers # -usbhid-y := hid-core.o hid-quirks.o +usbhid-y := hid-core.o usbhid-$(CONFIG_USB_HIDDEV) += hiddev.o usbhid-$(CONFIG_HID_PID) += hid-pidff.o
drivers/hid/usbhid/hid-core.c +4 -6
@@ -976,8 +976,7 @@ static int usbhid_parse(struct hid_device *hid)char *rdesc;int ret, n; - quirks =usbhid_lookup_quirk (le16_to_cpu (dev->descriptor.idVendor), -le16_to_cpu (dev->descriptor.idProduct)); + quirks =hid_lookup_quirk (hid);if (quirks &HID_QUIRK_IGNORE )return -ENODEV ;
@@ -1319,7 +1318,6 @@ static int usbhid_probe(struct usb_interface *intf, const struct usb_device_id * hid->vendor =le16_to_cpu (dev->descriptor.idVendor); hid->product =le16_to_cpu (dev->descriptor.idProduct); hid->name[0 ] =0 ; - hid->quirks =usbhid_lookup_quirk (hid->vendor, hid->product);if (intf->cur_altsetting->desc.bInterfaceProtocol ==USB_INTERFACE_PROTOCOL_MOUSE ) hid->type =HID_TYPE_USBMOUSE ;
@@ -1631,7 +1629,7 @@ static int __init hid_init(void) {int retval = -ENOMEM ; - retval =usbhid_quirks_init (quirks_param); + retval =hid_quirks_init (quirks_param,BUS_USB ,MAX_USBHID_BOOT_QUIRKS );if (retval) goto usbhid_quirks_init_fail; retval =usb_register (&hid_driver);
@@ -1641,7 +1639,7 @@ static int __init hid_init(void)return 0 ; usb_register_fail: -usbhid_quirks_exit (); +hid_quirks_exit (BUS_USB ); usbhid_quirks_init_fail:return retval; }
@@ -1649,7 +1647,7 @@ static int __init hid_init(void) static void __exit hid_exit(void) {usb_deregister (&hid_driver); -usbhid_quirks_exit (); +hid_quirks_exit (BUS_USB ); }module_init (hid_init);
drivers/hid/usbhid/hid-quirks.c deleted +0 -401
401 lines not on this page · raw message
include/linux/hid.h +6 -4
@@ -859,7 +859,9 @@ int hid_open_report(struct hid_device *device);int hid_check_keys_pressed (struct hid_device *hid);int hid_connect (struct hid_device *hid,unsigned int connect_mask);void hid_disconnect (struct hid_device *hid); -const struct hid_device_id *hid_match_id (struct hid_device *hdev, +bool hid_match_one_id (const struct hid_device *hdev, +const struct hid_device_id *id); +const struct hid_device_id *hid_match_id (const struct hid_device *hdev,const struct hid_device_id *id);s32 hid_snto32 (__u32 value,unsigned n); __u32 hid_field_extract(const struct hid_device *hid, __u8 *report,
@@ -1097,9 +1099,9 @@ int hid_report_raw_event(struct hid_device *hid, int type, u8 *data, int size, int interrupt);/* HID quirks API */ -u32 usbhid_lookup_quirk (const u16 idVendor,const u16 idProduct); -int usbhid_quirks_init (char **quirks_param); -void usbhid_quirks_exit (void ); +unsigned long hid_lookup_quirk (const struct hid_device *hdev); +int hid_quirks_init (char **quirks_param,__u16 bus,int count); +void hid_quirks_exit (__u16 bus);#ifdef CONFIG_HID_PID int hid_pidff_init (struct hid_device *hid);
Signature · 1 line
2.9.5
PATCH 2/4 HID: quirks: move the list of special devices into a quirk
In reply to Fedora Kernel TeamFrom: Benjamin Tissoires <[email protected]>
It is better to centralize the information of special devices in one single file. Instead of manually parsing the list of devices that have a special driver or those that need to be ignored, introduce HID_QUIRK_HAVE_SPECIAL_DRIVER and set the correct quirks while fetching those quirks.
--- drivers/hid/hid-core.c | 531 +------------------------------------------- drivers/hid/hid-quirks.c | 552 +++++++++++++++++++++++++++++++++++++++++++++- include/linux/hid.h | 1 + net/bluetooth/hidp/core.c | 2 +- 4 files changed, 546 insertions(+), 540 deletions(-)
drivers/hid/hid-core.c +1 -530
@@ -1862,535 +1862,6 @@ void hid_hw_close(struct hid_device *hdev) }EXPORT_SYMBOL_GPL (hid_hw_close); -/* -* A list of devices for which there is a specialized driver on HID bus. -* -* Please note that for multitouch devices (driven by hid-multitouch driver), -* there is a proper autodetection and autoloading in place (based on presence -* of HID_DG_CONTACTID), so those devices don't need to be added to this list, -* as we are doing the right thing in hid_scan_usage(). -* -* Autodetection for (USB) HID sensor hubs exists too. If a collection of type -* physical is found inside a usage page of type sensor, hid-sensor-hub will be -* used as a driver. See hid_scan_report(). -*/ -static const struct hid_device_id hid_have_special_driver[] = { -#if IS_ENABLED(CONFIG_HID_A4TECH) - {HID_USB_DEVICE (USB_VENDOR_ID_A4TECH ,USB_DEVICE_ID_A4TECH_WCP32PU ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_A4TECH ,USB_DEVICE_ID_A4TECH_X5_005D ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_A4TECH ,USB_DEVICE_ID_A4TECH_RP_649 ) }, -#endif -#if IS_ENABLED(CONFIG_HID_ACCUTOUCH) - {HID_USB_DEVICE (USB_VENDOR_ID_ELO ,USB_DEVICE_ID_ELO_ACCUTOUCH_2216 ) }, -#endif -#if IS_ENABLED(CONFIG_HID_ACRUX) - {HID_USB_DEVICE (USB_VENDOR_ID_ACRUX ,0x0802 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_ACRUX ,0xf705 ) }, -#endif -#if IS_ENABLED(CONFIG_HID_ALPS) - {HID_DEVICE (HID_BUS_ANY ,HID_GROUP_ANY ,USB_VENDOR_ID_ALPS_JP ,HID_DEVICE_ID_ALPS_U1_DUAL ) }, -#endif -#if IS_ENABLED(CONFIG_HID_APPLE) - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_MIGHTYMOUSE ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_FOUNTAIN_ANSI ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_FOUNTAIN_ISO ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_GEYSER_ANSI ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_GEYSER_ISO ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_GEYSER_JIS ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_GEYSER3_ANSI ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_GEYSER3_ISO ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_GEYSER3_JIS ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_GEYSER4_ANSI ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_GEYSER4_ISO ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_GEYSER4_JIS ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_ALU_MINI_ANSI ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_ALU_MINI_ISO ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_ALU_MINI_JIS ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_ALU_ANSI ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_ALU_ISO ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_ALU_JIS ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_GEYSER4_HF_ANSI ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_GEYSER4_HF_ISO ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_GEYSER4_HF_JIS ) }, - {HID_BLUETOOTH_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_ALU_WIRELESS_ANSI ) }, - {HID_BLUETOOTH_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_ALU_WIRELESS_ISO ) }, - {HID_BLUETOOTH_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_ALU_WIRELESS_JIS ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING_ANSI ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING_ISO ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING_JIS ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING2_ANSI ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING2_ISO ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING2_JIS ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING3_ANSI ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING3_ISO ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING3_JIS ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING4_ANSI ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING4_ISO ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING4_JIS ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING4A_ANSI ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING4A_ISO ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING5_ANSI ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING5_ISO ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING5_JIS ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING5A_ANSI ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING5A_ISO ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING5A_JIS ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_ALU_REVB_ANSI ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_ALU_REVB_ISO ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_ALU_REVB_JIS ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING6_ANSI ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING6_ISO ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING6_JIS ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING6A_ANSI ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING6A_ISO ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING6A_JIS ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING7_ANSI ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING7_ISO ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING7_JIS ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING7A_ANSI ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING7A_ISO ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING7A_JIS ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING8_ANSI ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING8_ISO ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING8_JIS ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING9_ANSI ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING9_ISO ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING9_JIS ) }, - {HID_BLUETOOTH_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI ) }, - {HID_BLUETOOTH_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO ) }, - {HID_BLUETOOTH_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS ) }, - {HID_BLUETOOTH_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_ALU_WIRELESS_2011_ANSI ) }, - {HID_BLUETOOTH_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_ALU_WIRELESS_2011_ISO ) }, - {HID_BLUETOOTH_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_ALU_WIRELESS_2011_JIS ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_ANSI ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY ) }, -#endif -#if IS_ENABLED(CONFIG_HID_APPLEIR) - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_IRCONTROL ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_IRCONTROL2 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_IRCONTROL3 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_IRCONTROL4 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_IRCONTROL5 ) }, -#endif -#if IS_ENABLED(CONFIG_HID_ASUS) - {HID_I2C_DEVICE (USB_VENDOR_ID_ASUSTEK ,USB_DEVICE_ID_ASUSTEK_I2C_KEYBOARD ) }, - {HID_I2C_DEVICE (USB_VENDOR_ID_ASUSTEK ,USB_DEVICE_ID_ASUSTEK_I2C_TOUCHPAD ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_ASUSTEK ,USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD1 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_ASUSTEK ,USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD2 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_ASUSTEK ,USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD3 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_ASUSTEK ,USB_DEVICE_ID_ASUSTEK_T100_KEYBOARD ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_JESS ,USB_DEVICE_ID_ASUS_MD_5112 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_TURBOX ,USB_DEVICE_ID_ASUS_MD_5110 ) }, - {HID_BLUETOOTH_DEVICE (USB_VENDOR_ID_ASUSTEK ,USB_DEVICE_ID_ASUSTEK_T100CHI_KEYBOARD ) }, -#endif -#if IS_ENABLED(CONFIG_HID_AUREAL) - {HID_USB_DEVICE (USB_VENDOR_ID_AUREAL ,USB_DEVICE_ID_AUREAL_W01RN ) }, -#endif -#if IS_ENABLED(CONFIG_HID_BELKIN) - {HID_USB_DEVICE (USB_VENDOR_ID_BELKIN ,USB_DEVICE_ID_FLIP_KVM ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LABTEC ,USB_DEVICE_ID_LABTEC_WIRELESS_KEYBOARD ) }, -#endif -#if IS_ENABLED(CONFIG_HID_BETOP_FF) - {HID_USB_DEVICE (USB_VENDOR_ID_BETOP_2185BFM ,0x2208 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_BETOP_2185PC ,0x5506 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_BETOP_2185V2PC ,0x1850 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_BETOP_2185V2BFM ,0x5500 ) }, -#endif -#if IS_ENABLED(CONFIG_HID_CHERRY) - {HID_USB_DEVICE (USB_VENDOR_ID_CHERRY ,USB_DEVICE_ID_CHERRY_CYMOTION ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_CHERRY ,USB_DEVICE_ID_CHERRY_CYMOTION_SOLAR ) }, -#endif -#if IS_ENABLED(CONFIG_HID_CHICONY) - {HID_USB_DEVICE (USB_VENDOR_ID_CHICONY ,USB_DEVICE_ID_CHICONY_TACTICAL_PAD ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_CHICONY ,USB_DEVICE_ID_CHICONY_WIRELESS2 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_CHICONY ,USB_DEVICE_ID_ASUS_AK1D ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_CHICONY ,USB_DEVICE_ID_CHICONY_ACER_SWITCH12 ) }, -#endif -#if IS_ENABLED(CONFIG_HID_CMEDIA) - {HID_USB_DEVICE (USB_VENDOR_ID_CMEDIA ,USB_DEVICE_ID_CM6533 ) }, -#endif -#if IS_ENABLED(CONFIG_HID_CORSAIR) - {HID_USB_DEVICE (USB_VENDOR_ID_CORSAIR ,USB_DEVICE_ID_CORSAIR_K90 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_CORSAIR ,USB_DEVICE_ID_CORSAIR_SCIMITAR_PRO_RGB ) }, -#endif -#if IS_ENABLED(CONFIG_HID_CP2112) - {HID_USB_DEVICE (USB_VENDOR_ID_CYGNAL ,USB_DEVICE_ID_CYGNAL_CP2112 ) }, -#endif -#if IS_ENABLED(CONFIG_HID_CYPRESS) - {HID_USB_DEVICE (USB_VENDOR_ID_CYPRESS ,USB_DEVICE_ID_CYPRESS_BARCODE_1 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_CYPRESS ,USB_DEVICE_ID_CYPRESS_BARCODE_2 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_CYPRESS ,USB_DEVICE_ID_CYPRESS_BARCODE_3 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_CYPRESS ,USB_DEVICE_ID_CYPRESS_BARCODE_4 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_CYPRESS ,USB_DEVICE_ID_CYPRESS_MOUSE ) }, -#endif -#if IS_ENABLED(CONFIG_HID_DRAGONRISE) - {HID_USB_DEVICE (USB_VENDOR_ID_DRAGONRISE ,0x0006 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_DRAGONRISE ,0x0011 ) }, -#endif -#if IS_ENABLED(CONFIG_HID_ELECOM) - {HID_BLUETOOTH_DEVICE (USB_VENDOR_ID_ELECOM ,USB_DEVICE_ID_ELECOM_BM084 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_ELECOM ,USB_DEVICE_ID_ELECOM_DEFT_WIRED ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_ELECOM ,USB_DEVICE_ID_ELECOM_DEFT_WIRELESS ) }, -#endif -#if IS_ENABLED(CONFIG_HID_ELO) - {HID_USB_DEVICE (USB_VENDOR_ID_ELO ,0x0009 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_ELO ,0x0030 ) }, -#endif -#if IS_ENABLED(CONFIG_HID_EMS_FF) - {HID_USB_DEVICE (USB_VENDOR_ID_EMS ,USB_DEVICE_ID_EMS_TRIO_LINKER_PLUS_II ) }, -#endif -#if IS_ENABLED(CONFIG_HID_EZKEY) - {HID_USB_DEVICE (USB_VENDOR_ID_EZKEY ,USB_DEVICE_ID_BTC_8193 ) }, -#endif -#if IS_ENABLED(CONFIG_HID_GEMBIRD) - {HID_USB_DEVICE (USB_VENDOR_ID_GEMBIRD ,USB_DEVICE_ID_GEMBIRD_JPD_DUALFORCE2 ) }, -#endif -#if IS_ENABLED(CONFIG_HID_GFRM) - {HID_BLUETOOTH_DEVICE (0x58 ,0x2000 ) }, - {HID_BLUETOOTH_DEVICE (0x471 ,0x2210 ) }, -#endif -#if IS_ENABLED(CONFIG_HID_GREENASIA) - {HID_USB_DEVICE (USB_VENDOR_ID_GREENASIA ,0x0012 ) }, -#endif -#if IS_ENABLED(CONFIG_HID_GT683R) - {HID_USB_DEVICE (USB_VENDOR_ID_MSI ,USB_DEVICE_ID_MSI_GT683R_LED_PANEL ) }, -#endif -#if IS_ENABLED(CONFIG_HID_GYRATION) - {HID_USB_DEVICE (USB_VENDOR_ID_GYRATION ,USB_DEVICE_ID_GYRATION_REMOTE ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GYRATION ,USB_DEVICE_ID_GYRATION_REMOTE_2 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GYRATION ,USB_DEVICE_ID_GYRATION_REMOTE_3 ) }, -#endif -#if IS_ENABLED(CONFIG_HID_HOLTEK) - {HID_USB_DEVICE (USB_VENDOR_ID_HOLTEK ,USB_DEVICE_ID_HOLTEK_ON_LINE_GRIP ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_HOLTEK_ALT ,USB_DEVICE_ID_HOLTEK_ALT_KEYBOARD ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_HOLTEK_ALT ,USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A04A ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_HOLTEK_ALT ,USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A067 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_HOLTEK_ALT ,USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A070 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_HOLTEK_ALT ,USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A072 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_HOLTEK_ALT ,USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A081 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_HOLTEK_ALT ,USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A0C2 ) }, -#endif -#if IS_ENABLED(CONFIG_HID_ICADE) - {HID_BLUETOOTH_DEVICE (USB_VENDOR_ID_ION ,USB_DEVICE_ID_ICADE ) }, -#endif -#if IS_ENABLED(CONFIG_HID_ITE) - {HID_USB_DEVICE (USB_VENDOR_ID_ITE ,USB_DEVICE_ID_ITE8595 ) }, -#endif -#if IS_ENABLED(CONFIG_HID_KENSINGTON) - {HID_USB_DEVICE (USB_VENDOR_ID_KENSINGTON ,USB_DEVICE_ID_KS_SLIMBLADE ) }, -#endif -#if IS_ENABLED(CONFIG_HID_KEYTOUCH) - {HID_USB_DEVICE (USB_VENDOR_ID_KEYTOUCH ,USB_DEVICE_ID_KEYTOUCH_IEC ) }, -#endif -#if IS_ENABLED(CONFIG_HID_KYE) - {HID_USB_DEVICE (USB_VENDOR_ID_KYE ,USB_DEVICE_ID_GENIUS_GILA_GAMING_MOUSE ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_KYE ,USB_DEVICE_ID_GENIUS_MANTICORE ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_KYE ,USB_DEVICE_ID_GENIUS_GX_IMPERATOR ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_KYE ,USB_DEVICE_ID_KYE_ERGO_525V ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_KYE ,USB_DEVICE_ID_KYE_EASYPEN_I405X ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_KYE ,USB_DEVICE_ID_KYE_MOUSEPEN_I608X ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_KYE ,USB_DEVICE_ID_KYE_MOUSEPEN_I608X_V2 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_KYE ,USB_DEVICE_ID_KYE_EASYPEN_M610X ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_KYE ,USB_DEVICE_ID_KYE_PENSKETCH_M912 ) }, -#endif -#if IS_ENABLED(CONFIG_HID_LCPOWER) - {HID_USB_DEVICE (USB_VENDOR_ID_LCPOWER ,USB_DEVICE_ID_LCPOWER_LC1000 ) }, -#endif -#if IS_ENABLED(CONFIG_HID_LED) - {HID_USB_DEVICE (USB_VENDOR_ID_DELCOM ,USB_DEVICE_ID_DELCOM_VISUAL_IND ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_DREAM_CHEEKY ,USB_DEVICE_ID_DREAM_CHEEKY_WN ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_DREAM_CHEEKY ,USB_DEVICE_ID_DREAM_CHEEKY_FA ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_MICROCHIP ,USB_DEVICE_ID_LUXAFOR ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_RISO_KAGAKU ,USB_DEVICE_ID_RI_KA_WEBMAIL ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_THINGM ,USB_DEVICE_ID_BLINK1 ) }, -#endif -#if IS_ENABLED(CONFIG_HID_LENOVO) - {HID_USB_DEVICE (USB_VENDOR_ID_LENOVO ,USB_DEVICE_ID_LENOVO_TPKBD ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LENOVO ,USB_DEVICE_ID_LENOVO_CUSBKBD ) }, - {HID_BLUETOOTH_DEVICE (USB_VENDOR_ID_LENOVO ,USB_DEVICE_ID_LENOVO_CBTKBD ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LENOVO ,USB_DEVICE_ID_LENOVO_TPPRODOCK ) }, -#endif -#if IS_ENABLED(CONFIG_HID_LOGITECH) - {HID_USB_DEVICE (USB_VENDOR_ID_LOGITECH ,USB_DEVICE_ID_MX3000_RECEIVER ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LOGITECH ,USB_DEVICE_ID_S510_RECEIVER ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LOGITECH ,USB_DEVICE_ID_S510_RECEIVER_2 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LOGITECH ,USB_DEVICE_ID_LOGITECH_RECEIVER ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LOGITECH ,USB_DEVICE_ID_DINOVO_DESKTOP ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LOGITECH ,USB_DEVICE_ID_DINOVO_EDGE ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LOGITECH ,USB_DEVICE_ID_DINOVO_MINI ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LOGITECH ,USB_DEVICE_ID_LOGITECH_ELITE_KBD ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LOGITECH ,USB_DEVICE_ID_LOGITECH_CORDLESS_DESKTOP_LX500 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LOGITECH ,USB_DEVICE_ID_LOGITECH_EXTREME_3D ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LOGITECH ,USB_DEVICE_ID_LOGITECH_DUAL_ACTION ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LOGITECH ,USB_DEVICE_ID_LOGITECH_WHEEL ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LOGITECH ,USB_DEVICE_ID_LOGITECH_RUMBLEPAD_CORD ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LOGITECH ,USB_DEVICE_ID_LOGITECH_RUMBLEPAD ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LOGITECH ,USB_DEVICE_ID_LOGITECH_RUMBLEPAD2_2 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LOGITECH ,USB_DEVICE_ID_LOGITECH_G29_WHEEL ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LOGITECH ,USB_DEVICE_ID_LOGITECH_WINGMAN_F3D ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LOGITECH ,USB_DEVICE_ID_LOGITECH_WINGMAN_FFG ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LOGITECH ,USB_DEVICE_ID_LOGITECH_FORCE3D_PRO ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LOGITECH ,USB_DEVICE_ID_LOGITECH_FLIGHT_SYSTEM_G940 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LOGITECH ,USB_DEVICE_ID_LOGITECH_MOMO_WHEEL ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LOGITECH ,USB_DEVICE_ID_LOGITECH_MOMO_WHEEL2 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LOGITECH ,USB_DEVICE_ID_LOGITECH_VIBRATION_WHEEL ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LOGITECH ,USB_DEVICE_ID_LOGITECH_DFP_WHEEL ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LOGITECH ,USB_DEVICE_ID_LOGITECH_DFGT_WHEEL ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LOGITECH ,USB_DEVICE_ID_LOGITECH_G25_WHEEL ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LOGITECH ,USB_DEVICE_ID_LOGITECH_G27_WHEEL ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LOGITECH ,USB_DEVICE_ID_LOGITECH_WII_WHEEL ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LOGITECH ,USB_DEVICE_ID_LOGITECH_RUMBLEPAD2 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LOGITECH ,USB_DEVICE_ID_SPACETRAVELLER ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LOGITECH ,USB_DEVICE_ID_SPACENAVIGATOR ) }, -#endif -#if IS_ENABLED(CONFIG_HID_LOGITECH_HIDPP) - {HID_BLUETOOTH_DEVICE (USB_VENDOR_ID_LOGITECH ,USB_DEVICE_ID_LOGITECH_T651 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LOGITECH ,USB_DEVICE_ID_LOGITECH_G920_WHEEL ) }, -#endif -#if IS_ENABLED(CONFIG_HID_LOGITECH_DJ) - {HID_USB_DEVICE (USB_VENDOR_ID_LOGITECH ,USB_DEVICE_ID_LOGITECH_UNIFYING_RECEIVER ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LOGITECH ,USB_DEVICE_ID_LOGITECH_UNIFYING_RECEIVER_2 ) }, -#endif -#if IS_ENABLED(CONFIG_HID_MAGICMOUSE) - {HID_BLUETOOTH_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_MAGICMOUSE ) }, - {HID_BLUETOOTH_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_MAGICTRACKPAD ) }, -#endif -#if IS_ENABLED(CONFIG_HID_MAYFLASH) - {HID_USB_DEVICE (USB_VENDOR_ID_DRAGONRISE ,USB_DEVICE_ID_DRAGONRISE_PS3 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_DRAGONRISE ,USB_DEVICE_ID_DRAGONRISE_DOLPHINBAR ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_DRAGONRISE ,USB_DEVICE_ID_DRAGONRISE_GAMECUBE1 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_DRAGONRISE ,USB_DEVICE_ID_DRAGONRISE_GAMECUBE2 ) }, -#endif -#if IS_ENABLED(CONFIG_HID_MICROSOFT) - {HID_USB_DEVICE (USB_VENDOR_ID_MICROSOFT ,USB_DEVICE_ID_MS_COMFORT_MOUSE_4500 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_MICROSOFT ,USB_DEVICE_ID_MS_COMFORT_KEYBOARD ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_MICROSOFT ,USB_DEVICE_ID_SIDEWINDER_GV ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_MICROSOFT ,USB_DEVICE_ID_MS_NE4K ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_MICROSOFT ,USB_DEVICE_ID_MS_NE4K_JP ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_MICROSOFT ,USB_DEVICE_ID_MS_NE7K ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_MICROSOFT ,USB_DEVICE_ID_MS_LK6K ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_MICROSOFT ,USB_DEVICE_ID_MS_PRESENTER_8K_USB ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_MICROSOFT ,USB_DEVICE_ID_MS_DIGITAL_MEDIA_3K ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_MICROSOFT ,USB_DEVICE_ID_WIRELESS_OPTICAL_DESKTOP_3_0 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_MICROSOFT ,USB_DEVICE_ID_MS_OFFICE_KB ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_MICROSOFT ,USB_DEVICE_ID_MS_DIGITAL_MEDIA_7K ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_MICROSOFT ,USB_DEVICE_ID_MS_DIGITAL_MEDIA_600 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_MICROSOFT ,USB_DEVICE_ID_MS_DIGITAL_MEDIA_3KV1 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_MICROSOFT ,USB_DEVICE_ID_MS_POWER_COVER ) }, - {HID_BLUETOOTH_DEVICE (USB_VENDOR_ID_MICROSOFT ,USB_DEVICE_ID_MS_PRESENTER_8K_BT ) }, -#endif -#if IS_ENABLED(CONFIG_HID_MONTEREY) - {HID_USB_DEVICE (USB_VENDOR_ID_MONTEREY ,USB_DEVICE_ID_GENIUS_KB29E ) }, -#endif -#if IS_ENABLED(CONFIG_HID_MULTITOUCH) - {HID_USB_DEVICE (USB_VENDOR_ID_LG ,USB_DEVICE_ID_LG_MELFAS_MT ) }, -#endif -#if IS_ENABLED(CONFIG_HID_WIIMOTE) - {HID_BLUETOOTH_DEVICE (USB_VENDOR_ID_NINTENDO ,USB_DEVICE_ID_NINTENDO_WIIMOTE ) }, - {HID_BLUETOOTH_DEVICE (USB_VENDOR_ID_NINTENDO ,USB_DEVICE_ID_NINTENDO_WIIMOTE2 ) }, -#endif -#if IS_ENABLED(CONFIG_HID_NTI) - {HID_USB_DEVICE (USB_VENDOR_ID_NTI ,USB_DEVICE_ID_USB_SUN ) }, -#endif -#if IS_ENABLED(CONFIG_HID_NTRIG) - {HID_USB_DEVICE (USB_VENDOR_ID_NTRIG ,USB_DEVICE_ID_NTRIG_TOUCH_SCREEN ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_NTRIG ,USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_1 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_NTRIG ,USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_2 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_NTRIG ,USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_3 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_NTRIG ,USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_4 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_NTRIG ,USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_5 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_NTRIG ,USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_6 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_NTRIG ,USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_7 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_NTRIG ,USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_8 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_NTRIG ,USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_9 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_NTRIG ,USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_10 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_NTRIG ,USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_11 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_NTRIG ,USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_12 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_NTRIG ,USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_13 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_NTRIG ,USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_14 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_NTRIG ,USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_15 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_NTRIG ,USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_16 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_NTRIG ,USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_17 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_NTRIG ,USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_18 ) }, -#endif -#if IS_ENABLED(CONFIG_HID_ORTEK) - {HID_USB_DEVICE (USB_VENDOR_ID_ORTEK ,USB_DEVICE_ID_ORTEK_PKB1700 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_ORTEK ,USB_DEVICE_ID_ORTEK_WKB2000 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_ORTEK ,USB_DEVICE_ID_ORTEK_IHOME_IMAC_A210S ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_SKYCABLE ,USB_DEVICE_ID_SKYCABLE_WIRELESS_PRESENTER ) }, -#endif -#if IS_ENABLED(CONFIG_HID_PANTHERLORD) - {HID_USB_DEVICE (USB_VENDOR_ID_GAMERON ,USB_DEVICE_ID_GAMERON_DUAL_PSX_ADAPTOR ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GAMERON ,USB_DEVICE_ID_GAMERON_DUAL_PCS_ADAPTOR ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GREENASIA ,0x0003 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_JESS2 ,USB_DEVICE_ID_JESS2_COLOR_RUMBLE_PAD ) }, -#endif -#if IS_ENABLED(CONFIG_HID_PENMOUNT) - {HID_USB_DEVICE (USB_VENDOR_ID_PENMOUNT ,USB_DEVICE_ID_PENMOUNT_6000 ) }, -#endif -#if IS_ENABLED(CONFIG_HID_PETALYNX) - {HID_USB_DEVICE (USB_VENDOR_ID_PETALYNX ,USB_DEVICE_ID_PETALYNX_MAXTER_REMOTE ) }, -#endif -#if IS_ENABLED(CONFIG_HID_PICOLCD) - {HID_USB_DEVICE (USB_VENDOR_ID_MICROCHIP ,USB_DEVICE_ID_PICOLCD ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_MICROCHIP ,USB_DEVICE_ID_PICOLCD_BOOTLOADER ) }, -#endif -#if IS_ENABLED(CONFIG_HID_PLANTRONICS) - {HID_USB_DEVICE (USB_VENDOR_ID_PLANTRONICS ,HID_ANY_ID ) }, -#endif -#if IS_ENABLED(CONFIG_HID_PRIMAX) - {HID_USB_DEVICE (USB_VENDOR_ID_PRIMAX ,USB_DEVICE_ID_PRIMAX_KEYBOARD ) }, -#endif -#if IS_ENABLED(CONFIG_HID_PRODIKEYS) - {HID_USB_DEVICE (USB_VENDOR_ID_CREATIVELABS ,USB_DEVICE_ID_PRODIKEYS_PCMIDI ) }, -#endif -#if IS_ENABLED(CONFIG_HID_RETRODE) - {HID_USB_DEVICE (USB_VENDOR_ID_FUTURE_TECHNOLOGY ,USB_DEVICE_ID_RETRODE2 ) }, -#endif -#if IS_ENABLED(CONFIG_HID_RMI) - {HID_USB_DEVICE (USB_VENDOR_ID_LENOVO ,USB_DEVICE_ID_LENOVO_X1_COVER ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_RAZER ,USB_DEVICE_ID_RAZER_BLADE_14 ) }, -#endif -#if IS_ENABLED(CONFIG_HID_ROCCAT) - {HID_USB_DEVICE (USB_VENDOR_ID_ROCCAT ,USB_DEVICE_ID_ROCCAT_ARVO ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_ROCCAT ,USB_DEVICE_ID_ROCCAT_ISKU ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_ROCCAT ,USB_DEVICE_ID_ROCCAT_ISKUFX ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_ROCCAT ,USB_DEVICE_ID_ROCCAT_KONE ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_ROCCAT ,USB_DEVICE_ID_ROCCAT_KONEPLUS ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_ROCCAT ,USB_DEVICE_ID_ROCCAT_KONEPURE ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_ROCCAT ,USB_DEVICE_ID_ROCCAT_KONEPURE_OPTICAL ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_ROCCAT ,USB_DEVICE_ID_ROCCAT_KONEXTD ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_ROCCAT ,USB_DEVICE_ID_ROCCAT_KOVAPLUS ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_ROCCAT ,USB_DEVICE_ID_ROCCAT_LUA ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_ROCCAT ,USB_DEVICE_ID_ROCCAT_PYRA_WIRED ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_ROCCAT ,USB_DEVICE_ID_ROCCAT_PYRA_WIRELESS ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_ROCCAT ,USB_DEVICE_ID_ROCCAT_RYOS_MK ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_ROCCAT ,USB_DEVICE_ID_ROCCAT_RYOS_MK_GLOW ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_ROCCAT ,USB_DEVICE_ID_ROCCAT_RYOS_MK_PRO ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_ROCCAT ,USB_DEVICE_ID_ROCCAT_SAVU ) }, -#endif -#if IS_ENABLED(CONFIG_HID_SAITEK) - {HID_USB_DEVICE (USB_VENDOR_ID_SAITEK ,USB_DEVICE_ID_SAITEK_PS1000 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_SAITEK ,USB_DEVICE_ID_SAITEK_RAT7_OLD ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_SAITEK ,USB_DEVICE_ID_SAITEK_RAT7 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_SAITEK ,USB_DEVICE_ID_SAITEK_RAT9 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_SAITEK ,USB_DEVICE_ID_SAITEK_MMO7 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_MADCATZ ,USB_DEVICE_ID_MADCATZ_RAT5 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_MADCATZ ,USB_DEVICE_ID_MADCATZ_RAT9 ) }, -#endif -#if IS_ENABLED(CONFIG_HID_SAMSUNG) - {HID_USB_DEVICE (USB_VENDOR_ID_SAMSUNG ,USB_DEVICE_ID_SAMSUNG_IR_REMOTE ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_SAMSUNG ,USB_DEVICE_ID_SAMSUNG_WIRELESS_KBD_MOUSE ) }, -#endif -#if IS_ENABLED(CONFIG_HID_SMARTJOYPLUS) - {HID_USB_DEVICE (USB_VENDOR_ID_PLAYDOTCOM ,USB_DEVICE_ID_PLAYDOTCOM_EMS_USBII ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_WISEGROUP ,USB_DEVICE_ID_SMARTJOY_PLUS ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_WISEGROUP ,USB_DEVICE_ID_SUPER_JOY_BOX_3 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_WISEGROUP ,USB_DEVICE_ID_DUAL_USB_JOYPAD ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_WISEGROUP_LTD ,USB_DEVICE_ID_SUPER_JOY_BOX_3_PRO ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_WISEGROUP_LTD ,USB_DEVICE_ID_SUPER_DUAL_BOX_PRO ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_WISEGROUP_LTD ,USB_DEVICE_ID_SUPER_JOY_BOX_5_PRO ) }, -#endif -#if IS_ENABLED(CONFIG_HID_SONY) - {HID_BLUETOOTH_DEVICE (USB_VENDOR_ID_LOGITECH ,USB_DEVICE_ID_LOGITECH_HARMONY_PS3 ) }, - {HID_BLUETOOTH_DEVICE (USB_VENDOR_ID_SMK ,USB_DEVICE_ID_SMK_PS3_BDREMOTE ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_SONY ,USB_DEVICE_ID_SONY_BUZZ_CONTROLLER ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_SONY ,USB_DEVICE_ID_SONY_WIRELESS_BUZZ_CONTROLLER ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_SONY ,USB_DEVICE_ID_SONY_MOTION_CONTROLLER ) }, - {HID_BLUETOOTH_DEVICE (USB_VENDOR_ID_SONY ,USB_DEVICE_ID_SONY_MOTION_CONTROLLER ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_SONY ,USB_DEVICE_ID_SONY_NAVIGATION_CONTROLLER ) }, - {HID_BLUETOOTH_DEVICE (USB_VENDOR_ID_SONY ,USB_DEVICE_ID_SONY_NAVIGATION_CONTROLLER ) }, - {HID_BLUETOOTH_DEVICE (USB_VENDOR_ID_SONY ,USB_DEVICE_ID_SONY_PS3_BDREMOTE ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_SONY ,USB_DEVICE_ID_SONY_PS3_CONTROLLER ) }, - {HID_BLUETOOTH_DEVICE (USB_VENDOR_ID_SONY ,USB_DEVICE_ID_SONY_PS3_CONTROLLER ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_SONY ,USB_DEVICE_ID_SONY_PS4_CONTROLLER ) }, - {HID_BLUETOOTH_DEVICE (USB_VENDOR_ID_SONY ,USB_DEVICE_ID_SONY_PS4_CONTROLLER ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_SONY ,USB_DEVICE_ID_SONY_PS4_CONTROLLER_2 ) }, - {HID_BLUETOOTH_DEVICE (USB_VENDOR_ID_SONY ,USB_DEVICE_ID_SONY_PS4_CONTROLLER_2 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_SONY ,USB_DEVICE_ID_SONY_PS4_CONTROLLER_DONGLE ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_SONY ,USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_SONY ,USB_DEVICE_ID_SONY_VAIO_VGP_MOUSE ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_SINO_LITE ,USB_DEVICE_ID_SINO_LITE_CONTROLLER ) }, -#endif -#if IS_ENABLED(CONFIG_HID_SPEEDLINK) - {HID_USB_DEVICE (USB_VENDOR_ID_X_TENSIONS ,USB_DEVICE_ID_SPEEDLINK_VAD_CEZANNE ) }, -#endif -#if IS_ENABLED(CONFIG_HID_STEELSERIES) - {HID_USB_DEVICE (USB_VENDOR_ID_STEELSERIES ,USB_DEVICE_ID_STEELSERIES_SRWS1 ) }, -#endif -#if IS_ENABLED(CONFIG_HID_SUNPLUS) - {HID_USB_DEVICE (USB_VENDOR_ID_SUNPLUS ,USB_DEVICE_ID_SUNPLUS_WDESKTOP ) }, -#endif -#if IS_ENABLED(CONFIG_HID_THRUSTMASTER) - {HID_USB_DEVICE (USB_VENDOR_ID_THRUSTMASTER ,0xb300 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_THRUSTMASTER ,0xb304 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_THRUSTMASTER ,0xb323 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_THRUSTMASTER ,0xb324 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_THRUSTMASTER ,0xb651 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_THRUSTMASTER ,0xb653 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_THRUSTMASTER ,0xb654 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_THRUSTMASTER ,0xb65a ) }, -#endif -#if IS_ENABLED(CONFIG_HID_TIVO) - {HID_BLUETOOTH_DEVICE (USB_VENDOR_ID_TIVO ,USB_DEVICE_ID_TIVO_SLIDE_BT ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_TIVO ,USB_DEVICE_ID_TIVO_SLIDE ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_TIVO ,USB_DEVICE_ID_TIVO_SLIDE_PRO ) }, -#endif -#if IS_ENABLED(CONFIG_HID_TOPSEED) - {HID_USB_DEVICE (USB_VENDOR_ID_BTC ,USB_DEVICE_ID_BTC_EMPREX_REMOTE ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_BTC ,USB_DEVICE_ID_BTC_EMPREX_REMOTE_2 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_CHICONY ,USB_DEVICE_ID_CHICONY_WIRELESS ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_TOPSEED ,USB_DEVICE_ID_TOPSEED_CYBERLINK ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_TOPSEED2 ,USB_DEVICE_ID_TOPSEED2_RF_COMBO ) }, -#endif -#if IS_ENABLED(CONFIG_HID_TWINHAN) - {HID_USB_DEVICE (USB_VENDOR_ID_TWINHAN ,USB_DEVICE_ID_TWINHAN_IR_REMOTE ) }, -#endif -#if IS_ENABLED(CONFIG_HID_UCLOGIC) - {HID_USB_DEVICE (USB_VENDOR_ID_HUION ,USB_DEVICE_ID_HUION_TABLET ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_UCLOGIC ,USB_DEVICE_ID_HUION_TABLET ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_UCLOGIC ,USB_DEVICE_ID_UCLOGIC_TABLET_PF1209 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_UCLOGIC ,USB_DEVICE_ID_UCLOGIC_TABLET_WP4030U ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_UCLOGIC ,USB_DEVICE_ID_UCLOGIC_TABLET_WP5540U ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_UCLOGIC ,USB_DEVICE_ID_UCLOGIC_TABLET_WP8060U ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_UCLOGIC ,USB_DEVICE_ID_UCLOGIC_TABLET_WP1062 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_UCLOGIC ,USB_DEVICE_ID_UCLOGIC_WIRELESS_TABLET_TWHL850 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_UCLOGIC ,USB_DEVICE_ID_UCLOGIC_TABLET_TWHA60 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_UCLOGIC ,USB_DEVICE_ID_YIYNOVA_TABLET ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_UCLOGIC ,USB_DEVICE_ID_UGEE_TABLET_81 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_UCLOGIC ,USB_DEVICE_ID_UGEE_TABLET_45 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_UCLOGIC ,USB_DEVICE_ID_UCLOGIC_DRAWIMAGE_G3 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_UGEE ,USB_DEVICE_ID_UGEE_TABLET_EX07S ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_UGTIZER ,USB_DEVICE_ID_UGTIZER_TABLET_GP0610 ) }, -#endif -#if IS_ENABLED(CONFIG_HID_UDRAW_PS3) - {HID_USB_DEVICE (USB_VENDOR_ID_THQ ,USB_DEVICE_ID_THQ_PS3_UDRAW ) }, -#endif -#if IS_ENABLED(CONFIG_HID_WALTOP) - {HID_USB_DEVICE (USB_VENDOR_ID_WALTOP ,USB_DEVICE_ID_WALTOP_SLIM_TABLET_5_8_INCH ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_WALTOP ,USB_DEVICE_ID_WALTOP_SLIM_TABLET_12_1_INCH ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_WALTOP ,USB_DEVICE_ID_WALTOP_Q_PAD ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_WALTOP ,USB_DEVICE_ID_WALTOP_PID_0038 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_WALTOP ,USB_DEVICE_ID_WALTOP_MEDIA_TABLET_10_6_INCH ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_WALTOP ,USB_DEVICE_ID_WALTOP_MEDIA_TABLET_14_1_INCH ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_WALTOP ,USB_DEVICE_ID_WALTOP_SIRIUS_BATTERY_FREE_TABLET ) }, -#endif -#if IS_ENABLED(CONFIG_HID_XINMO) - {HID_USB_DEVICE (USB_VENDOR_ID_XIN_MO ,USB_DEVICE_ID_XIN_MO_DUAL_ARCADE ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_XIN_MO ,USB_DEVICE_ID_THT_2P_ARCADE ) }, -#endif -#if IS_ENABLED(CONFIG_HID_ZEROPLUS) - {HID_USB_DEVICE (USB_VENDOR_ID_ZEROPLUS ,0x0005 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_ZEROPLUS ,0x0030 ) }, -#endif -#if IS_ENABLED(CONFIG_HID_ZYDACRON) - {HID_USB_DEVICE (USB_VENDOR_ID_ZYDACRON ,USB_DEVICE_ID_ZYDACRON_REMOTE_CONTROL ) }, -#endif - { } -}; -struct hid_dynid {struct list_head list;struct hid_device_id id;
@@ -2956,7 +2427,7 @@ int hid_add_device(struct hid_device *hdev)if (hid_ignore_special_drivers) { hdev->group =HID_GROUP_GENERIC ; }else if (!hdev->group && - !hid_match_id (hdev, hid_have_special_driver)) { + !(hdev->quirks &HID_QUIRK_HAVE_SPECIAL_DRIVER )) { ret =hid_scan_report (hdev);if (ret)hid_warn (hdev,"bad device descriptor (%d)\n" , ret);
drivers/hid/hid-quirks.c +543 -9
585 lines not on this page · raw message
include/linux/hid.h +1 -0
@@ -341,6 +341,7 @@ struct hid_item {#define HID_QUIRK_SKIP_OUTPUT_REPORTS 0x00010000#define HID_QUIRK_SKIP_OUTPUT_REPORT_ID 0x00020000#define HID_QUIRK_NO_OUTPUT_REPORTS_ON_INTR_EP 0x00040000 +#define HID_QUIRK_HAVE_SPECIAL_DRIVER 0x00080000#define HID_QUIRK_FULLSPEED_INTERVAL 0x10000000#define HID_QUIRK_NO_INIT_REPORTS 0x20000000#define HID_QUIRK_NO_IGNORE 0x40000000
net/bluetooth/hidp/core.c +1 -1
@@ -789,7 +789,7 @@ static int hidp_setup_hid(struct hidp_session *session, hid->dev.parent = &session->conn->hcon->dev; hid->ll_driver = &hidp_hid_driver; -/* True if device is blacklisted in drivers/hid/hid-core.c */ +/* True if device is blacklisted in drivers/hid/hid-quirks.c */ if (hid_ignore (hid)) {hid_destroy_device (session->hid); session->hid =NULL ;
Signature · 1 line
2.9.5
PATCH 3/4 HID: core: move the list of ignored devices in hid-quirks.c
In reply to Fedora Kernel TeamFrom: Benjamin Tissoires <[email protected]>
Better having all the devices quirks in one place.
Note that this change introduces an initial lookup for the device in hid_gets_squirk(), which should not theoretically be required, but which actually allows to not have to reparse the list of ignored devices if we call hid_lookup_quirks twice.
--- drivers/hid/hid-core.c | 309 ---------------------------------------------- drivers/hid/hid-quirks.c | 312 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 312 insertions(+), 309 deletions(-)
drivers/hid/hid-core.c +0 -309
@@ -2079,315 +2079,6 @@ static struct bus_type hid_bus_type = { .uevent = hid_uevent, }; -/* a list of devices that shouldn't be handled by HID core at all */ -static const struct hid_device_id hid_ignore_list[] = { - {HID_USB_DEVICE (USB_VENDOR_ID_ACECAD ,USB_DEVICE_ID_ACECAD_FLAIR ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_ACECAD ,USB_DEVICE_ID_ACECAD_302 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_ADS_TECH ,USB_DEVICE_ID_ADS_TECH_RADIO_SI470X ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_AIPTEK ,USB_DEVICE_ID_AIPTEK_01 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_AIPTEK ,USB_DEVICE_ID_AIPTEK_10 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_AIPTEK ,USB_DEVICE_ID_AIPTEK_20 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_AIPTEK ,USB_DEVICE_ID_AIPTEK_21 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_AIPTEK ,USB_DEVICE_ID_AIPTEK_22 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_AIPTEK ,USB_DEVICE_ID_AIPTEK_23 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_AIPTEK ,USB_DEVICE_ID_AIPTEK_24 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_AIRCABLE ,USB_DEVICE_ID_AIRCABLE1 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_ALCOR ,USB_DEVICE_ID_ALCOR_USBRS232 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_ASUSTEK ,USB_DEVICE_ID_ASUSTEK_LCM )}, - {HID_USB_DEVICE (USB_VENDOR_ID_ASUSTEK ,USB_DEVICE_ID_ASUSTEK_LCM2 )}, - {HID_USB_DEVICE (USB_VENDOR_ID_AVERMEDIA ,USB_DEVICE_ID_AVER_FM_MR800 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_AXENTIA ,USB_DEVICE_ID_AXENTIA_FM_RADIO ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_BERKSHIRE ,USB_DEVICE_ID_BERKSHIRE_PCWD ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_CIDC ,0x0103 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_CYGNAL ,USB_DEVICE_ID_CYGNAL_RADIO_SI470X ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_CYGNAL ,USB_DEVICE_ID_CYGNAL_RADIO_SI4713 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_CMEDIA ,USB_DEVICE_ID_CM109 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_CYPRESS ,USB_DEVICE_ID_CYPRESS_HIDCOM ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_CYPRESS ,USB_DEVICE_ID_CYPRESS_ULTRAMOUSE ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_DEALEXTREAME ,USB_DEVICE_ID_DEALEXTREAME_RADIO_SI4701 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_DELORME ,USB_DEVICE_ID_DELORME_EARTHMATE ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_DELORME ,USB_DEVICE_ID_DELORME_EM_LT20 ) }, - {HID_I2C_DEVICE (USB_VENDOR_ID_ELAN ,0x0400 ) }, - {HID_I2C_DEVICE (USB_VENDOR_ID_ELAN ,0x0401 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_ESSENTIAL_REALITY ,USB_DEVICE_ID_ESSENTIAL_REALITY_P5 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_ETT ,USB_DEVICE_ID_TC5UH ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_ETT ,USB_DEVICE_ID_TC4UM ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GENERAL_TOUCH ,0x0001 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GENERAL_TOUCH ,0x0002 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GENERAL_TOUCH ,0x0004 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GOTOP ,USB_DEVICE_ID_SUPER_Q2 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GOTOP ,USB_DEVICE_ID_GOGOPEN ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GOTOP ,USB_DEVICE_ID_PENPOWER ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GRETAGMACBETH ,USB_DEVICE_ID_GRETAGMACBETH_HUEY ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GRIFFIN ,USB_DEVICE_ID_POWERMATE ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GRIFFIN ,USB_DEVICE_ID_SOUNDKNOB ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GRIFFIN ,USB_DEVICE_ID_RADIOSHARK ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GTCO ,USB_DEVICE_ID_GTCO_90 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GTCO ,USB_DEVICE_ID_GTCO_100 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GTCO ,USB_DEVICE_ID_GTCO_101 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GTCO ,USB_DEVICE_ID_GTCO_103 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GTCO ,USB_DEVICE_ID_GTCO_104 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GTCO ,USB_DEVICE_ID_GTCO_105 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GTCO ,USB_DEVICE_ID_GTCO_106 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GTCO ,USB_DEVICE_ID_GTCO_107 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GTCO ,USB_DEVICE_ID_GTCO_108 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GTCO ,USB_DEVICE_ID_GTCO_200 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GTCO ,USB_DEVICE_ID_GTCO_201 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GTCO ,USB_DEVICE_ID_GTCO_202 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GTCO ,USB_DEVICE_ID_GTCO_203 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GTCO ,USB_DEVICE_ID_GTCO_204 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GTCO ,USB_DEVICE_ID_GTCO_205 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GTCO ,USB_DEVICE_ID_GTCO_206 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GTCO ,USB_DEVICE_ID_GTCO_207 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GTCO ,USB_DEVICE_ID_GTCO_300 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GTCO ,USB_DEVICE_ID_GTCO_301 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GTCO ,USB_DEVICE_ID_GTCO_302 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GTCO ,USB_DEVICE_ID_GTCO_303 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GTCO ,USB_DEVICE_ID_GTCO_304 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GTCO ,USB_DEVICE_ID_GTCO_305 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GTCO ,USB_DEVICE_ID_GTCO_306 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GTCO ,USB_DEVICE_ID_GTCO_307 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GTCO ,USB_DEVICE_ID_GTCO_308 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GTCO ,USB_DEVICE_ID_GTCO_309 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GTCO ,USB_DEVICE_ID_GTCO_400 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GTCO ,USB_DEVICE_ID_GTCO_401 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GTCO ,USB_DEVICE_ID_GTCO_402 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GTCO ,USB_DEVICE_ID_GTCO_403 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GTCO ,USB_DEVICE_ID_GTCO_404 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GTCO ,USB_DEVICE_ID_GTCO_405 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GTCO ,USB_DEVICE_ID_GTCO_500 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GTCO ,USB_DEVICE_ID_GTCO_501 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GTCO ,USB_DEVICE_ID_GTCO_502 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GTCO ,USB_DEVICE_ID_GTCO_503 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GTCO ,USB_DEVICE_ID_GTCO_504 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GTCO ,USB_DEVICE_ID_GTCO_1000 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GTCO ,USB_DEVICE_ID_GTCO_1001 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GTCO ,USB_DEVICE_ID_GTCO_1002 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GTCO ,USB_DEVICE_ID_GTCO_1003 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GTCO ,USB_DEVICE_ID_GTCO_1004 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GTCO ,USB_DEVICE_ID_GTCO_1005 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GTCO ,USB_DEVICE_ID_GTCO_1006 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_GTCO ,USB_DEVICE_ID_GTCO_1007 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_IMATION ,USB_DEVICE_ID_DISC_STAKKA ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_JABRA ,USB_DEVICE_ID_JABRA_SPEAK_410 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_JABRA ,USB_DEVICE_ID_JABRA_SPEAK_510 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_JABRA ,USB_DEVICE_ID_JABRA_GN9350E ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_KBGEAR ,USB_DEVICE_ID_KBGEAR_JAMSTUDIO ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_KWORLD ,USB_DEVICE_ID_KWORLD_RADIO_FM700 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_KYE ,USB_DEVICE_ID_KYE_GPEN_560 ) }, - {HID_BLUETOOTH_DEVICE (USB_VENDOR_ID_KYE ,0x0058 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LD ,USB_DEVICE_ID_LD_CASSY ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LD ,USB_DEVICE_ID_LD_CASSY2 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LD ,USB_DEVICE_ID_LD_POCKETCASSY ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LD ,USB_DEVICE_ID_LD_POCKETCASSY2 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LD ,USB_DEVICE_ID_LD_MOBILECASSY ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LD ,USB_DEVICE_ID_LD_MOBILECASSY2 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LD ,USB_DEVICE_ID_LD_MICROCASSYVOLTAGE ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LD ,USB_DEVICE_ID_LD_MICROCASSYCURRENT ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LD ,USB_DEVICE_ID_LD_MICROCASSYTIME ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LD ,USB_DEVICE_ID_LD_MICROCASSYTEMPERATURE ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LD ,USB_DEVICE_ID_LD_MICROCASSYPH ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LD ,USB_DEVICE_ID_LD_JWM ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LD ,USB_DEVICE_ID_LD_DMMP ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LD ,USB_DEVICE_ID_LD_UMIP ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LD ,USB_DEVICE_ID_LD_UMIC ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LD ,USB_DEVICE_ID_LD_UMIB ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LD ,USB_DEVICE_ID_LD_XRAY ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LD ,USB_DEVICE_ID_LD_XRAY2 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LD ,USB_DEVICE_ID_LD_VIDEOCOM ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LD ,USB_DEVICE_ID_LD_MOTOR ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LD ,USB_DEVICE_ID_LD_COM3LAB ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LD ,USB_DEVICE_ID_LD_TELEPORT ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LD ,USB_DEVICE_ID_LD_NETWORKANALYSER ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LD ,USB_DEVICE_ID_LD_POWERCONTROL ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LD ,USB_DEVICE_ID_LD_MACHINETEST ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LD ,USB_DEVICE_ID_LD_MOSTANALYSER ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LD ,USB_DEVICE_ID_LD_MOSTANALYSER2 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LD ,USB_DEVICE_ID_LD_ABSESP ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LD ,USB_DEVICE_ID_LD_AUTODATABUS ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LD ,USB_DEVICE_ID_LD_MCT ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LD ,USB_DEVICE_ID_LD_HYBRID ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_LD ,USB_DEVICE_ID_LD_HEATCONTROL ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_MADCATZ ,USB_DEVICE_ID_MADCATZ_BEATPAD ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_MCC ,USB_DEVICE_ID_MCC_PMD1024LS ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_MCC ,USB_DEVICE_ID_MCC_PMD1208LS ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_MICROCHIP ,USB_DEVICE_ID_PICKIT1 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_MICROCHIP ,USB_DEVICE_ID_PICKIT2 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_MICROCHIP ,USB_DEVICE_ID_PICK16F1454 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_MICROCHIP ,USB_DEVICE_ID_PICK16F1454_V2 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_NATIONAL_SEMICONDUCTOR ,USB_DEVICE_ID_N_S_HARMONY ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_ONTRAK ,USB_DEVICE_ID_ONTRAK_ADU100 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_ONTRAK ,USB_DEVICE_ID_ONTRAK_ADU100 +20 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_ONTRAK ,USB_DEVICE_ID_ONTRAK_ADU100 +30 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_ONTRAK ,USB_DEVICE_ID_ONTRAK_ADU100 +100 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_ONTRAK ,USB_DEVICE_ID_ONTRAK_ADU100 +108 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_ONTRAK ,USB_DEVICE_ID_ONTRAK_ADU100 +118 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_ONTRAK ,USB_DEVICE_ID_ONTRAK_ADU100 +200 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_ONTRAK ,USB_DEVICE_ID_ONTRAK_ADU100 +300 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_ONTRAK ,USB_DEVICE_ID_ONTRAK_ADU100 +400 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_ONTRAK ,USB_DEVICE_ID_ONTRAK_ADU100 +500 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_PANJIT ,0x0001 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_PANJIT ,0x0002 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_PANJIT ,0x0003 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_PANJIT ,0x0004 ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_PETZL ,USB_DEVICE_ID_PETZL_HEADLAMP ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_PHILIPS ,USB_DEVICE_ID_PHILIPS_IEEE802154_DONGLE ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_POWERCOM ,USB_DEVICE_ID_POWERCOM_UPS ) }, -#if IS_ENABLED(CONFIG_MOUSE_SYNAPTICS_USB) - {HID_USB_DEVICE (USB_VENDOR_ID_SYNAPTICS ,USB_DEVICE_ID_SYNAPTICS_TP ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_SYNAPTICS ,USB_DEVICE_ID_SYNAPTICS_INT_TP ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_SYNAPTICS ,USB_DEVICE_ID_SYNAPTICS_CPAD ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_SYNAPTICS ,USB_DEVICE_ID_SYNAPTICS_STICK ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_SYNAPTICS ,USB_DEVICE_ID_SYNAPTICS_WP ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_SYNAPTICS ,USB_DEVICE_ID_SYNAPTICS_COMP_TP ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_SYNAPTICS ,USB_DEVICE_ID_SYNAPTICS_WTP ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_SYNAPTICS ,USB_DEVICE_ID_SYNAPTICS_DPAD ) }, -#endif - {HID_USB_DEVICE (USB_VENDOR_ID_YEALINK ,USB_DEVICE_ID_YEALINK_P1K_P4K_B2K ) }, - { } -}; - -/** -* hid_mouse_ignore_list - mouse devices which should not be handled by the hid layer -* -* There are composite devices for which we want to ignore only a certain -* interface. This is a list of devices for which only the mouse interface will -* be ignored. This allows a dedicated driver to take care of the interface. -*/ -static const struct hid_device_id hid_mouse_ignore_list[] = { -/* appletouch driver */ - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_FOUNTAIN_ANSI ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_FOUNTAIN_ISO ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_GEYSER_ANSI ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_GEYSER_ISO ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_GEYSER_JIS ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_GEYSER3_ANSI ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_GEYSER3_ISO ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_GEYSER3_JIS ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_GEYSER4_ANSI ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_GEYSER4_ISO ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_GEYSER4_JIS ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_GEYSER4_HF_ANSI ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_GEYSER4_HF_ISO ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_GEYSER4_HF_JIS ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING_ANSI ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING_ISO ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING_JIS ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING2_ANSI ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING2_ISO ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING2_JIS ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING3_ANSI ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING3_ISO ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING3_JIS ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING4_ANSI ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING4_ISO ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING4_JIS ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING4A_ANSI ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING4A_ISO ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING5_ANSI ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING5_ISO ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING5_JIS ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING5A_ANSI ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING5A_ISO ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING5A_JIS ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING6_ANSI ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING6_ISO ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING6_JIS ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING6A_ANSI ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING6A_ISO ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING6A_JIS ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING7_ANSI ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING7_ISO ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING7_JIS ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING7A_ANSI ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING7A_ISO ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING7A_JIS ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING8_ANSI ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING8_ISO ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING8_JIS ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING9_ANSI ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING9_ISO ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_WELLSPRING9_JIS ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY ) }, - {HID_USB_DEVICE (USB_VENDOR_ID_APPLE ,USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY ) }, - { } -}; - -bool hid_ignore (struct hid_device *hdev) -{ -if (hdev->quirks &HID_QUIRK_NO_IGNORE ) -return false; -if (hdev->quirks &HID_QUIRK_IGNORE ) -return true; - -switch (hdev->vendor) { -case USB_VENDOR_ID_CODEMERCS : -/* ignore all Code Mercenaries IOWarrior devices */ -if (hdev->product >=USB_DEVICE_ID_CODEMERCS_IOW_FIRST && - hdev->product <=USB_DEVICE_ID_CODEMERCS_IOW_LAST ) -return true; -break ; -case USB_VENDOR_ID_LOGITECH : -if (hdev->product >=USB_DEVICE_ID_LOGITECH_HARMONY_FIRST && - hdev->product <=USB_DEVICE_ID_LOGITECH_HARMONY_LAST ) -return true; -/* -* The Keene FM transmitter USB device has the same USB ID as -* the Logitech AudioHub Speaker, but it should ignore the hid. -* Check if the name is that of the Keene device. -* For reference: the name of the AudioHub is -* "HOLTEK AudioHub Speaker". -*/ -if (hdev->product ==USB_DEVICE_ID_LOGITECH_AUDIOHUB && - !strcmp (hdev->name,"HOLTEK B-LINK USB Audio " )) -return true; -break ; -case USB_VENDOR_ID_SOUNDGRAPH : -if (hdev->product >=USB_DEVICE_ID_SOUNDGRAPH_IMON_FIRST && - hdev->product <=USB_DEVICE_ID_SOUNDGRAPH_IMON_LAST ) -return true; -break ; -case USB_VENDOR_ID_HANWANG : -if (hdev->product >=USB_DEVICE_ID_HANWANG_TABLET_FIRST && - hdev->product <=USB_DEVICE_ID_HANWANG_TABLET_LAST ) -return true; -break ; -case USB_VENDOR_ID_JESS : -if (hdev->product ==USB_DEVICE_ID_JESS_YUREX && - hdev->type ==HID_TYPE_USBNONE ) -return true; -break ; -case USB_VENDOR_ID_VELLEMAN : -/* These are not HID devices. They are handled by comedi. */ -if ((hdev->product >=USB_DEVICE_ID_VELLEMAN_K8055_FIRST && - hdev->product <=USB_DEVICE_ID_VELLEMAN_K8055_LAST ) || - (hdev->product >=USB_DEVICE_ID_VELLEMAN_K8061_FIRST && - hdev->product <=USB_DEVICE_ID_VELLEMAN_K8061_LAST )) -return true; -break ; -case USB_VENDOR_ID_ATMEL_V_USB : -/* Masterkit MA901 usb radio based on Atmel tiny85 chip and -* it has the same USB ID as many Atmel V-USB devices. This -* usb radio is handled by radio-ma901.c driver so we want -* ignore the hid. Check the name, bus, product and ignore -* if we have MA901 usb radio. -*/ -if (hdev->product ==USB_DEVICE_ID_ATMEL_V_USB && - hdev->bus ==BUS_USB && -strncmp (hdev->name,"www.masterkit.ru MA901" ,22 ) ==0 ) -return true; -break ; - } - -if (hdev->type ==HID_TYPE_USBMOUSE && -hid_match_id (hdev, hid_mouse_ignore_list)) -return true; - -return !!hid_match_id (hdev, hid_ignore_list); -} -EXPORT_SYMBOL_GPL (hid_ignore); -int hid_add_device (struct hid_device *hdev) {static atomic_t id =ATOMIC_INIT (0 );
drivers/hid/hid-quirks.c +312 -0
324 lines not on this page · raw message
Signature · 1 line
2.9.5
PATCH 4/4 HID: core: remove the absolute need of hid_have_special_driver[]
In reply to Fedora Kernel TeamFrom: Benjamin Tissoires <[email protected]>
Most HID devices behave properly when they are used with hid-generic. Since kernel v4.12, we do not poll for input reports at plug in, so hid-generic should behave properly with all HID devices.
There has been a long standing list of HID devices that have a special driver. It used to be just a few, but with time, this list went too big, and we can not ask users to know which HID special driver will pick up their device.
We can teach hid-generic to be nice with others. If a device is not explicitly marked with HID_QUIRK_HAVE_SPECIAL_DRIVER, we can allow hid-generic to pick up the device as long as no other loaded HID driver will match the device.
When the special driver appears, hid-generic can step back and let the special driver handling the device. In case this special driver is removed, this good old pal of hid-generic will rebind to the device.
This basically makes the list hid_have_special_driver[] useless. It still allows to not see a hid-generic driver bound and removed during boot, so we can keep it around.
This will also help other people to have a special HID driver without the need of recompiling hid-core.
--- drivers/hid/hid-core.c | 76 ++++++++++++++++++++++++++++++----------------- drivers/hid/hid-generic.c | 68 +++++++++++++++++++++++++++++++++++++++++- include/linux/hid.h | 10 +++++++ 3 files changed, 125 insertions(+), 29 deletions(-)
drivers/hid/hid-core.c +48 -28
@@ -830,31 +830,6 @@ static int hid_scan_report(struct hid_device *hid)break ; } -/* fall back to generic driver in case specific driver doesn't exist */ -switch (hid->group) { -case HID_GROUP_MULTITOUCH_WIN_8 : -/* fall-through */ -case HID_GROUP_MULTITOUCH : -if (!IS_ENABLED (CONFIG_HID_MULTITOUCH )) - hid->group =HID_GROUP_GENERIC ; -break ; -case HID_GROUP_SENSOR_HUB : -if (!IS_ENABLED (CONFIG_HID_SENSOR_HUB )) - hid->group =HID_GROUP_GENERIC ; -break ; -case HID_GROUP_RMI : -if (!IS_ENABLED (CONFIG_HID_RMI )) - hid->group =HID_GROUP_GENERIC ; -break ; -case HID_GROUP_WACOM : -if (!IS_ENABLED (CONFIG_HID_WACOM )) - hid->group =HID_GROUP_GENERIC ; -break ; -case HID_GROUP_LOGITECH_DJ_DEVICE : -if (!IS_ENABLED (CONFIG_HID_LOGITECH_DJ )) - hid->group =HID_GROUP_GENERIC ; -break ; - }vfree (parser);return 0 ; }
@@ -1928,8 +1903,8 @@ static void hid_free_dynids(struct hid_driver *hdrv)spin_unlock (&hdrv->dyn_lock); } -static const struct hid_device_id *hid_match_device (struct hid_device *hdev, -struct hid_driver *hdrv) +const struct hid_device_id *hid_match_device (struct hid_device *hdev, +struct hid_driver *hdrv) {struct hid_dynid *dynid;
@@ -1944,6 +1919,7 @@ static const struct hid_device_id *hid_match_device(struct hid_device *hdev,return hid_match_id (hdev, hdrv->id_table); } +EXPORT_SYMBOL_GPL (hid_match_device);static int hid_bus_match (struct device *dev,struct device_driver *drv) {
@@ -1973,6 +1949,23 @@ static int hid_device_probe(struct device *dev) goto unlock; } +if (hdrv->match) { +if (!hdrv->match (hdev, hid_ignore_special_drivers)) { + ret = -ENODEV ; + goto unlock; + } + }else { +/* +* hid-generic implements .match(), so if +* hid_ignore_special_drivers is set, we can safely +* return. +*/ +if (hid_ignore_special_drivers) { + ret = -ENODEV ; + goto unlock; + } + } + hdev->driver = hdrv;if (hdrv->probe) { ret = hdrv->probe (hdev, id);
@@ -2069,7 +2062,7 @@ static int hid_uevent(struct device *dev, struct kobj_uevent_env *env)return 0 ; } -static struct bus_type hid_bus_type = { +struct bus_type hid_bus_type = { .name ="hid" , .dev_groups = hid_dev_groups, .drv_groups = hid_drv_groups,
@@ -2202,6 +2195,29 @@ void hid_destroy_device(struct hid_device *hdev) }EXPORT_SYMBOL_GPL (hid_destroy_device); + +static int __bus_add_driver (struct device_driver *drv,void *data) +{ +struct hid_driver *added_hdrv = data; +struct hid_driver *hdrv =to_hid_driver (drv); + +if (hdrv->bus_add_driver) + hdrv->bus_add_driver (added_hdrv); + +return 0 ; +} + +static int __bus_removed_driver (struct device_driver *drv,void *data) +{ +struct hid_driver *removed_hdrv = data; +struct hid_driver *hdrv =to_hid_driver (drv); + +if (hdrv->bus_removed_driver) + hdrv->bus_removed_driver (removed_hdrv); + +return 0 ; +} +int __hid_register_driver (struct hid_driver *hdrv,struct module *owner,const char *mod_name) {
@@ -2213,6 +2229,8 @@ int __hid_register_driver(struct hid_driver *hdrv, struct module *owner,INIT_LIST_HEAD (&hdrv->dyn_list);spin_lock_init (&hdrv->dyn_lock); +bus_for_each_drv (&hid_bus_type,NULL , hdrv, __bus_add_driver); +return driver_register (&hdrv->driver); }EXPORT_SYMBOL_GPL (__hid_register_driver);
@@ -2221,6 +2239,8 @@ void hid_unregister_driver(struct hid_driver *hdrv) {driver_unregister (&hdrv->driver);hid_free_dynids (hdrv); + +bus_for_each_drv (&hid_bus_type,NULL , hdrv, __bus_removed_driver); }EXPORT_SYMBOL_GPL (hid_unregister_driver);
drivers/hid/hid-generic.c +67 -1
81 lines not on this page · raw message
include/linux/hid.h +10 -0
@@ -671,6 +671,7 @@ struct hid_usage_id {* to be called) * @dyn_list: list of dynamically added device ids * @dyn_lock: lock protecting @dyn_list +* @match: check if the given device is handled by this driver * @probe: new device inserted * @remove: device removed (NULL if not a hot-plug capable driver) * @report_table: on which reports to call raw_event (NULL means all)
@@ -683,6 +684,8 @@ struct hid_usage_id {* @input_mapped: invoked on input registering after mapping an usage * @input_configured: invoked just before the device is registered * @feature_mapping: invoked on feature registering +* @bus_add_driver: invoked when a HID driver is about to be added +* @bus_removed_driver: invoked when a HID driver has been removed * @suspend: invoked on suspend (NULL means nop) * @resume: invoked on resume if device was not reset (NULL means nop) * @reset_resume: invoked on resume if device was reset (NULL means nop)
@@ -711,6 +714,7 @@ struct hid_driver {struct list_head dyn_list;spinlock_t dyn_lock; +bool (*match)(struct hid_device *dev,bool ignore_special_driver);int (*probe)(struct hid_device *dev,const struct hid_device_id *id);void (*remove)(struct hid_device *dev);
@@ -736,6 +740,8 @@ struct hid_driver {void (*feature_mapping)(struct hid_device *hdev,struct hid_field *field,struct hid_usage *usage); +void (*bus_add_driver)(struct hid_driver *driver); +void (*bus_removed_driver)(struct hid_driver *driver);#ifdef CONFIG_PM int (*suspend)(struct hid_device *hdev,pm_message_t message);int (*resume)(struct hid_device *hdev);
@@ -814,6 +820,8 @@ extern bool hid_ignore(struct hid_device *);extern int hid_add_device (struct hid_device *);extern void hid_destroy_device (struct hid_device *); +extern struct bus_type hid_bus_type; +extern int __must_check __hid_register_driver (struct hid_driver *,struct module *,const char *mod_name);
@@ -864,6 +872,8 @@ bool hid_match_one_id(const struct hid_device *hdev, const struct hid_device_id *id);const struct hid_device_id *hid_match_id (const struct hid_device *hdev,const struct hid_device_id *id); +const struct hid_device_id *hid_match_device (struct hid_device *hdev, +struct hid_driver *hdrv);s32 hid_snto32 (__u32 value,unsigned n);__u32 hid_field_extract (const struct hid_device *hid,__u8 *report,unsigned offset,unsigned n);
Signature · 1 line
2.9.5
On Mon, Oct 2, 2017 at 10:18 PM, Fedora Kernel Team <[email protected]> wrote:
Ouch, I happen to be in a git tree of the Fedora kernel, so git send-email decided to rewrite the 'from:' field.
I'll add this to my check list before sending :/
Cheers,
Benjamin
Quoted 53 lines
From: Benjamin Tissoires <[email protected]>
Hi,
This is the series I was talking about earlier[1].
Basically, Jiri, I'd like to see 1-3 applied in for-next at your earliest convenience, and we can discuss about 4/4 without any rush.
I have this in my local tree since June, but I made some late minute changes before sending, though the tests showed they are fine (I wouldn't mind a second pair of eyes on it).
I am pretty sure we can optimize the things more, but for now this should be just fine and just convert the quirks mechanism in hid-core.
For instance, there is a second call ofhid_lookup_quirk()inusbhid/hid-core.cthat I am not sure about the absolute need.Niels, please have a look at this and tell me if you are OK to rebase your series on top of it.
Cheers,
Benjamin[1] https://patchwork.kernel.org/patch/9980443/
Benjamin Tissoires (4):
HID: core: move the dynamic quirks handling in core
HID: quirks: move the list of special devices into a quirk
HID: core: move the list of ignored devices inhid-quirks.c
HID: core: remove the absolute need of hid_have_special_driver[]drivers/hid/Makefile | 2 +- drivers/hid/hid-core.c | 925 ++--------------------------- drivers/hid/hid-generic.c | 68 ++- drivers/hid/hid-quirks.c | 1242 +++++++++++++++++++++++++++++++++++++++ drivers/hid/usbhid/Makefile | 2 +- drivers/hid/usbhid/hid-core.c | 10 +- drivers/hid/usbhid/hid-quirks.c | 401 ------------- include/linux/hid.h | 21 +- net/bluetooth/hidp/core.c | 2 +- 9 files changed, 1388 insertions(+), 1285 deletions(-) create mode 100644 drivers/hid/hid-quirks.c delete mode 100644 drivers/hid/usbhid/hid-quirks.c--
2.9.5--
To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html