aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2018-01-31 16:00:01 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2018-01-31 16:00:01 -0500
commit183b6366cf473ff0e706a6751adc082faa44843d (patch)
tree6a89f9a575ae752e3990b045d4dec80b4e7029bf
parent4c6790c49a8aa044b7b4c275ed556ef512866092 (diff)
parentc86aa0129c07c8c7f54dc47656de99ab0eb809b3 (diff)
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid
Pull HID updates from Jiri Kosina: - remove hid_have_special_driver[] entry hard requirement for any newly supported VID/PID by a specific non-core hid driver, and general related cleanup of HID matching core, from Benjamin Tissoires - support for new Wacom devices and a few small fixups for already supported ones in Wacom driver, from Aaron Armstrong Skomra and Jason Gerecke - sysfs interface fix for roccat driver from Dan Carpenter - support for new Asus HW (T100TAF, T100HA, T200TA) from Hans de Goede - improved support for Jabra devices, from Niels Skou Olsen - other assorted small fixes and new device IDs * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid: (30 commits) HID: quirks: Fix keyboard + touchpad on Toshiba Click Mini not working HID: roccat: prevent an out of bounds read in kovaplus_profile_activated() HID: asus: Fix special function keys on T200TA HID: asus: Add touchpad max x/y and resolution info for the T200TA HID: wacom: Add support for One by Wacom (CTL-472 / CTL-672) HID: wacom: Fix reporting of touch toggle (WACOM_HID_WD_MUTE_DEVICE) events HID: intel-ish-hid: Enable Cannon Lake and Coffee Lake laptop/desktop HID: elecom: rewrite report fixup for EX-G and future mice HID: sony: Report DS4 version info through sysfs HID: sony: Print reversed MAC address via %pMR HID: wacom: EKR: ensure devres groups at higher indexes are released HID: rmi: Support the Fujitsu R726 Pad dock using hid-rmi HID: add quirk for another PIXART OEM mouse used by HP HID: quirks: make array hid_quirks static HID: hid-multitouch: support fine-grain orientation reporting HID: asus: Add product-id for the T100TAF and T100HA keyboard docks HID: elo: clear BTN_LEFT mapping HID: multitouch: Combine all left-button events in a frame HID: multitouch: Only look at non touch fields in first packet of a frame HID: multitouch: Properly deal with Win8 PTP reports with 0 touches ...
-rw-r--r--Documentation/devicetree/bindings/input/hid-over-i2c.txt2
-rw-r--r--Documentation/input/multi-touch-protocol.rst9
-rw-r--r--drivers/hid/Kconfig12
-rw-r--r--drivers/hid/Makefile3
-rw-r--r--drivers/hid/hid-asus.c41
-rw-r--r--drivers/hid/hid-core.c932
-rw-r--r--drivers/hid/hid-elecom.c78
-rw-r--r--drivers/hid/hid-elo.c6
-rw-r--r--drivers/hid/hid-generic.c68
-rw-r--r--drivers/hid/hid-ids.h7
-rw-r--r--drivers/hid/hid-jabra.c58
-rw-r--r--drivers/hid/hid-multitouch.c137
-rw-r--r--drivers/hid/hid-quirks.c1276
-rw-r--r--drivers/hid/hid-rmi.c1
-rw-r--r--drivers/hid/hid-roccat-kovaplus.c2
-rw-r--r--drivers/hid/hid-sony.c93
-rw-r--r--drivers/hid/i2c-hid/i2c-hid.c18
-rw-r--r--drivers/hid/intel-ish-hid/ipc/hw-ish.h1
-rw-r--r--drivers/hid/intel-ish-hid/ipc/pci-ish.c1
-rw-r--r--drivers/hid/usbhid/Makefile2
-rw-r--r--drivers/hid/usbhid/hid-core.c11
-rw-r--r--drivers/hid/usbhid/hid-quirks.c402
-rw-r--r--drivers/hid/wacom_sys.c134
-rw-r--r--drivers/hid/wacom_wac.c67
-rw-r--r--drivers/hid/wacom_wac.h6
-rw-r--r--include/linux/hid.h22
-rw-r--r--net/bluetooth/hidp/core.c2
27 files changed, 1995 insertions, 1396 deletions
diff --git a/Documentation/devicetree/bindings/input/hid-over-i2c.txt b/Documentation/devicetree/bindings/input/hid-over-i2c.txt
index 28e8bd8b7d64..4d3da9d91de4 100644
--- a/Documentation/devicetree/bindings/input/hid-over-i2c.txt
+++ b/Documentation/devicetree/bindings/input/hid-over-i2c.txt
@@ -31,7 +31,7 @@ device-specific compatible properties, which should be used in addition to the
31 31
32- vdd-supply: phandle of the regulator that provides the supply voltage. 32- vdd-supply: phandle of the regulator that provides the supply voltage.
33- post-power-on-delay-ms: time required by the device after enabling its regulators 33- post-power-on-delay-ms: time required by the device after enabling its regulators
34 before it is ready for communication. Must be used with 'vdd-supply'. 34 or powering it on, before it is ready for communication.
35 35
36Example: 36Example:
37 37
diff --git a/Documentation/input/multi-touch-protocol.rst b/Documentation/input/multi-touch-protocol.rst
index 8035868c56bc..b51751a0cd5d 100644
--- a/Documentation/input/multi-touch-protocol.rst
+++ b/Documentation/input/multi-touch-protocol.rst
@@ -269,10 +269,11 @@ ABS_MT_ORIENTATION
269 The orientation of the touching ellipse. The value should describe a signed 269 The orientation of the touching ellipse. The value should describe a signed
270 quarter of a revolution clockwise around the touch center. The signed value 270 quarter of a revolution clockwise around the touch center. The signed value
271 range is arbitrary, but zero should be returned for an ellipse aligned with 271 range is arbitrary, but zero should be returned for an ellipse aligned with
272 the Y axis of the surface, a negative value when the ellipse is turned to 272 the Y axis (north) of the surface, a negative value when the ellipse is
273 the left, and a positive value when the ellipse is turned to the 273 turned to the left, and a positive value when the ellipse is turned to the
274 right. When completely aligned with the X axis, the range max should be 274 right. When aligned with the X axis in the positive direction, the range
275 returned. 275 max should be returned; when aligned with the X axis in the negative
276 direction, the range -max should be returned.
276 277
277 Touch ellipsis are symmetrical by default. For devices capable of true 360 278 Touch ellipsis are symmetrical by default. For devices capable of true 360
278 degree orientation, the reported orientation must exceed the range max to 279 degree orientation, the reported orientation must exceed the range max to
diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig
index 779c5ae47f36..19c499f5623d 100644
--- a/drivers/hid/Kconfig
+++ b/drivers/hid/Kconfig
@@ -280,6 +280,7 @@ config HID_ELECOM
280 ---help--- 280 ---help---
281 Support for ELECOM devices: 281 Support for ELECOM devices:
282 - BM084 Bluetooth Mouse 282 - BM084 Bluetooth Mouse
283 - EX-G Trackball (Wired and wireless)
283 - DEFT Trackball (Wired and wireless) 284 - DEFT Trackball (Wired and wireless)
284 - HUGE Trackball (Wired and wireless) 285 - HUGE Trackball (Wired and wireless)
285 286
@@ -396,6 +397,17 @@ config HID_ITE
396 ---help--- 397 ---help---
397 Support for ITE devices not fully compliant with HID standard. 398 Support for ITE devices not fully compliant with HID standard.
398 399
400config HID_JABRA
401 tristate "Jabra USB HID Driver"
402 depends on HID
403 ---help---
404 Support for Jabra USB HID devices.
405
406 Prevents mapping of vendor defined HID usages to input events. Without
407 this driver HID reports from Jabra devices may incorrectly be seen as
408 mouse button events.
409 Say M here if you may ever plug in a Jabra USB device.
410
399config HID_TWINHAN 411config HID_TWINHAN
400 tristate "Twinhan IR remote control" 412 tristate "Twinhan IR remote control"
401 depends on HID 413 depends on HID
diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile
index 235bd2a7b333..eb13b9e92d85 100644
--- a/drivers/hid/Makefile
+++ b/drivers/hid/Makefile
@@ -2,7 +2,7 @@
2# 2#
3# Makefile for the HID driver 3# Makefile for the HID driver
4# 4#
5hid-y := hid-core.o hid-input.o 5hid-y := hid-core.o hid-input.o hid-quirks.o
6hid-$(CONFIG_DEBUG_FS) += hid-debug.o 6hid-$(CONFIG_DEBUG_FS) += hid-debug.o
7 7
8obj-$(CONFIG_HID) += hid.o 8obj-$(CONFIG_HID) += hid.o
@@ -52,6 +52,7 @@ obj-$(CONFIG_HID_HOLTEK) += hid-holtekff.o
52obj-$(CONFIG_HID_HYPERV_MOUSE) += hid-hyperv.o 52obj-$(CONFIG_HID_HYPERV_MOUSE) += hid-hyperv.o
53obj-$(CONFIG_HID_ICADE) += hid-icade.o 53obj-$(CONFIG_HID_ICADE) += hid-icade.o
54obj-$(CONFIG_HID_ITE) += hid-ite.o 54obj-$(CONFIG_HID_ITE) += hid-ite.o
55obj-$(CONFIG_HID_JABRA) += hid-jabra.o
55obj-$(CONFIG_HID_KENSINGTON) += hid-kensington.o 56obj-$(CONFIG_HID_KENSINGTON) += hid-kensington.o
56obj-$(CONFIG_HID_KEYTOUCH) += hid-keytouch.o 57obj-$(CONFIG_HID_KEYTOUCH) += hid-keytouch.o
57obj-$(CONFIG_HID_KYE) += hid-kye.o 58obj-$(CONFIG_HID_KYE) += hid-kye.o
diff --git a/drivers/hid/hid-asus.c b/drivers/hid/hid-asus.c
index 1bb7b63b3150..88b9703318e4 100644
--- a/drivers/hid/hid-asus.c
+++ b/drivers/hid/hid-asus.c
@@ -26,6 +26,7 @@
26 * any later version. 26 * any later version.
27 */ 27 */
28 28
29#include <linux/dmi.h>
29#include <linux/hid.h> 30#include <linux/hid.h>
30#include <linux/module.h> 31#include <linux/module.h>
31#include <linux/input/mt.h> 32#include <linux/input/mt.h>
@@ -119,6 +120,24 @@ static const struct asus_touchpad_info asus_t100ta_tp = {
119 .max_contacts = 5, 120 .max_contacts = 5,
120}; 121};
121 122
123static const struct asus_touchpad_info asus_t100ha_tp = {
124 .max_x = 2640,
125 .max_y = 1320,
126 .res_x = 30, /* units/mm */
127 .res_y = 29, /* units/mm */
128 .contact_size = 5,
129 .max_contacts = 5,
130};
131
132static const struct asus_touchpad_info asus_t200ta_tp = {
133 .max_x = 3120,
134 .max_y = 1716,
135 .res_x = 30, /* units/mm */
136 .res_y = 28, /* units/mm */
137 .contact_size = 5,
138 .max_contacts = 5,
139};
140
122static const struct asus_touchpad_info asus_t100chi_tp = { 141static const struct asus_touchpad_info asus_t100chi_tp = {
123 .max_x = 2640, 142 .max_x = 2640,
124 .max_y = 1320, 143 .max_y = 1320,
@@ -606,7 +625,17 @@ static int asus_probe(struct hid_device *hdev, const struct hid_device_id *id)
606 625
607 if (intf->altsetting->desc.bInterfaceNumber == T100_TPAD_INTF) { 626 if (intf->altsetting->desc.bInterfaceNumber == T100_TPAD_INTF) {
608 drvdata->quirks = QUIRK_SKIP_INPUT_MAPPING; 627 drvdata->quirks = QUIRK_SKIP_INPUT_MAPPING;
609 drvdata->tp = &asus_t100ta_tp; 628 /*
629 * The T100HA uses the same USB-ids as the T100TAF and
630 * the T200TA uses the same USB-ids as the T100TA, while
631 * both have different max x/y values as the T100TA[F].
632 */
633 if (dmi_match(DMI_PRODUCT_NAME, "T100HAN"))
634 drvdata->tp = &asus_t100ha_tp;
635 else if (dmi_match(DMI_PRODUCT_NAME, "T200TA"))
636 drvdata->tp = &asus_t200ta_tp;
637 else
638 drvdata->tp = &asus_t100ta_tp;
610 } 639 }
611 } 640 }
612 641
@@ -686,9 +715,10 @@ static __u8 *asus_report_fixup(struct hid_device *hdev, __u8 *rdesc,
686 hid_info(hdev, "Fixing up Asus notebook report descriptor\n"); 715 hid_info(hdev, "Fixing up Asus notebook report descriptor\n");
687 rdesc[55] = 0xdd; 716 rdesc[55] = 0xdd;
688 } 717 }
689 /* For the T100TA keyboard dock */ 718 /* For the T100TA/T200TA keyboard dock */
690 if (drvdata->quirks & QUIRK_T100_KEYBOARD && 719 if (drvdata->quirks & QUIRK_T100_KEYBOARD &&
691 *rsize == 76 && rdesc[73] == 0x81 && rdesc[74] == 0x01) { 720 (*rsize == 76 || *rsize == 101) &&
721 rdesc[73] == 0x81 && rdesc[74] == 0x01) {
692 hid_info(hdev, "Fixing up Asus T100 keyb report descriptor\n"); 722 hid_info(hdev, "Fixing up Asus T100 keyb report descriptor\n");
693 rdesc[74] &= ~HID_MAIN_ITEM_CONSTANT; 723 rdesc[74] &= ~HID_MAIN_ITEM_CONSTANT;
694 } 724 }
@@ -751,7 +781,10 @@ static const struct hid_device_id asus_devices[] = {
751 { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, 781 { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK,
752 USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD3), QUIRK_G752_KEYBOARD }, 782 USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD3), QUIRK_G752_KEYBOARD },
753 { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, 783 { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK,
754 USB_DEVICE_ID_ASUSTEK_T100_KEYBOARD), 784 USB_DEVICE_ID_ASUSTEK_T100TA_KEYBOARD),
785 QUIRK_T100_KEYBOARD | QUIRK_NO_CONSUMER_USAGES },
786 { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK,
787 USB_DEVICE_ID_ASUSTEK_T100TAF_KEYBOARD),
755 QUIRK_T100_KEYBOARD | QUIRK_NO_CONSUMER_USAGES }, 788 QUIRK_T100_KEYBOARD | QUIRK_NO_CONSUMER_USAGES },
756 { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_ASUS_AK1D) }, 789 { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_ASUS_AK1D) },
757 { HID_USB_DEVICE(USB_VENDOR_ID_TURBOX, USB_DEVICE_ID_ASUS_MD_5110) }, 790 { HID_USB_DEVICE(USB_VENDOR_ID_TURBOX, USB_DEVICE_ID_ASUS_MD_5110) },
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
index 0c3f608131cf..c2560aae5542 100644
--- a/drivers/hid/hid-core.c
+++ b/drivers/hid/hid-core.c
@@ -830,31 +830,6 @@ static int hid_scan_report(struct hid_device *hid)
830 break; 830 break;
831 } 831 }
832 832
833 /* fall back to generic driver in case specific driver doesn't exist */
834 switch (hid->group) {
835 case HID_GROUP_MULTITOUCH_WIN_8:
836 /* fall-through */
837 case HID_GROUP_MULTITOUCH:
838 if (!IS_ENABLED(CONFIG_HID_MULTITOUCH))
839 hid->group = HID_GROUP_GENERIC;
840 break;
841 case HID_GROUP_SENSOR_HUB:
842 if (!IS_ENABLED(CONFIG_HID_SENSOR_HUB))
843 hid->group = HID_GROUP_GENERIC;
844 break;
845 case HID_GROUP_RMI:
846 if (!IS_ENABLED(CONFIG_HID_RMI))
847 hid->group = HID_GROUP_GENERIC;
848 break;
849 case HID_GROUP_WACOM:
850 if (!IS_ENABLED(CONFIG_HID_WACOM))
851 hid->group = HID_GROUP_GENERIC;
852 break;
853 case HID_GROUP_LOGITECH_DJ_DEVICE:
854 if (!IS_ENABLED(CONFIG_HID_LOGITECH_DJ))
855 hid->group = HID_GROUP_GENERIC;
856 break;
857 }
858 vfree(parser); 833 vfree(parser);
859 return 0; 834 return 0;
860} 835}
@@ -1597,8 +1572,8 @@ unlock:
1597} 1572}
1598EXPORT_SYMBOL_GPL(hid_input_report); 1573EXPORT_SYMBOL_GPL(hid_input_report);
1599 1574
1600static bool hid_match_one_id(struct hid_device *hdev, 1575bool hid_match_one_id(const struct hid_device *hdev,
1601 const struct hid_device_id *id) 1576 const struct hid_device_id *id)
1602{ 1577{
1603 return (id->bus == HID_BUS_ANY || id->bus == hdev->bus) && 1578 return (id->bus == HID_BUS_ANY || id->bus == hdev->bus) &&
1604 (id->group == HID_GROUP_ANY || id->group == hdev->group) && 1579 (id->group == HID_GROUP_ANY || id->group == hdev->group) &&
@@ -1606,7 +1581,7 @@ static bool hid_match_one_id(struct hid_device *hdev,
1606 (id->product == HID_ANY_ID || id->product == hdev->product); 1581 (id->product == HID_ANY_ID || id->product == hdev->product);
1607} 1582}
1608 1583
1609const struct hid_device_id *hid_match_id(struct hid_device *hdev, 1584const struct hid_device_id *hid_match_id(const struct hid_device *hdev,
1610 const struct hid_device_id *id) 1585 const struct hid_device_id *id)
1611{ 1586{
1612 for (; id->bus; id++) 1587 for (; id->bus; id++)
@@ -1862,541 +1837,6 @@ void hid_hw_close(struct hid_device *hdev)
1862} 1837}
1863EXPORT_SYMBOL_GPL(hid_hw_close); 1838EXPORT_SYMBOL_GPL(hid_hw_close);
1864 1839
1865/*
1866 * A list of devices for which there is a specialized driver on HID bus.
1867 *
1868 * Please note that for multitouch devices (driven by hid-multitouch driver),
1869 * there is a proper autodetection and autoloading in place (based on presence
1870 * of HID_DG_CONTACTID), so those devices don't need to be added to this list,
1871 * as we are doing the right thing in hid_scan_usage().
1872 *
1873 * Autodetection for (USB) HID sensor hubs exists too. If a collection of type
1874 * physical is found inside a usage page of type sensor, hid-sensor-hub will be
1875 * used as a driver. See hid_scan_report().
1876 */
1877static const struct hid_device_id hid_have_special_driver[] = {
1878#if IS_ENABLED(CONFIG_HID_A4TECH)
1879 { HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_WCP32PU) },
1880 { HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_X5_005D) },
1881 { HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_RP_649) },
1882#endif
1883#if IS_ENABLED(CONFIG_HID_ACCUTOUCH)
1884 { HID_USB_DEVICE(USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_ACCUTOUCH_2216) },
1885#endif
1886#if IS_ENABLED(CONFIG_HID_ACRUX)
1887 { HID_USB_DEVICE(USB_VENDOR_ID_ACRUX, 0x0802) },
1888 { HID_USB_DEVICE(USB_VENDOR_ID_ACRUX, 0xf705) },
1889#endif
1890#if IS_ENABLED(CONFIG_HID_ALPS)
1891 { HID_DEVICE(HID_BUS_ANY, HID_GROUP_ANY, USB_VENDOR_ID_ALPS_JP, HID_DEVICE_ID_ALPS_U1_DUAL) },
1892 { HID_I2C_DEVICE(USB_VENDOR_ID_ALPS_JP, HID_DEVICE_ID_ALPS_U1_DUAL) },
1893 { HID_I2C_DEVICE(USB_VENDOR_ID_ALPS_JP, HID_DEVICE_ID_ALPS_U1) },
1894 { HID_I2C_DEVICE(USB_VENDOR_ID_ALPS_JP, HID_DEVICE_ID_ALPS_T4_BTNLESS) },
1895#endif
1896#if IS_ENABLED(CONFIG_HID_APPLE)
1897 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MIGHTYMOUSE) },
1898 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_ANSI) },
1899 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_ISO) },
1900 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER_ANSI) },
1901 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER_ISO) },
1902 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER_JIS) },
1903 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER3_ANSI) },
1904 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER3_ISO) },
1905 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER3_JIS) },
1906 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_ANSI) },
1907 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_ISO) },
1908 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_JIS) },
1909 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_MINI_ANSI) },
1910 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_MINI_ISO) },
1911 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_MINI_JIS) },
1912 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_ANSI) },
1913 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_ISO) },
1914 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_JIS) },
1915 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_HF_ANSI) },
1916 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_HF_ISO) },
1917 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_HF_JIS) },
1918 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_ANSI) },
1919 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_ISO) },
1920 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_JIS) },
1921 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING_ANSI) },
1922 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING_ISO) },
1923 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING_JIS) },
1924 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING2_ANSI) },
1925 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING2_ISO) },
1926 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING2_JIS) },
1927 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_ANSI) },
1928 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_ISO) },
1929 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_JIS) },
1930 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_ANSI) },
1931 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_ISO) },
1932 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_JIS) },
1933 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_ANSI) },
1934 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_ISO) },
1935 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS) },
1936 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5_ANSI) },
1937 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5_ISO) },
1938 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5_JIS) },
1939 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5A_ANSI) },
1940 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5A_ISO) },
1941 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5A_JIS) },
1942 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_REVB_ANSI) },
1943 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_REVB_ISO) },
1944 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_REVB_JIS) },
1945 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6_ANSI) },
1946 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6_ISO) },
1947 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6_JIS) },
1948 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_ANSI) },
1949 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_ISO) },
1950 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_JIS) },
1951 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_ANSI) },
1952 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_ISO) },
1953 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_JIS) },
1954 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7A_ANSI) },
1955 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7A_ISO) },
1956 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7A_JIS) },
1957 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING8_ANSI) },
1958 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING8_ISO) },
1959 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING8_JIS) },
1960 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING9_ANSI) },
1961 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING9_ISO) },
1962 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING9_JIS) },
1963 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI) },
1964 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO) },
1965 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS) },
1966 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2011_ANSI) },
1967 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2011_ISO) },
1968 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2011_JIS) },
1969 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_ANSI) },
1970 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY) },
1971 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY) },
1972#endif
1973#if IS_ENABLED(CONFIG_HID_APPLEIR)
1974 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL) },
1975 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL2) },
1976 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL3) },
1977 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL4) },
1978 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL5) },
1979#endif
1980#if IS_ENABLED(CONFIG_HID_ASUS)
1981 { HID_I2C_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_I2C_KEYBOARD) },
1982 { HID_I2C_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_I2C_TOUCHPAD) },
1983 { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD1) },
1984 { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD2) },
1985 { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD3) },
1986 { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_T100_KEYBOARD) },
1987 { HID_USB_DEVICE(USB_VENDOR_ID_JESS, USB_DEVICE_ID_ASUS_MD_5112) },
1988 { HID_USB_DEVICE(USB_VENDOR_ID_TURBOX, USB_DEVICE_ID_ASUS_MD_5110) },
1989 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_T100CHI_KEYBOARD) },
1990#endif
1991#if IS_ENABLED(CONFIG_HID_AUREAL)
1992 { HID_USB_DEVICE(USB_VENDOR_ID_AUREAL, USB_DEVICE_ID_AUREAL_W01RN) },
1993#endif
1994#if IS_ENABLED(CONFIG_HID_BELKIN)
1995 { HID_USB_DEVICE(USB_VENDOR_ID_BELKIN, USB_DEVICE_ID_FLIP_KVM) },
1996 { HID_USB_DEVICE(USB_VENDOR_ID_LABTEC, USB_DEVICE_ID_LABTEC_WIRELESS_KEYBOARD) },
1997#endif
1998#if IS_ENABLED(CONFIG_HID_BETOP_FF)
1999 { HID_USB_DEVICE(USB_VENDOR_ID_BETOP_2185BFM, 0x2208) },
2000 { HID_USB_DEVICE(USB_VENDOR_ID_BETOP_2185PC, 0x5506) },
2001 { HID_USB_DEVICE(USB_VENDOR_ID_BETOP_2185V2PC, 0x1850) },
2002 { HID_USB_DEVICE(USB_VENDOR_ID_BETOP_2185V2BFM, 0x5500) },
2003#endif
2004#if IS_ENABLED(CONFIG_HID_CHERRY)
2005 { HID_USB_DEVICE(USB_VENDOR_ID_CHERRY, USB_DEVICE_ID_CHERRY_CYMOTION) },
2006 { HID_USB_DEVICE(USB_VENDOR_ID_CHERRY, USB_DEVICE_ID_CHERRY_CYMOTION_SOLAR) },
2007#endif
2008#if IS_ENABLED(CONFIG_HID_CHICONY)
2009 { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_TACTICAL_PAD) },
2010 { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_WIRELESS2) },
2011 { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_ASUS_AK1D) },
2012 { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_ACER_SWITCH12) },
2013#endif
2014#if IS_ENABLED(CONFIG_HID_CMEDIA)
2015 { HID_USB_DEVICE(USB_VENDOR_ID_CMEDIA, USB_DEVICE_ID_CM6533) },
2016#endif
2017#if IS_ENABLED(CONFIG_HID_CORSAIR)
2018 { HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K90) },
2019 { HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_SCIMITAR_PRO_RGB) },
2020#endif
2021#if IS_ENABLED(CONFIG_HID_CP2112)
2022 { HID_USB_DEVICE(USB_VENDOR_ID_CYGNAL, USB_DEVICE_ID_CYGNAL_CP2112) },
2023#endif
2024#if IS_ENABLED(CONFIG_HID_CYPRESS)
2025 { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_BARCODE_1) },
2026 { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_BARCODE_2) },
2027 { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_BARCODE_3) },
2028 { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_BARCODE_4) },
2029 { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_MOUSE) },
2030#endif
2031#if IS_ENABLED(CONFIG_HID_DRAGONRISE)
2032 { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, 0x0006) },
2033 { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, 0x0011) },
2034#endif
2035#if IS_ENABLED(CONFIG_HID_ELECOM)
2036 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_BM084) },
2037 { HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_DEFT_WIRED) },
2038 { HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_DEFT_WIRELESS) },
2039 { HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_HUGE_WIRED) },
2040 { HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_HUGE_WIRELESS) },
2041#endif
2042#if IS_ENABLED(CONFIG_HID_ELO)
2043 { HID_USB_DEVICE(USB_VENDOR_ID_ELO, 0x0009) },
2044 { HID_USB_DEVICE(USB_VENDOR_ID_ELO, 0x0030) },
2045#endif
2046#if IS_ENABLED(CONFIG_HID_EMS_FF)
2047 { HID_USB_DEVICE(USB_VENDOR_ID_EMS, USB_DEVICE_ID_EMS_TRIO_LINKER_PLUS_II) },
2048#endif
2049#if IS_ENABLED(CONFIG_HID_EZKEY)
2050 { HID_USB_DEVICE(USB_VENDOR_ID_EZKEY, USB_DEVICE_ID_BTC_8193) },
2051#endif
2052#if IS_ENABLED(CONFIG_HID_GEMBIRD)
2053 { HID_USB_DEVICE(USB_VENDOR_ID_GEMBIRD, USB_DEVICE_ID_GEMBIRD_JPD_DUALFORCE2) },
2054#endif
2055#if IS_ENABLED(CONFIG_HID_GFRM)
2056 { HID_BLUETOOTH_DEVICE(0x58, 0x2000) },
2057 { HID_BLUETOOTH_DEVICE(0x471, 0x2210) },
2058#endif
2059#if IS_ENABLED(CONFIG_HID_GREENASIA)
2060 { HID_USB_DEVICE(USB_VENDOR_ID_GREENASIA, 0x0012) },
2061#endif
2062#if IS_ENABLED(CONFIG_HID_GT683R)
2063 { HID_USB_DEVICE(USB_VENDOR_ID_MSI, USB_DEVICE_ID_MSI_GT683R_LED_PANEL) },
2064#endif
2065#if IS_ENABLED(CONFIG_HID_GYRATION)
2066 { HID_USB_DEVICE(USB_VENDOR_ID_GYRATION, USB_DEVICE_ID_GYRATION_REMOTE) },
2067 { HID_USB_DEVICE(USB_VENDOR_ID_GYRATION, USB_DEVICE_ID_GYRATION_REMOTE_2) },
2068 { HID_USB_DEVICE(USB_VENDOR_ID_GYRATION, USB_DEVICE_ID_GYRATION_REMOTE_3) },
2069#endif
2070#if IS_ENABLED(CONFIG_HID_HOLTEK)
2071 { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK, USB_DEVICE_ID_HOLTEK_ON_LINE_GRIP) },
2072 { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_KEYBOARD) },
2073 { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A04A) },
2074 { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A067) },
2075 { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A070) },
2076 { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A072) },
2077 { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A081) },
2078 { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A0C2) },
2079#endif
2080#if IS_ENABLED(CONFIG_HID_ICADE)
2081 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ION, USB_DEVICE_ID_ICADE) },
2082#endif
2083#if IS_ENABLED(CONFIG_HID_ITE)
2084 { HID_USB_DEVICE(USB_VENDOR_ID_ITE, USB_DEVICE_ID_ITE8595) },
2085#endif
2086#if IS_ENABLED(CONFIG_HID_KENSINGTON)
2087 { HID_USB_DEVICE(USB_VENDOR_ID_KENSINGTON, USB_DEVICE_ID_KS_SLIMBLADE) },
2088#endif
2089#if IS_ENABLED(CONFIG_HID_KEYTOUCH)
2090 { HID_USB_DEVICE(USB_VENDOR_ID_KEYTOUCH, USB_DEVICE_ID_KEYTOUCH_IEC) },
2091#endif
2092#if IS_ENABLED(CONFIG_HID_KYE)
2093 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_GENIUS_GILA_GAMING_MOUSE) },
2094 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_GENIUS_MANTICORE) },
2095 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_GENIUS_GX_IMPERATOR) },
2096 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_ERGO_525V) },
2097 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_I405X) },
2098 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_MOUSEPEN_I608X) },
2099 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_MOUSEPEN_I608X_V2) },
2100 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_M610X) },
2101 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_PENSKETCH_M912) },
2102#endif
2103#if IS_ENABLED(CONFIG_HID_LCPOWER)
2104 { HID_USB_DEVICE(USB_VENDOR_ID_LCPOWER, USB_DEVICE_ID_LCPOWER_LC1000 ) },
2105#endif
2106#if IS_ENABLED(CONFIG_HID_LED)
2107 { HID_USB_DEVICE(USB_VENDOR_ID_DELCOM, USB_DEVICE_ID_DELCOM_VISUAL_IND) },
2108 { HID_USB_DEVICE(USB_VENDOR_ID_DREAM_CHEEKY, USB_DEVICE_ID_DREAM_CHEEKY_WN) },
2109 { HID_USB_DEVICE(USB_VENDOR_ID_DREAM_CHEEKY, USB_DEVICE_ID_DREAM_CHEEKY_FA) },
2110 { HID_USB_DEVICE(USB_VENDOR_ID_MICROCHIP, USB_DEVICE_ID_LUXAFOR) },
2111 { HID_USB_DEVICE(USB_VENDOR_ID_RISO_KAGAKU, USB_DEVICE_ID_RI_KA_WEBMAIL) },
2112 { HID_USB_DEVICE(USB_VENDOR_ID_THINGM, USB_DEVICE_ID_BLINK1) },
2113#endif
2114#if IS_ENABLED(CONFIG_HID_LENOVO)
2115 { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_TPKBD) },
2116 { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_CUSBKBD) },
2117 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_CBTKBD) },
2118 { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_TPPRODOCK) },
2119#endif
2120#if IS_ENABLED(CONFIG_HID_LOGITECH)
2121 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_MX3000_RECEIVER) },
2122 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_S510_RECEIVER) },
2123 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_S510_RECEIVER_2) },
2124 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RECEIVER) },
2125 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_DINOVO_DESKTOP) },
2126 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_DINOVO_EDGE) },
2127 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_DINOVO_MINI) },
2128 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_ELITE_KBD) },
2129 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_CORDLESS_DESKTOP_LX500) },
2130 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_EXTREME_3D) },
2131 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_DUAL_ACTION) },
2132 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WHEEL) },
2133 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD_CORD) },
2134 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD) },
2135 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD2_2) },
2136 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_G29_WHEEL) },
2137 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WINGMAN_F3D) },
2138 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WINGMAN_FFG ) },
2139 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_FORCE3D_PRO) },
2140 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_FLIGHT_SYSTEM_G940) },
2141 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOMO_WHEEL) },
2142 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOMO_WHEEL2) },
2143 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_VIBRATION_WHEEL) },
2144 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_DFP_WHEEL) },
2145 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_DFGT_WHEEL) },
2146 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_G25_WHEEL) },
2147 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_G27_WHEEL) },
2148 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WII_WHEEL) },
2149 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD2) },
2150 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_SPACETRAVELLER) },
2151 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_SPACENAVIGATOR) },
2152#endif
2153#if IS_ENABLED(CONFIG_HID_LOGITECH_HIDPP)
2154 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_T651) },
2155 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_G920_WHEEL) },
2156#endif
2157#if IS_ENABLED(CONFIG_HID_LOGITECH_DJ)
2158 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_UNIFYING_RECEIVER) },
2159 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_UNIFYING_RECEIVER_2) },
2160#endif
2161#if IS_ENABLED(CONFIG_HID_MAGICMOUSE)
2162 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGICMOUSE) },
2163 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGICTRACKPAD) },
2164#endif
2165#if IS_ENABLED(CONFIG_HID_MAYFLASH)
2166 { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_PS3) },
2167 { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_DOLPHINBAR) },
2168 { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_GAMECUBE1) },
2169 { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_GAMECUBE2) },
2170#endif
2171#if IS_ENABLED(CONFIG_HID_MICROSOFT)
2172 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_COMFORT_MOUSE_4500) },
2173 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_COMFORT_KEYBOARD) },
2174 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_SIDEWINDER_GV) },
2175 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_NE4K) },
2176 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_NE4K_JP) },
2177 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_NE7K) },
2178 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_LK6K) },
2179 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_PRESENTER_8K_USB) },
2180 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_DIGITAL_MEDIA_3K) },
2181 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_WIRELESS_OPTICAL_DESKTOP_3_0) },
2182 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_OFFICE_KB) },
2183 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_DIGITAL_MEDIA_7K) },
2184 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_DIGITAL_MEDIA_600) },
2185 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_DIGITAL_MEDIA_3KV1) },
2186 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_POWER_COVER) },
2187 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_PRESENTER_8K_BT) },
2188#endif
2189#if IS_ENABLED(CONFIG_HID_MONTEREY)
2190 { HID_USB_DEVICE(USB_VENDOR_ID_MONTEREY, USB_DEVICE_ID_GENIUS_KB29E) },
2191#endif
2192#if IS_ENABLED(CONFIG_HID_MULTITOUCH)
2193 { HID_USB_DEVICE(USB_VENDOR_ID_LG, USB_DEVICE_ID_LG_MELFAS_MT) },
2194#endif
2195#if IS_ENABLED(CONFIG_HID_WIIMOTE)
2196 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_NINTENDO, USB_DEVICE_ID_NINTENDO_WIIMOTE) },
2197 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_NINTENDO, USB_DEVICE_ID_NINTENDO_WIIMOTE2) },
2198#endif
2199#if IS_ENABLED(CONFIG_HID_NTI)
2200 { HID_USB_DEVICE(USB_VENDOR_ID_NTI, USB_DEVICE_ID_USB_SUN) },
2201#endif
2202#if IS_ENABLED(CONFIG_HID_NTRIG)
2203 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN) },
2204 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_1) },
2205 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_2) },
2206 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_3) },
2207 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_4) },
2208 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_5) },
2209 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_6) },
2210 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_7) },
2211 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_8) },
2212 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_9) },
2213 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_10) },
2214 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_11) },
2215 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_12) },
2216 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_13) },
2217 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_14) },
2218 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_15) },
2219 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_16) },
2220 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_17) },
2221 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_18) },
2222#endif
2223#if IS_ENABLED(CONFIG_HID_ORTEK)
2224 { HID_USB_DEVICE(USB_VENDOR_ID_ORTEK, USB_DEVICE_ID_ORTEK_PKB1700) },
2225 { HID_USB_DEVICE(USB_VENDOR_ID_ORTEK, USB_DEVICE_ID_ORTEK_WKB2000) },
2226 { HID_USB_DEVICE(USB_VENDOR_ID_ORTEK, USB_DEVICE_ID_ORTEK_IHOME_IMAC_A210S) },
2227 { HID_USB_DEVICE(USB_VENDOR_ID_SKYCABLE, USB_DEVICE_ID_SKYCABLE_WIRELESS_PRESENTER) },
2228#endif
2229#if IS_ENABLED(CONFIG_HID_PANTHERLORD)
2230 { HID_USB_DEVICE(USB_VENDOR_ID_GAMERON, USB_DEVICE_ID_GAMERON_DUAL_PSX_ADAPTOR) },
2231 { HID_USB_DEVICE(USB_VENDOR_ID_GAMERON, USB_DEVICE_ID_GAMERON_DUAL_PCS_ADAPTOR) },
2232 { HID_USB_DEVICE(USB_VENDOR_ID_GREENASIA, 0x0003) },
2233 { HID_USB_DEVICE(USB_VENDOR_ID_JESS2, USB_DEVICE_ID_JESS2_COLOR_RUMBLE_PAD) },
2234#endif
2235#if IS_ENABLED(CONFIG_HID_PENMOUNT)
2236 { HID_USB_DEVICE(USB_VENDOR_ID_PENMOUNT, USB_DEVICE_ID_PENMOUNT_6000) },
2237#endif
2238#if IS_ENABLED(CONFIG_HID_PETALYNX)
2239 { HID_USB_DEVICE(USB_VENDOR_ID_PETALYNX, USB_DEVICE_ID_PETALYNX_MAXTER_REMOTE) },
2240#endif
2241#if IS_ENABLED(CONFIG_HID_PICOLCD)
2242 { HID_USB_DEVICE(USB_VENDOR_ID_MICROCHIP, USB_DEVICE_ID_PICOLCD) },
2243 { HID_USB_DEVICE(USB_VENDOR_ID_MICROCHIP, USB_DEVICE_ID_PICOLCD_BOOTLOADER) },
2244#endif
2245#if IS_ENABLED(CONFIG_HID_PLANTRONICS)
2246 { HID_USB_DEVICE(USB_VENDOR_ID_PLANTRONICS, HID_ANY_ID) },
2247#endif
2248#if IS_ENABLED(CONFIG_HID_PRIMAX)
2249 { HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_KEYBOARD) },
2250#endif
2251#if IS_ENABLED(CONFIG_HID_PRODIKEYS)
2252 { HID_USB_DEVICE(USB_VENDOR_ID_CREATIVELABS, USB_DEVICE_ID_PRODIKEYS_PCMIDI) },
2253#endif
2254#if IS_ENABLED(CONFIG_HID_RETRODE)
2255 { HID_USB_DEVICE(USB_VENDOR_ID_FUTURE_TECHNOLOGY, USB_DEVICE_ID_RETRODE2) },
2256#endif
2257#if IS_ENABLED(CONFIG_HID_RMI)
2258 { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_X1_COVER) },
2259 { HID_USB_DEVICE(USB_VENDOR_ID_RAZER, USB_DEVICE_ID_RAZER_BLADE_14) },
2260#endif
2261#if IS_ENABLED(CONFIG_HID_ROCCAT)
2262 { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_ARVO) },
2263 { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_ISKU) },
2264 { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_ISKUFX) },
2265 { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_KONE) },
2266 { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_KONEPLUS) },
2267 { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_KONEPURE) },
2268 { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_KONEPURE_OPTICAL) },
2269 { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_KONEXTD) },
2270 { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_KOVAPLUS) },
2271 { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_LUA) },
2272 { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_PYRA_WIRED) },
2273 { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_PYRA_WIRELESS) },
2274 { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_RYOS_MK) },
2275 { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_RYOS_MK_GLOW) },
2276 { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_RYOS_MK_PRO) },
2277 { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_SAVU) },
2278#endif
2279#if IS_ENABLED(CONFIG_HID_SAITEK)
2280 { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_PS1000) },
2281 { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_RAT7_OLD) },
2282 { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_RAT7) },
2283 { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_RAT9) },
2284 { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_MMO7) },
2285 { HID_USB_DEVICE(USB_VENDOR_ID_MADCATZ, USB_DEVICE_ID_MADCATZ_RAT5) },
2286 { HID_USB_DEVICE(USB_VENDOR_ID_MADCATZ, USB_DEVICE_ID_MADCATZ_RAT9) },
2287#endif
2288#if IS_ENABLED(CONFIG_HID_SAMSUNG)
2289 { HID_USB_DEVICE(USB_VENDOR_ID_SAMSUNG, USB_DEVICE_ID_SAMSUNG_IR_REMOTE) },
2290 { HID_USB_DEVICE(USB_VENDOR_ID_SAMSUNG, USB_DEVICE_ID_SAMSUNG_WIRELESS_KBD_MOUSE) },
2291#endif
2292#if IS_ENABLED(CONFIG_HID_SMARTJOYPLUS)
2293 { HID_USB_DEVICE(USB_VENDOR_ID_PLAYDOTCOM, USB_DEVICE_ID_PLAYDOTCOM_EMS_USBII) },
2294 { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_SMARTJOY_PLUS) },
2295 { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_SUPER_JOY_BOX_3) },
2296 { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_DUAL_USB_JOYPAD) },
2297 { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP_LTD, USB_DEVICE_ID_SUPER_JOY_BOX_3_PRO) },
2298 { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP_LTD, USB_DEVICE_ID_SUPER_DUAL_BOX_PRO) },
2299 { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP_LTD, USB_DEVICE_ID_SUPER_JOY_BOX_5_PRO) },
2300#endif
2301#if IS_ENABLED(CONFIG_HID_SONY)
2302 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_HARMONY_PS3) },
2303 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SMK, USB_DEVICE_ID_SMK_PS3_BDREMOTE) },
2304 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_BUZZ_CONTROLLER) },
2305 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_WIRELESS_BUZZ_CONTROLLER) },
2306 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_MOTION_CONTROLLER) },
2307 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_MOTION_CONTROLLER) },
2308 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_NAVIGATION_CONTROLLER) },
2309 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_NAVIGATION_CONTROLLER) },
2310 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_BDREMOTE) },
2311 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER) },
2312 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER) },
2313 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER) },
2314 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER) },
2315 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER_2) },
2316 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER_2) },
2317 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER_DONGLE) },
2318 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE) },
2319 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGP_MOUSE) },
2320 { HID_USB_DEVICE(USB_VENDOR_ID_SINO_LITE, USB_DEVICE_ID_SINO_LITE_CONTROLLER) },
2321#endif
2322#if IS_ENABLED(CONFIG_HID_SPEEDLINK)
2323 { HID_USB_DEVICE(USB_VENDOR_ID_X_TENSIONS, USB_DEVICE_ID_SPEEDLINK_VAD_CEZANNE) },
2324#endif
2325#if IS_ENABLED(CONFIG_HID_STEELSERIES)
2326 { HID_USB_DEVICE(USB_VENDOR_ID_STEELSERIES, USB_DEVICE_ID_STEELSERIES_SRWS1) },
2327#endif
2328#if IS_ENABLED(CONFIG_HID_SUNPLUS)
2329 { HID_USB_DEVICE(USB_VENDOR_ID_SUNPLUS, USB_DEVICE_ID_SUNPLUS_WDESKTOP) },
2330#endif
2331#if IS_ENABLED(CONFIG_HID_THRUSTMASTER)
2332 { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb300) },
2333 { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb304) },
2334 { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb323) },
2335 { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb324) },
2336 { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb605) },
2337 { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb651) },
2338 { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb653) },
2339 { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb654) },
2340 { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb65a) },
2341#endif
2342#if IS_ENABLED(CONFIG_HID_TIVO)
2343 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_TIVO, USB_DEVICE_ID_TIVO_SLIDE_BT) },
2344 { HID_USB_DEVICE(USB_VENDOR_ID_TIVO, USB_DEVICE_ID_TIVO_SLIDE) },
2345 { HID_USB_DEVICE(USB_VENDOR_ID_TIVO, USB_DEVICE_ID_TIVO_SLIDE_PRO) },
2346#endif
2347#if IS_ENABLED(CONFIG_HID_TOPSEED)
2348 { HID_USB_DEVICE(USB_VENDOR_ID_BTC, USB_DEVICE_ID_BTC_EMPREX_REMOTE) },
2349 { HID_USB_DEVICE(USB_VENDOR_ID_BTC, USB_DEVICE_ID_BTC_EMPREX_REMOTE_2) },
2350 { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_WIRELESS) },
2351 { HID_USB_DEVICE(USB_VENDOR_ID_TOPSEED, USB_DEVICE_ID_TOPSEED_CYBERLINK) },
2352 { HID_USB_DEVICE(USB_VENDOR_ID_TOPSEED2, USB_DEVICE_ID_TOPSEED2_RF_COMBO) },
2353#endif
2354#if IS_ENABLED(CONFIG_HID_TWINHAN)
2355 { HID_USB_DEVICE(USB_VENDOR_ID_TWINHAN, USB_DEVICE_ID_TWINHAN_IR_REMOTE) },
2356#endif
2357#if IS_ENABLED(CONFIG_HID_UCLOGIC)
2358 { HID_USB_DEVICE(USB_VENDOR_ID_HUION, USB_DEVICE_ID_HUION_TABLET) },
2359 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_HUION_TABLET) },
2360 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_PF1209) },
2361 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_WP4030U) },
2362 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_WP5540U) },
2363 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_WP8060U) },
2364 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_WP1062) },
2365 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_WIRELESS_TABLET_TWHL850) },
2366 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_TWHA60) },
2367 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_YIYNOVA_TABLET) },
2368 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UGEE_TABLET_81) },
2369 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UGEE_TABLET_45) },
2370 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_DRAWIMAGE_G3) },
2371 { HID_USB_DEVICE(USB_VENDOR_ID_UGEE, USB_DEVICE_ID_UGEE_TABLET_EX07S) },
2372 { HID_USB_DEVICE(USB_VENDOR_ID_UGTIZER, USB_DEVICE_ID_UGTIZER_TABLET_GP0610) },
2373#endif
2374#if IS_ENABLED(CONFIG_HID_UDRAW_PS3)
2375 { HID_USB_DEVICE(USB_VENDOR_ID_THQ, USB_DEVICE_ID_THQ_PS3_UDRAW) },
2376#endif
2377#if IS_ENABLED(CONFIG_HID_WALTOP)
2378 { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_SLIM_TABLET_5_8_INCH) },
2379 { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_SLIM_TABLET_12_1_INCH) },
2380 { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_Q_PAD) },
2381 { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_PID_0038) },
2382 { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_MEDIA_TABLET_10_6_INCH) },
2383 { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_MEDIA_TABLET_14_1_INCH) },
2384 { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_SIRIUS_BATTERY_FREE_TABLET) },
2385#endif
2386#if IS_ENABLED(CONFIG_HID_XINMO)
2387 { HID_USB_DEVICE(USB_VENDOR_ID_XIN_MO, USB_DEVICE_ID_XIN_MO_DUAL_ARCADE) },
2388 { HID_USB_DEVICE(USB_VENDOR_ID_XIN_MO, USB_DEVICE_ID_THT_2P_ARCADE) },
2389#endif
2390#if IS_ENABLED(CONFIG_HID_ZEROPLUS)
2391 { HID_USB_DEVICE(USB_VENDOR_ID_ZEROPLUS, 0x0005) },
2392 { HID_USB_DEVICE(USB_VENDOR_ID_ZEROPLUS, 0x0030) },
2393#endif
2394#if IS_ENABLED(CONFIG_HID_ZYDACRON)
2395 { HID_USB_DEVICE(USB_VENDOR_ID_ZYDACRON, USB_DEVICE_ID_ZYDACRON_REMOTE_CONTROL) },
2396#endif
2397 { }
2398};
2399
2400struct hid_dynid { 1840struct hid_dynid {
2401 struct list_head list; 1841 struct list_head list;
2402 struct hid_device_id id; 1842 struct hid_device_id id;
@@ -2463,8 +1903,8 @@ static void hid_free_dynids(struct hid_driver *hdrv)
2463 spin_unlock(&hdrv->dyn_lock); 1903 spin_unlock(&hdrv->dyn_lock);
2464} 1904}
2465 1905
2466static const struct hid_device_id *hid_match_device(struct hid_device *hdev, 1906const struct hid_device_id *hid_match_device(struct hid_device *hdev,
2467 struct hid_driver *hdrv) 1907 struct hid_driver *hdrv)
2468{ 1908{
2469 struct hid_dynid *dynid; 1909 struct hid_dynid *dynid;
2470 1910
@@ -2479,6 +1919,7 @@ static const struct hid_device_id *hid_match_device(struct hid_device *hdev,
2479 1919
2480 return hid_match_id(hdev, hdrv->id_table); 1920 return hid_match_id(hdev, hdrv->id_table);
2481} 1921}
1922EXPORT_SYMBOL_GPL(hid_match_device);
2482 1923
2483static int hid_bus_match(struct device *dev, struct device_driver *drv) 1924static int hid_bus_match(struct device *dev, struct device_driver *drv)
2484{ 1925{
@@ -2508,6 +1949,23 @@ static int hid_device_probe(struct device *dev)
2508 goto unlock; 1949 goto unlock;
2509 } 1950 }
2510 1951
1952 if (hdrv->match) {
1953 if (!hdrv->match(hdev, hid_ignore_special_drivers)) {
1954 ret = -ENODEV;
1955 goto unlock;
1956 }
1957 } else {
1958 /*
1959 * hid-generic implements .match(), so if
1960 * hid_ignore_special_drivers is set, we can safely
1961 * return.
1962 */
1963 if (hid_ignore_special_drivers) {
1964 ret = -ENODEV;
1965 goto unlock;
1966 }
1967 }
1968
2511 hdev->driver = hdrv; 1969 hdev->driver = hdrv;
2512 if (hdrv->probe) { 1970 if (hdrv->probe) {
2513 ret = hdrv->probe(hdev, id); 1971 ret = hdrv->probe(hdev, id);
@@ -2604,7 +2062,7 @@ static int hid_uevent(struct device *dev, struct kobj_uevent_env *env)
2604 return 0; 2062 return 0;
2605} 2063}
2606 2064
2607static struct bus_type hid_bus_type = { 2065struct bus_type hid_bus_type = {
2608 .name = "hid", 2066 .name = "hid",
2609 .dev_groups = hid_dev_groups, 2067 .dev_groups = hid_dev_groups,
2610 .drv_groups = hid_drv_groups, 2068 .drv_groups = hid_drv_groups,
@@ -2613,315 +2071,7 @@ static struct bus_type hid_bus_type = {
2613 .remove = hid_device_remove, 2071 .remove = hid_device_remove,
2614 .uevent = hid_uevent, 2072 .uevent = hid_uevent,
2615}; 2073};
2616 2074EXPORT_SYMBOL(hid_bus_type);
2617/* a list of devices that shouldn't be handled by HID core at all */
2618static const struct hid_device_id hid_ignore_list[] = {
2619 { HID_USB_DEVICE(USB_VENDOR_ID_ACECAD, USB_DEVICE_ID_ACECAD_FLAIR) },
2620 { HID_USB_DEVICE(USB_VENDOR_ID_ACECAD, USB_DEVICE_ID_ACECAD_302) },
2621 { HID_USB_DEVICE(USB_VENDOR_ID_ADS_TECH, USB_DEVICE_ID_ADS_TECH_RADIO_SI470X) },
2622 { HID_USB_DEVICE(USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_01) },
2623 { HID_USB_DEVICE(USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_10) },
2624 { HID_USB_DEVICE(USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_20) },
2625 { HID_USB_DEVICE(USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_21) },
2626 { HID_USB_DEVICE(USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_22) },
2627 { HID_USB_DEVICE(USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_23) },
2628 { HID_USB_DEVICE(USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_24) },
2629 { HID_USB_DEVICE(USB_VENDOR_ID_AIRCABLE, USB_DEVICE_ID_AIRCABLE1) },
2630 { HID_USB_DEVICE(USB_VENDOR_ID_ALCOR, USB_DEVICE_ID_ALCOR_USBRS232) },
2631 { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_LCM)},
2632 { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_LCM2)},
2633 { HID_USB_DEVICE(USB_VENDOR_ID_AVERMEDIA, USB_DEVICE_ID_AVER_FM_MR800) },
2634 { HID_USB_DEVICE(USB_VENDOR_ID_AXENTIA, USB_DEVICE_ID_AXENTIA_FM_RADIO) },
2635 { HID_USB_DEVICE(USB_VENDOR_ID_BERKSHIRE, USB_DEVICE_ID_BERKSHIRE_PCWD) },
2636 { HID_USB_DEVICE(USB_VENDOR_ID_CIDC, 0x0103) },
2637 { HID_USB_DEVICE(USB_VENDOR_ID_CYGNAL, USB_DEVICE_ID_CYGNAL_RADIO_SI470X) },
2638 { HID_USB_DEVICE(USB_VENDOR_ID_CYGNAL, USB_DEVICE_ID_CYGNAL_RADIO_SI4713) },
2639 { HID_USB_DEVICE(USB_VENDOR_ID_CMEDIA, USB_DEVICE_ID_CM109) },
2640 { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_HIDCOM) },
2641 { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_ULTRAMOUSE) },
2642 { HID_USB_DEVICE(USB_VENDOR_ID_DEALEXTREAME, USB_DEVICE_ID_DEALEXTREAME_RADIO_SI4701) },
2643 { HID_USB_DEVICE(USB_VENDOR_ID_DELORME, USB_DEVICE_ID_DELORME_EARTHMATE) },
2644 { HID_USB_DEVICE(USB_VENDOR_ID_DELORME, USB_DEVICE_ID_DELORME_EM_LT20) },
2645 { HID_I2C_DEVICE(USB_VENDOR_ID_ELAN, 0x0400) },
2646 { HID_I2C_DEVICE(USB_VENDOR_ID_ELAN, 0x0401) },
2647 { HID_USB_DEVICE(USB_VENDOR_ID_ESSENTIAL_REALITY, USB_DEVICE_ID_ESSENTIAL_REALITY_P5) },
2648 { HID_USB_DEVICE(USB_VENDOR_ID_ETT, USB_DEVICE_ID_TC5UH) },
2649 { HID_USB_DEVICE(USB_VENDOR_ID_ETT, USB_DEVICE_ID_TC4UM) },
2650 { HID_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH, 0x0001) },
2651 { HID_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH, 0x0002) },
2652 { HID_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH, 0x0004) },
2653 { HID_USB_DEVICE(USB_VENDOR_ID_GOTOP, USB_DEVICE_ID_SUPER_Q2) },
2654 { HID_USB_DEVICE(USB_VENDOR_ID_GOTOP, USB_DEVICE_ID_GOGOPEN) },
2655 { HID_USB_DEVICE(USB_VENDOR_ID_GOTOP, USB_DEVICE_ID_PENPOWER) },
2656 { HID_USB_DEVICE(USB_VENDOR_ID_GRETAGMACBETH, USB_DEVICE_ID_GRETAGMACBETH_HUEY) },
2657 { HID_USB_DEVICE(USB_VENDOR_ID_GRIFFIN, USB_DEVICE_ID_POWERMATE) },
2658 { HID_USB_DEVICE(USB_VENDOR_ID_GRIFFIN, USB_DEVICE_ID_SOUNDKNOB) },
2659 { HID_USB_DEVICE(USB_VENDOR_ID_GRIFFIN, USB_DEVICE_ID_RADIOSHARK) },
2660 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_90) },
2661 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_100) },
2662 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_101) },
2663 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_103) },
2664 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_104) },
2665 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_105) },
2666 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_106) },
2667 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_107) },
2668 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_108) },
2669 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_200) },
2670 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_201) },
2671 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_202) },
2672 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_203) },
2673 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_204) },
2674 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_205) },
2675 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_206) },
2676 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_207) },
2677 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_300) },
2678 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_301) },
2679 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_302) },
2680 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_303) },
2681 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_304) },
2682 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_305) },
2683 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_306) },
2684 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_307) },
2685 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_308) },
2686 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_309) },
2687 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_400) },
2688 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_401) },
2689 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_402) },
2690 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_403) },
2691 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_404) },
2692 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_405) },
2693 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_500) },
2694 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_501) },
2695 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_502) },
2696 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_503) },
2697 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_504) },
2698 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1000) },
2699 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1001) },
2700 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1002) },
2701 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1003) },
2702 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1004) },
2703 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1005) },
2704 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1006) },
2705 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1007) },
2706 { HID_USB_DEVICE(USB_VENDOR_ID_IMATION, USB_DEVICE_ID_DISC_STAKKA) },
2707 { HID_USB_DEVICE(USB_VENDOR_ID_JABRA, USB_DEVICE_ID_JABRA_SPEAK_410) },
2708 { HID_USB_DEVICE(USB_VENDOR_ID_JABRA, USB_DEVICE_ID_JABRA_SPEAK_510) },
2709 { HID_USB_DEVICE(USB_VENDOR_ID_JABRA, USB_DEVICE_ID_JABRA_GN9350E) },
2710 { HID_USB_DEVICE(USB_VENDOR_ID_KBGEAR, USB_DEVICE_ID_KBGEAR_JAMSTUDIO) },
2711 { HID_USB_DEVICE(USB_VENDOR_ID_KWORLD, USB_DEVICE_ID_KWORLD_RADIO_FM700) },
2712 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_GPEN_560) },
2713 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_KYE, 0x0058) },
2714 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_CASSY) },
2715 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_CASSY2) },
2716 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_POCKETCASSY) },
2717 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_POCKETCASSY2) },
2718 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MOBILECASSY) },
2719 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MOBILECASSY2) },
2720 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MICROCASSYVOLTAGE) },
2721 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MICROCASSYCURRENT) },
2722 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MICROCASSYTIME) },
2723 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MICROCASSYTEMPERATURE) },
2724 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MICROCASSYPH) },
2725 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_JWM) },
2726 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_DMMP) },
2727 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_UMIP) },
2728 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_UMIC) },
2729 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_UMIB) },
2730 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_XRAY) },
2731 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_XRAY2) },
2732 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_VIDEOCOM) },
2733 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MOTOR) },
2734 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_COM3LAB) },
2735 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_TELEPORT) },
2736 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_NETWORKANALYSER) },
2737 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_POWERCONTROL) },
2738 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MACHINETEST) },
2739 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MOSTANALYSER) },
2740 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MOSTANALYSER2) },
2741 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_ABSESP) },
2742 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_AUTODATABUS) },
2743 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MCT) },
2744 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_HYBRID) },
2745 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_HEATCONTROL) },
2746 { HID_USB_DEVICE(USB_VENDOR_ID_MADCATZ, USB_DEVICE_ID_MADCATZ_BEATPAD) },
2747 { HID_USB_DEVICE(USB_VENDOR_ID_MCC, USB_DEVICE_ID_MCC_PMD1024LS) },
2748 { HID_USB_DEVICE(USB_VENDOR_ID_MCC, USB_DEVICE_ID_MCC_PMD1208LS) },
2749 { HID_USB_DEVICE(USB_VENDOR_ID_MICROCHIP, USB_DEVICE_ID_PICKIT1) },
2750 { HID_USB_DEVICE(USB_VENDOR_ID_MICROCHIP, USB_DEVICE_ID_PICKIT2) },
2751 { HID_USB_DEVICE(USB_VENDOR_ID_MICROCHIP, USB_DEVICE_ID_PICK16F1454) },
2752 { HID_USB_DEVICE(USB_VENDOR_ID_MICROCHIP, USB_DEVICE_ID_PICK16F1454_V2) },
2753 { HID_USB_DEVICE(USB_VENDOR_ID_NATIONAL_SEMICONDUCTOR, USB_DEVICE_ID_N_S_HARMONY) },
2754 { HID_USB_DEVICE(USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100) },
2755 { HID_USB_DEVICE(USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 20) },
2756 { HID_USB_DEVICE(USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 30) },
2757 { HID_USB_DEVICE(USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 100) },
2758 { HID_USB_DEVICE(USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 108) },
2759 { HID_USB_DEVICE(USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 118) },
2760 { HID_USB_DEVICE(USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 200) },
2761 { HID_USB_DEVICE(USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 300) },
2762 { HID_USB_DEVICE(USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 400) },
2763 { HID_USB_DEVICE(USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 500) },
2764 { HID_USB_DEVICE(USB_VENDOR_ID_PANJIT, 0x0001) },
2765 { HID_USB_DEVICE(USB_VENDOR_ID_PANJIT, 0x0002) },
2766 { HID_USB_DEVICE(USB_VENDOR_ID_PANJIT, 0x0003) },
2767 { HID_USB_DEVICE(USB_VENDOR_ID_PANJIT, 0x0004) },
2768 { HID_USB_DEVICE(USB_VENDOR_ID_PETZL, USB_DEVICE_ID_PETZL_HEADLAMP) },
2769 { HID_USB_DEVICE(USB_VENDOR_ID_PHILIPS, USB_DEVICE_ID_PHILIPS_IEEE802154_DONGLE) },
2770 { HID_USB_DEVICE(USB_VENDOR_ID_POWERCOM, USB_DEVICE_ID_POWERCOM_UPS) },
2771#if IS_ENABLED(CONFIG_MOUSE_SYNAPTICS_USB)
2772 { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_TP) },
2773 { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_INT_TP) },
2774 { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_CPAD) },
2775 { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_STICK) },
2776 { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_WP) },
2777 { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_COMP_TP) },
2778 { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_WTP) },
2779 { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_DPAD) },
2780#endif
2781 { HID_USB_DEVICE(USB_VENDOR_ID_YEALINK, USB_DEVICE_ID_YEALINK_P1K_P4K_B2K) },
2782 { }
2783};
2784
2785/**
2786 * hid_mouse_ignore_list - mouse devices which should not be handled by the hid layer
2787 *
2788 * There are composite devices for which we want to ignore only a certain
2789 * interface. This is a list of devices for which only the mouse interface will
2790 * be ignored. This allows a dedicated driver to take care of the interface.
2791 */
2792static const struct hid_device_id hid_mouse_ignore_list[] = {
2793 /* appletouch driver */
2794 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_ANSI) },
2795 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_ISO) },
2796 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER_ANSI) },
2797 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER_ISO) },
2798 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER_JIS) },
2799 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER3_ANSI) },
2800 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER3_ISO) },
2801 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER3_JIS) },
2802 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_ANSI) },
2803 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_ISO) },
2804 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_JIS) },
2805 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_HF_ANSI) },
2806 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_HF_ISO) },
2807 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_HF_JIS) },
2808 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING_ANSI) },
2809 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING_ISO) },
2810 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING_JIS) },
2811 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING2_ANSI) },
2812 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING2_ISO) },
2813 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING2_JIS) },
2814 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_ANSI) },
2815 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_ISO) },
2816 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_JIS) },
2817 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_ANSI) },
2818 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_ISO) },
2819 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_JIS) },
2820 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_ANSI) },
2821 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_ISO) },
2822 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS) },
2823 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5_ANSI) },
2824 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5_ISO) },
2825 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5_JIS) },
2826 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5A_ANSI) },
2827 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5A_ISO) },
2828 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5A_JIS) },
2829 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6_ANSI) },
2830 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6_ISO) },
2831 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6_JIS) },
2832 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_ANSI) },
2833 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_ISO) },
2834 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_JIS) },
2835 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_ANSI) },
2836 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_ISO) },
2837 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_JIS) },
2838 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7A_ANSI) },
2839 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7A_ISO) },
2840 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7A_JIS) },
2841 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING8_ANSI) },
2842 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING8_ISO) },
2843 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING8_JIS) },
2844 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING9_ANSI) },
2845 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING9_ISO) },
2846 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING9_JIS) },
2847 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY) },
2848 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY) },
2849 { }
2850};
2851
2852bool hid_ignore(struct hid_device *hdev)
2853{
2854 if (hdev->quirks & HID_QUIRK_NO_IGNORE)
2855 return false;
2856 if (hdev->quirks & HID_QUIRK_IGNORE)
2857 return true;
2858
2859 switch (hdev->vendor) {
2860 case USB_VENDOR_ID_CODEMERCS:
2861 /* ignore all Code Mercenaries IOWarrior devices */
2862 if (hdev->product >= USB_DEVICE_ID_CODEMERCS_IOW_FIRST &&
2863 hdev->product <= USB_DEVICE_ID_CODEMERCS_IOW_LAST)
2864 return true;
2865 break;
2866 case USB_VENDOR_ID_LOGITECH:
2867 if (hdev->product >= USB_DEVICE_ID_LOGITECH_HARMONY_FIRST &&
2868 hdev->product <= USB_DEVICE_ID_LOGITECH_HARMONY_LAST)
2869 return true;
2870 /*
2871 * The Keene FM transmitter USB device has the same USB ID as
2872 * the Logitech AudioHub Speaker, but it should ignore the hid.
2873 * Check if the name is that of the Keene device.
2874 * For reference: the name of the AudioHub is
2875 * "HOLTEK AudioHub Speaker".
2876 */
2877 if (hdev->product == USB_DEVICE_ID_LOGITECH_AUDIOHUB &&
2878 !strcmp(hdev->name, "HOLTEK B-LINK USB Audio "))
2879 return true;
2880 break;
2881 case USB_VENDOR_ID_SOUNDGRAPH:
2882 if (hdev->product >= USB_DEVICE_ID_SOUNDGRAPH_IMON_FIRST &&
2883 hdev->product <= USB_DEVICE_ID_SOUNDGRAPH_IMON_LAST)
2884 return true;
2885 break;
2886 case USB_VENDOR_ID_HANWANG:
2887 if (hdev->product >= USB_DEVICE_ID_HANWANG_TABLET_FIRST &&
2888 hdev->product <= USB_DEVICE_ID_HANWANG_TABLET_LAST)
2889 return true;
2890 break;
2891 case USB_VENDOR_ID_JESS:
2892 if (hdev->product == USB_DEVICE_ID_JESS_YUREX &&
2893 hdev->type == HID_TYPE_USBNONE)
2894 return true;
2895 break;
2896 case USB_VENDOR_ID_VELLEMAN:
2897 /* These are not HID devices. They are handled by comedi. */
2898 if ((hdev->product >= USB_DEVICE_ID_VELLEMAN_K8055_FIRST &&
2899 hdev->product <= USB_DEVICE_ID_VELLEMAN_K8055_LAST) ||
2900 (hdev->product >= USB_DEVICE_ID_VELLEMAN_K8061_FIRST &&
2901 hdev->product <= USB_DEVICE_ID_VELLEMAN_K8061_LAST))
2902 return true;
2903 break;
2904 case USB_VENDOR_ID_ATMEL_V_USB:
2905 /* Masterkit MA901 usb radio based on Atmel tiny85 chip and
2906 * it has the same USB ID as many Atmel V-USB devices. This
2907 * usb radio is handled by radio-ma901.c driver so we want
2908 * ignore the hid. Check the name, bus, product and ignore
2909 * if we have MA901 usb radio.
2910 */
2911 if (hdev->product == USB_DEVICE_ID_ATMEL_V_USB &&
2912 hdev->bus == BUS_USB &&
2913 strncmp(hdev->name, "www.masterkit.ru MA901", 22) == 0)
2914 return true;
2915 break;
2916 }
2917
2918 if (hdev->type == HID_TYPE_USBMOUSE &&
2919 hid_match_id(hdev, hid_mouse_ignore_list))
2920 return true;
2921
2922 return !!hid_match_id(hdev, hid_ignore_list);
2923}
2924EXPORT_SYMBOL_GPL(hid_ignore);
2925 2075
2926int hid_add_device(struct hid_device *hdev) 2076int hid_add_device(struct hid_device *hdev)
2927{ 2077{
@@ -2931,6 +2081,8 @@ int hid_add_device(struct hid_device *hdev)
2931 if (WARN_ON(hdev->status & HID_STAT_ADDED)) 2081 if (WARN_ON(hdev->status & HID_STAT_ADDED))
2932 return -EBUSY; 2082 return -EBUSY;
2933 2083
2084 hdev->quirks = hid_lookup_quirk(hdev);
2085
2934 /* we need to kill them here, otherwise they will stay allocated to 2086 /* we need to kill them here, otherwise they will stay allocated to
2935 * wait for coming driver */ 2087 * wait for coming driver */
2936 if (hid_ignore(hdev)) 2088 if (hid_ignore(hdev))
@@ -2960,7 +2112,7 @@ int hid_add_device(struct hid_device *hdev)
2960 if (hid_ignore_special_drivers) { 2112 if (hid_ignore_special_drivers) {
2961 hdev->group = HID_GROUP_GENERIC; 2113 hdev->group = HID_GROUP_GENERIC;
2962 } else if (!hdev->group && 2114 } else if (!hdev->group &&
2963 !hid_match_id(hdev, hid_have_special_driver)) { 2115 !(hdev->quirks & HID_QUIRK_HAVE_SPECIAL_DRIVER)) {
2964 ret = hid_scan_report(hdev); 2116 ret = hid_scan_report(hdev);
2965 if (ret) 2117 if (ret)
2966 hid_warn(hdev, "bad device descriptor (%d)\n", ret); 2118 hid_warn(hdev, "bad device descriptor (%d)\n", ret);
@@ -3044,6 +2196,29 @@ void hid_destroy_device(struct hid_device *hdev)
3044} 2196}
3045EXPORT_SYMBOL_GPL(hid_destroy_device); 2197EXPORT_SYMBOL_GPL(hid_destroy_device);
3046 2198
2199
2200static int __bus_add_driver(struct device_driver *drv, void *data)
2201{
2202 struct hid_driver *added_hdrv = data;
2203 struct hid_driver *hdrv = to_hid_driver(drv);
2204
2205 if (hdrv->bus_add_driver)
2206 hdrv->bus_add_driver(added_hdrv);
2207
2208 return 0;
2209}
2210
2211static int __bus_removed_driver(struct device_driver *drv, void *data)
2212{
2213 struct hid_driver *removed_hdrv = data;
2214 struct hid_driver *hdrv = to_hid_driver(drv);
2215
2216 if (hdrv->bus_removed_driver)
2217 hdrv->bus_removed_driver(removed_hdrv);
2218
2219 return 0;
2220}
2221
3047int __hid_register_driver(struct hid_driver *hdrv, struct module *owner, 2222int __hid_register_driver(struct hid_driver *hdrv, struct module *owner,
3048 const char *mod_name) 2223 const char *mod_name)
3049{ 2224{
@@ -3055,6 +2230,8 @@ int __hid_register_driver(struct hid_driver *hdrv, struct module *owner,
3055 INIT_LIST_HEAD(&hdrv->dyn_list); 2230 INIT_LIST_HEAD(&hdrv->dyn_list);
3056 spin_lock_init(&hdrv->dyn_lock); 2231 spin_lock_init(&hdrv->dyn_lock);
3057 2232
2233 bus_for_each_drv(&hid_bus_type, NULL, hdrv, __bus_add_driver);
2234
3058 return driver_register(&hdrv->driver); 2235 return driver_register(&hdrv->driver);
3059} 2236}
3060EXPORT_SYMBOL_GPL(__hid_register_driver); 2237EXPORT_SYMBOL_GPL(__hid_register_driver);
@@ -3063,6 +2240,8 @@ void hid_unregister_driver(struct hid_driver *hdrv)
3063{ 2240{
3064 driver_unregister(&hdrv->driver); 2241 driver_unregister(&hdrv->driver);
3065 hid_free_dynids(hdrv); 2242 hid_free_dynids(hdrv);
2243
2244 bus_for_each_drv(&hid_bus_type, NULL, hdrv, __bus_removed_driver);
3066} 2245}
3067EXPORT_SYMBOL_GPL(hid_unregister_driver); 2246EXPORT_SYMBOL_GPL(hid_unregister_driver);
3068 2247
@@ -3117,6 +2296,7 @@ static void __exit hid_exit(void)
3117 hid_debug_exit(); 2296 hid_debug_exit();
3118 hidraw_exit(); 2297 hidraw_exit();
3119 bus_unregister(&hid_bus_type); 2298 bus_unregister(&hid_bus_type);
2299 hid_quirks_exit(HID_BUS_ANY);
3120} 2300}
3121 2301
3122module_init(hid_init); 2302module_init(hid_init);
diff --git a/drivers/hid/hid-elecom.c b/drivers/hid/hid-elecom.c
index 54aeea57d209..1a1ecc491c02 100644
--- a/drivers/hid/hid-elecom.c
+++ b/drivers/hid/hid-elecom.c
@@ -1,9 +1,15 @@
1/* 1/*
2 * HID driver for ELECOM devices. 2 * HID driver for ELECOM devices:
3 * - BM084 Bluetooth Mouse
4 * - EX-G Trackball (Wired and wireless)
5 * - DEFT Trackball (Wired and wireless)
6 * - HUGE Trackball (Wired and wireless)
7 *
3 * Copyright (c) 2010 Richard Nauber <Richard.Nauber@gmail.com> 8 * Copyright (c) 2010 Richard Nauber <Richard.Nauber@gmail.com>
4 * Copyright (c) 2016 Yuxuan Shui <yshuiv7@gmail.com> 9 * Copyright (c) 2016 Yuxuan Shui <yshuiv7@gmail.com>
5 * Copyright (c) 2017 Diego Elio Pettenò <flameeyes@flameeyes.eu> 10 * Copyright (c) 2017 Diego Elio Pettenò <flameeyes@flameeyes.eu>
6 * Copyright (c) 2017 Alex Manoussakis <amanou@gnu.org> 11 * Copyright (c) 2017 Alex Manoussakis <amanou@gnu.org>
12 * Copyright (c) 2017 Tomasz Kramkowski <tk@the-tk.com>
7 */ 13 */
8 14
9/* 15/*
@@ -19,6 +25,34 @@
19 25
20#include "hid-ids.h" 26#include "hid-ids.h"
21 27
28/*
29 * Certain ELECOM mice misreport their button count meaning that they only work
30 * correctly with the ELECOM mouse assistant software which is unavailable for
31 * Linux. A four extra INPUT reports and a FEATURE report are described by the
32 * report descriptor but it does not appear that these enable software to
33 * control what the extra buttons map to. The only simple and straightforward
34 * solution seems to involve fixing up the report descriptor.
35 *
36 * Report descriptor format:
37 * Positions 13, 15, 21 and 31 store the button bit count, button usage minimum,
38 * button usage maximum and padding bit count respectively.
39 */
40#define MOUSE_BUTTONS_MAX 8
41static void mouse_button_fixup(struct hid_device *hdev,
42 __u8 *rdesc, unsigned int rsize,
43 int nbuttons)
44{
45 if (rsize < 32 || rdesc[12] != 0x95 ||
46 rdesc[14] != 0x75 || rdesc[15] != 0x01 ||
47 rdesc[20] != 0x29 || rdesc[30] != 0x75)
48 return;
49 hid_info(hdev, "Fixing up Elecom mouse button count\n");
50 nbuttons = clamp(nbuttons, 0, MOUSE_BUTTONS_MAX);
51 rdesc[13] = nbuttons;
52 rdesc[21] = nbuttons;
53 rdesc[31] = MOUSE_BUTTONS_MAX - nbuttons;
54}
55
22static __u8 *elecom_report_fixup(struct hid_device *hdev, __u8 *rdesc, 56static __u8 *elecom_report_fixup(struct hid_device *hdev, __u8 *rdesc,
23 unsigned int *rsize) 57 unsigned int *rsize)
24{ 58{
@@ -31,45 +65,15 @@ static __u8 *elecom_report_fixup(struct hid_device *hdev, __u8 *rdesc,
31 rdesc[47] = 0x00; 65 rdesc[47] = 0x00;
32 } 66 }
33 break; 67 break;
68 case USB_DEVICE_ID_ELECOM_EX_G_WIRED:
69 case USB_DEVICE_ID_ELECOM_EX_G_WIRELESS:
70 mouse_button_fixup(hdev, rdesc, *rsize, 6);
71 break;
34 case USB_DEVICE_ID_ELECOM_DEFT_WIRED: 72 case USB_DEVICE_ID_ELECOM_DEFT_WIRED:
35 case USB_DEVICE_ID_ELECOM_DEFT_WIRELESS: 73 case USB_DEVICE_ID_ELECOM_DEFT_WIRELESS:
36 case USB_DEVICE_ID_ELECOM_HUGE_WIRED: 74 case USB_DEVICE_ID_ELECOM_HUGE_WIRED:
37 case USB_DEVICE_ID_ELECOM_HUGE_WIRELESS: 75 case USB_DEVICE_ID_ELECOM_HUGE_WIRELESS:
38 /* The DEFT/HUGE trackball has eight buttons, but its descriptor 76 mouse_button_fixup(hdev, rdesc, *rsize, 8);
39 * only reports five, disabling the three Fn buttons on the top
40 * of the mouse.
41 *
42 * Apply the following diff to the descriptor:
43 *
44 * Collection (Physical), Collection (Physical),
45 * Report ID (1), Report ID (1),
46 * Report Count (5), -> Report Count (8),
47 * Report Size (1), Report Size (1),
48 * Usage Page (Button), Usage Page (Button),
49 * Usage Minimum (01h), Usage Minimum (01h),
50 * Usage Maximum (05h), -> Usage Maximum (08h),
51 * Logical Minimum (0), Logical Minimum (0),
52 * Logical Maximum (1), Logical Maximum (1),
53 * Input (Variable), Input (Variable),
54 * Report Count (1), -> Report Count (0),
55 * Report Size (3), Report Size (3),
56 * Input (Constant), Input (Constant),
57 * Report Size (16), Report Size (16),
58 * Report Count (2), Report Count (2),
59 * Usage Page (Desktop), Usage Page (Desktop),
60 * Usage (X), Usage (X),
61 * Usage (Y), Usage (Y),
62 * Logical Minimum (-32768), Logical Minimum (-32768),
63 * Logical Maximum (32767), Logical Maximum (32767),
64 * Input (Variable, Relative), Input (Variable, Relative),
65 * End Collection, End Collection,
66 */
67 if (*rsize == 213 && rdesc[13] == 5 && rdesc[21] == 5) {
68 hid_info(hdev, "Fixing up Elecom DEFT/HUGE Fn buttons\n");
69 rdesc[13] = 8; /* Button/Variable Report Count */
70 rdesc[21] = 8; /* Button/Variable Usage Maximum */
71 rdesc[29] = 0; /* Button/Constant Report Count */
72 }
73 break; 77 break;
74 } 78 }
75 return rdesc; 79 return rdesc;
@@ -77,6 +81,8 @@ static __u8 *elecom_report_fixup(struct hid_device *hdev, __u8 *rdesc,
77 81
78static const struct hid_device_id elecom_devices[] = { 82static const struct hid_device_id elecom_devices[] = {
79 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_BM084) }, 83 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_BM084) },
84 { HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_EX_G_WIRED) },
85 { HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_EX_G_WIRELESS) },
80 { HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_DEFT_WIRED) }, 86 { HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_DEFT_WIRED) },
81 { HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_DEFT_WIRELESS) }, 87 { HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_DEFT_WIRELESS) },
82 { HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_HUGE_WIRED) }, 88 { HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_HUGE_WIRED) },
diff --git a/drivers/hid/hid-elo.c b/drivers/hid/hid-elo.c
index 0cd4f7216239..5eea6fe0d7bd 100644
--- a/drivers/hid/hid-elo.c
+++ b/drivers/hid/hid-elo.c
@@ -42,6 +42,12 @@ static int elo_input_configured(struct hid_device *hdev,
42{ 42{
43 struct input_dev *input = hidinput->input; 43 struct input_dev *input = hidinput->input;
44 44
45 /*
46 * ELO devices have one Button usage in GenDesk field, which makes
47 * hid-input map it to BTN_LEFT; that confuses userspace, which then
48 * considers the device to be a mouse/touchpad instead of touchscreen.
49 */
50 clear_bit(BTN_LEFT, input->keybit);
45 set_bit(BTN_TOUCH, input->keybit); 51 set_bit(BTN_TOUCH, input->keybit);
46 set_bit(ABS_PRESSURE, input->absbit); 52 set_bit(ABS_PRESSURE, input->absbit);
47 input_set_abs_params(input, ABS_PRESSURE, 0, 256, 0, 0); 53 input_set_abs_params(input, ABS_PRESSURE, 0, 256, 0, 0);
diff --git a/drivers/hid/hid-generic.c b/drivers/hid/hid-generic.c
index e288a4a06fe8..3c0a1bf433d7 100644
--- a/drivers/hid/hid-generic.c
+++ b/drivers/hid/hid-generic.c
@@ -24,8 +24,71 @@
24 24
25#include <linux/hid.h> 25#include <linux/hid.h>
26 26
27static struct hid_driver hid_generic;
28
29static int __unmap_hid_generic(struct device *dev, void *data)
30{
31 struct hid_driver *hdrv = data;
32 struct hid_device *hdev = to_hid_device(dev);
33
34 /* only unbind matching devices already bound to hid-generic */
35 if (hdev->driver != &hid_generic ||
36 hid_match_device(hdev, hdrv) == NULL)
37 return 0;
38
39 if (dev->parent) /* Needed for USB */
40 device_lock(dev->parent);
41 device_release_driver(dev);
42 if (dev->parent)
43 device_unlock(dev->parent);
44
45 return 0;
46}
47
48static void hid_generic_add_driver(struct hid_driver *hdrv)
49{
50 bus_for_each_dev(&hid_bus_type, NULL, hdrv, __unmap_hid_generic);
51}
52
53static void hid_generic_removed_driver(struct hid_driver *hdrv)
54{
55 int ret;
56
57 ret = driver_attach(&hid_generic.driver);
58}
59
60static int __check_hid_generic(struct device_driver *drv, void *data)
61{
62 struct hid_driver *hdrv = to_hid_driver(drv);
63 struct hid_device *hdev = data;
64
65 if (hdrv == &hid_generic)
66 return 0;
67
68 return hid_match_device(hdev, hdrv) != NULL;
69}
70
71static bool hid_generic_match(struct hid_device *hdev,
72 bool ignore_special_driver)
73{
74 if (ignore_special_driver)
75 return true;
76
77 if (hdev->quirks & HID_QUIRK_HAVE_SPECIAL_DRIVER)
78 return false;
79
80 /*
81 * If any other driver wants the device, leave the device to this other
82 * driver.
83 */
84 if (bus_for_each_drv(&hid_bus_type, NULL, hdev, __check_hid_generic))
85 return false;
86
87 return true;
88}
89
27static const struct hid_device_id hid_table[] = { 90static const struct hid_device_id hid_table[] = {
28 { HID_DEVICE(HID_BUS_ANY, HID_GROUP_GENERIC, HID_ANY_ID, HID_ANY_ID) }, 91 { HID_DEVICE(HID_BUS_ANY, HID_GROUP_ANY, HID_ANY_ID, HID_ANY_ID) },
29 { } 92 { }
30}; 93};
31MODULE_DEVICE_TABLE(hid, hid_table); 94MODULE_DEVICE_TABLE(hid, hid_table);
@@ -33,6 +96,9 @@ MODULE_DEVICE_TABLE(hid, hid_table);
33static struct hid_driver hid_generic = { 96static struct hid_driver hid_generic = {
34 .name = "hid-generic", 97 .name = "hid-generic",
35 .id_table = hid_table, 98 .id_table = hid_table,
99 .match = hid_generic_match,
100 .bus_add_driver = hid_generic_add_driver,
101 .bus_removed_driver = hid_generic_removed_driver,
36}; 102};
37module_hid_driver(hid_generic); 103module_hid_driver(hid_generic);
38 104
diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
index 5da3d6256d25..43ddcdfbd0da 100644
--- a/drivers/hid/hid-ids.h
+++ b/drivers/hid/hid-ids.h
@@ -178,7 +178,8 @@
178#define USB_VENDOR_ID_ASUSTEK 0x0b05 178#define USB_VENDOR_ID_ASUSTEK 0x0b05
179#define USB_DEVICE_ID_ASUSTEK_LCM 0x1726 179#define USB_DEVICE_ID_ASUSTEK_LCM 0x1726
180#define USB_DEVICE_ID_ASUSTEK_LCM2 0x175b 180#define USB_DEVICE_ID_ASUSTEK_LCM2 0x175b
181#define USB_DEVICE_ID_ASUSTEK_T100_KEYBOARD 0x17e0 181#define USB_DEVICE_ID_ASUSTEK_T100TA_KEYBOARD 0x17e0
182#define USB_DEVICE_ID_ASUSTEK_T100TAF_KEYBOARD 0x1807
182#define USB_DEVICE_ID_ASUSTEK_T100CHI_KEYBOARD 0x8502 183#define USB_DEVICE_ID_ASUSTEK_T100CHI_KEYBOARD 0x8502
183#define USB_DEVICE_ID_ASUSTEK_T304_KEYBOARD 0x184a 184#define USB_DEVICE_ID_ASUSTEK_T304_KEYBOARD 0x184a
184#define USB_DEVICE_ID_ASUSTEK_I2C_KEYBOARD 0x8585 185#define USB_DEVICE_ID_ASUSTEK_I2C_KEYBOARD 0x8585
@@ -370,6 +371,8 @@
370 371
371#define USB_VENDOR_ID_ELECOM 0x056e 372#define USB_VENDOR_ID_ELECOM 0x056e
372#define USB_DEVICE_ID_ELECOM_BM084 0x0061 373#define USB_DEVICE_ID_ELECOM_BM084 0x0061
374#define USB_DEVICE_ID_ELECOM_EX_G_WIRED 0x00fb
375#define USB_DEVICE_ID_ELECOM_EX_G_WIRELESS 0x00fc
373#define USB_DEVICE_ID_ELECOM_DEFT_WIRED 0x00fe 376#define USB_DEVICE_ID_ELECOM_DEFT_WIRED 0x00fe
374#define USB_DEVICE_ID_ELECOM_DEFT_WIRELESS 0x00ff 377#define USB_DEVICE_ID_ELECOM_DEFT_WIRELESS 0x00ff
375#define USB_DEVICE_ID_ELECOM_HUGE_WIRED 0x010c 378#define USB_DEVICE_ID_ELECOM_HUGE_WIRED 0x010c
@@ -535,6 +538,7 @@
535#define USB_PRODUCT_ID_HP_LOGITECH_OEM_USB_OPTICAL_MOUSE_0A4A 0x0a4a 538#define USB_PRODUCT_ID_HP_LOGITECH_OEM_USB_OPTICAL_MOUSE_0A4A 0x0a4a
536#define USB_PRODUCT_ID_HP_LOGITECH_OEM_USB_OPTICAL_MOUSE_0B4A 0x0b4a 539#define USB_PRODUCT_ID_HP_LOGITECH_OEM_USB_OPTICAL_MOUSE_0B4A 0x0b4a
537#define USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTICAL_MOUSE 0x134a 540#define USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTICAL_MOUSE 0x134a
541#define USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTICAL_MOUSE_094A 0x094a
538 542
539#define USB_VENDOR_ID_HUION 0x256c 543#define USB_VENDOR_ID_HUION 0x256c
540#define USB_DEVICE_ID_HUION_TABLET 0x006e 544#define USB_DEVICE_ID_HUION_TABLET 0x006e
@@ -1156,6 +1160,7 @@
1156#define USB_VENDOR_ID_PRIMAX 0x0461 1160#define USB_VENDOR_ID_PRIMAX 0x0461
1157#define USB_DEVICE_ID_PRIMAX_MOUSE_4D22 0x4d22 1161#define USB_DEVICE_ID_PRIMAX_MOUSE_4D22 0x4d22
1158#define USB_DEVICE_ID_PRIMAX_KEYBOARD 0x4e05 1162#define USB_DEVICE_ID_PRIMAX_KEYBOARD 0x4e05
1163#define USB_DEVICE_ID_PRIMAX_REZEL 0x4e72
1159 1164
1160 1165
1161#define USB_VENDOR_ID_RISO_KAGAKU 0x1294 /* Riso Kagaku Corp. */ 1166#define USB_VENDOR_ID_RISO_KAGAKU 0x1294 /* Riso Kagaku Corp. */
diff --git a/drivers/hid/hid-jabra.c b/drivers/hid/hid-jabra.c
new file mode 100644
index 000000000000..1f52daf14426
--- /dev/null
+++ b/drivers/hid/hid-jabra.c
@@ -0,0 +1,58 @@
1/*
2 * Jabra USB HID Driver
3 *
4 * Copyright (c) 2017 Niels Skou Olsen <nolsen@jabra.com>
5 */
6
7/*
8 * This program is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License as published by the Free
10 * Software Foundation; either version 2 of the License, or (at your option)
11 * any later version.
12 */
13
14#include <linux/hid.h>
15#include <linux/module.h>
16
17#include "hid-ids.h"
18
19#define HID_UP_VENDOR_DEFINED_MIN 0xff000000
20#define HID_UP_VENDOR_DEFINED_MAX 0xffff0000
21
22static int jabra_input_mapping(struct hid_device *hdev,
23 struct hid_input *hi,
24 struct hid_field *field,
25 struct hid_usage *usage,
26 unsigned long **bit, int *max)
27{
28 int is_vendor_defined =
29 ((usage->hid & HID_USAGE_PAGE) >= HID_UP_VENDOR_DEFINED_MIN &&
30 (usage->hid & HID_USAGE_PAGE) <= HID_UP_VENDOR_DEFINED_MAX);
31
32 dbg_hid("hid=0x%08x appl=0x%08x coll_idx=0x%02x usage_idx=0x%02x: %s\n",
33 usage->hid,
34 field->application,
35 usage->collection_index,
36 usage->usage_index,
37 is_vendor_defined ? "ignored" : "defaulted");
38
39 /* Ignore vendor defined usages, default map standard usages */
40 return is_vendor_defined ? -1 : 0;
41}
42
43static const struct hid_device_id jabra_devices[] = {
44 { HID_USB_DEVICE(USB_VENDOR_ID_JABRA, HID_ANY_ID) },
45 { }
46};
47MODULE_DEVICE_TABLE(hid, jabra_devices);
48
49static struct hid_driver jabra_driver = {
50 .name = "jabra",
51 .id_table = jabra_devices,
52 .input_mapping = jabra_input_mapping,
53};
54module_hid_driver(jabra_driver);
55
56MODULE_AUTHOR("Niels Skou Olsen <nolsen@jabra.com>");
57MODULE_DESCRIPTION("Jabra USB HID Driver");
58MODULE_LICENSE("GPL");
diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
index 65ea23be9677..3b4739bde05d 100644
--- a/drivers/hid/hid-multitouch.c
+++ b/drivers/hid/hid-multitouch.c
@@ -85,11 +85,12 @@ MODULE_LICENSE("GPL");
85#define MT_IO_FLAGS_PENDING_SLOTS 2 85#define MT_IO_FLAGS_PENDING_SLOTS 2
86 86
87struct mt_slot { 87struct mt_slot {
88 __s32 x, y, cx, cy, p, w, h; 88 __s32 x, y, cx, cy, p, w, h, a;
89 __s32 contactid; /* the device ContactID assigned to this slot */ 89 __s32 contactid; /* the device ContactID assigned to this slot */
90 bool touch_state; /* is the touch valid? */ 90 bool touch_state; /* is the touch valid? */
91 bool inrange_state; /* is the finger in proximity of the sensor? */ 91 bool inrange_state; /* is the finger in proximity of the sensor? */
92 bool confidence_state; /* is the touch made by a finger? */ 92 bool confidence_state; /* is the touch made by a finger? */
93 bool has_azimuth; /* the contact reports azimuth */
93}; 94};
94 95
95struct mt_class { 96struct mt_class {
@@ -119,6 +120,10 @@ struct mt_device {
119 unsigned long mt_io_flags; /* mt flags (MT_IO_FLAGS_*) */ 120 unsigned long mt_io_flags; /* mt flags (MT_IO_FLAGS_*) */
120 int cc_index; /* contact count field index in the report */ 121 int cc_index; /* contact count field index in the report */
121 int cc_value_index; /* contact count value index in the field */ 122 int cc_value_index; /* contact count value index in the field */
123 int scantime_index; /* scantime field index in the report */
124 int scantime_val_index; /* scantime value index in the field */
125 int prev_scantime; /* scantime reported in the previous packet */
126 int left_button_state; /* left button state */
122 unsigned last_slot_field; /* the last field of a slot */ 127 unsigned last_slot_field; /* the last field of a slot */
123 unsigned mt_report_id; /* the report ID of the multitouch device */ 128 unsigned mt_report_id; /* the report ID of the multitouch device */
124 unsigned long initial_quirks; /* initial quirks state */ 129 unsigned long initial_quirks; /* initial quirks state */
@@ -582,8 +587,15 @@ static int mt_touch_input_mapping(struct hid_device *hdev, struct hid_input *hi,
582 if (!(cls->quirks & MT_QUIRK_NO_AREA)) { 587 if (!(cls->quirks & MT_QUIRK_NO_AREA)) {
583 set_abs(hi->input, ABS_MT_TOUCH_MINOR, field, 588 set_abs(hi->input, ABS_MT_TOUCH_MINOR, field,
584 cls->sn_height); 589 cls->sn_height);
585 input_set_abs_params(hi->input, 590
586 ABS_MT_ORIENTATION, 0, 1, 0, 0); 591 /*
592 * Only set ABS_MT_ORIENTATION if it is not
593 * already set by the HID_DG_AZIMUTH usage.
594 */
595 if (!test_bit(ABS_MT_ORIENTATION,
596 hi->input->absbit))
597 input_set_abs_params(hi->input,
598 ABS_MT_ORIENTATION, 0, 1, 0, 0);
587 } 599 }
588 mt_store_field(usage, td, hi); 600 mt_store_field(usage, td, hi);
589 return 1; 601 return 1;
@@ -599,6 +611,12 @@ static int mt_touch_input_mapping(struct hid_device *hdev, struct hid_input *hi,
599 EV_MSC, MSC_TIMESTAMP); 611 EV_MSC, MSC_TIMESTAMP);
600 input_set_capability(hi->input, EV_MSC, MSC_TIMESTAMP); 612 input_set_capability(hi->input, EV_MSC, MSC_TIMESTAMP);
601 mt_store_field(usage, td, hi); 613 mt_store_field(usage, td, hi);
614 /* Ignore if indexes are out of bounds. */
615 if (field->index >= field->report->maxfield ||
616 usage->usage_index >= field->report_count)
617 return 1;
618 td->scantime_index = field->index;
619 td->scantime_val_index = usage->usage_index;
602 return 1; 620 return 1;
603 case HID_DG_CONTACTCOUNT: 621 case HID_DG_CONTACTCOUNT:
604 /* Ignore if indexes are out of bounds. */ 622 /* Ignore if indexes are out of bounds. */
@@ -608,6 +626,21 @@ static int mt_touch_input_mapping(struct hid_device *hdev, struct hid_input *hi,
608 td->cc_index = field->index; 626 td->cc_index = field->index;
609 td->cc_value_index = usage->usage_index; 627 td->cc_value_index = usage->usage_index;
610 return 1; 628 return 1;
629 case HID_DG_AZIMUTH:
630 hid_map_usage(hi, usage, bit, max,
631 EV_ABS, ABS_MT_ORIENTATION);
632 /*
633 * Azimuth has the range of [0, MAX) representing a full
634 * revolution. Set ABS_MT_ORIENTATION to a quarter of
635 * MAX according the definition of ABS_MT_ORIENTATION
636 */
637 input_set_abs_params(hi->input, ABS_MT_ORIENTATION,
638 -field->logical_maximum / 4,
639 field->logical_maximum / 4,
640 cls->sn_move ?
641 field->logical_maximum / cls->sn_move : 0, 0);
642 mt_store_field(usage, td, hi);
643 return 1;
611 case HID_DG_CONTACTMAX: 644 case HID_DG_CONTACTMAX:
612 /* we don't set td->last_slot_field as contactcount and 645 /* we don't set td->last_slot_field as contactcount and
613 * contact max are global to the report */ 646 * contact max are global to the report */
@@ -700,6 +733,10 @@ static void mt_complete_slot(struct mt_device *td, struct input_dev *input)
700 int wide = (s->w > s->h); 733 int wide = (s->w > s->h);
701 int major = max(s->w, s->h); 734 int major = max(s->w, s->h);
702 int minor = min(s->w, s->h); 735 int minor = min(s->w, s->h);
736 int orientation = wide;
737
738 if (s->has_azimuth)
739 orientation = s->a;
703 740
704 /* 741 /*
705 * divided by two to match visual scale of touch 742 * divided by two to match visual scale of touch
@@ -716,7 +753,8 @@ static void mt_complete_slot(struct mt_device *td, struct input_dev *input)
716 input_event(input, EV_ABS, ABS_MT_TOOL_Y, s->cy); 753 input_event(input, EV_ABS, ABS_MT_TOOL_Y, s->cy);
717 input_event(input, EV_ABS, ABS_MT_DISTANCE, 754 input_event(input, EV_ABS, ABS_MT_DISTANCE,
718 !s->touch_state); 755 !s->touch_state);
719 input_event(input, EV_ABS, ABS_MT_ORIENTATION, wide); 756 input_event(input, EV_ABS, ABS_MT_ORIENTATION,
757 orientation);
720 input_event(input, EV_ABS, ABS_MT_PRESSURE, s->p); 758 input_event(input, EV_ABS, ABS_MT_PRESSURE, s->p);
721 input_event(input, EV_ABS, ABS_MT_TOUCH_MAJOR, major); 759 input_event(input, EV_ABS, ABS_MT_TOUCH_MAJOR, major);
722 input_event(input, EV_ABS, ABS_MT_TOUCH_MINOR, minor); 760 input_event(input, EV_ABS, ABS_MT_TOUCH_MINOR, minor);
@@ -734,10 +772,16 @@ static void mt_complete_slot(struct mt_device *td, struct input_dev *input)
734 */ 772 */
735static void mt_sync_frame(struct mt_device *td, struct input_dev *input) 773static void mt_sync_frame(struct mt_device *td, struct input_dev *input)
736{ 774{
775 __s32 cls = td->mtclass.name;
776
777 if (cls == MT_CLS_WIN_8 || cls == MT_CLS_WIN_8_DUAL)
778 input_event(input, EV_KEY, BTN_LEFT, td->left_button_state);
779
737 input_mt_sync_frame(input); 780 input_mt_sync_frame(input);
738 input_event(input, EV_MSC, MSC_TIMESTAMP, td->timestamp); 781 input_event(input, EV_MSC, MSC_TIMESTAMP, td->timestamp);
739 input_sync(input); 782 input_sync(input);
740 td->num_received = 0; 783 td->num_received = 0;
784 td->left_button_state = 0;
741 if (test_bit(MT_IO_FLAGS_ACTIVE_SLOTS, &td->mt_io_flags)) 785 if (test_bit(MT_IO_FLAGS_ACTIVE_SLOTS, &td->mt_io_flags))
742 set_bit(MT_IO_FLAGS_PENDING_SLOTS, &td->mt_io_flags); 786 set_bit(MT_IO_FLAGS_PENDING_SLOTS, &td->mt_io_flags);
743 else 787 else
@@ -778,9 +822,11 @@ static int mt_touch_event(struct hid_device *hid, struct hid_field *field,
778} 822}
779 823
780static void mt_process_mt_event(struct hid_device *hid, struct hid_field *field, 824static void mt_process_mt_event(struct hid_device *hid, struct hid_field *field,
781 struct hid_usage *usage, __s32 value) 825 struct hid_usage *usage, __s32 value,
826 bool first_packet)
782{ 827{
783 struct mt_device *td = hid_get_drvdata(hid); 828 struct mt_device *td = hid_get_drvdata(hid);
829 __s32 cls = td->mtclass.name;
784 __s32 quirks = td->mtclass.quirks; 830 __s32 quirks = td->mtclass.quirks;
785 struct input_dev *input = field->hidinput->input; 831 struct input_dev *input = field->hidinput->input;
786 832
@@ -832,11 +878,49 @@ static void mt_process_mt_event(struct hid_device *hid, struct hid_field *field,
832 break; 878 break;
833 case HID_DG_CONTACTCOUNT: 879 case HID_DG_CONTACTCOUNT:
834 break; 880 break;
881 case HID_DG_AZIMUTH:
882 /*
883 * Azimuth is counter-clockwise and ranges from [0, MAX)
884 * (a full revolution). Convert it to clockwise ranging
885 * [-MAX/2, MAX/2].
886 *
887 * Note that ABS_MT_ORIENTATION require us to report
888 * the limit of [-MAX/4, MAX/4], but the value can go
889 * out of range to [-MAX/2, MAX/2] to report an upside
890 * down ellipsis.
891 */
892 if (value > field->logical_maximum / 2)
893 value -= field->logical_maximum;
894 td->curdata.a = -value;
895 td->curdata.has_azimuth = true;
896 break;
835 case HID_DG_TOUCH: 897 case HID_DG_TOUCH:
836 /* do nothing */ 898 /* do nothing */
837 break; 899 break;
838 900
839 default: 901 default:
902 /*
903 * For Win8 PTP touchpads we should only look at
904 * non finger/touch events in the first_packet of
905 * a (possible) multi-packet frame.
906 */
907 if ((cls == MT_CLS_WIN_8 || cls == MT_CLS_WIN_8_DUAL) &&
908 !first_packet)
909 return;
910
911 /*
912 * For Win8 PTP touchpads we map both the clickpad click
913 * and any "external" left buttons to BTN_LEFT if a
914 * device claims to have both we need to report 1 for
915 * BTN_LEFT if either is pressed, so we or all values
916 * together and report the result in mt_sync_frame().
917 */
918 if ((cls == MT_CLS_WIN_8 || cls == MT_CLS_WIN_8_DUAL) &&
919 usage->type == EV_KEY && usage->code == BTN_LEFT) {
920 td->left_button_state |= value;
921 return;
922 }
923
840 if (usage->type) 924 if (usage->type)
841 input_event(input, usage->type, usage->code, 925 input_event(input, usage->type, usage->code,
842 value); 926 value);
@@ -855,9 +939,11 @@ static void mt_process_mt_event(struct hid_device *hid, struct hid_field *field,
855static void mt_touch_report(struct hid_device *hid, struct hid_report *report) 939static void mt_touch_report(struct hid_device *hid, struct hid_report *report)
856{ 940{
857 struct mt_device *td = hid_get_drvdata(hid); 941 struct mt_device *td = hid_get_drvdata(hid);
942 __s32 cls = td->mtclass.name;
858 struct hid_field *field; 943 struct hid_field *field;
944 bool first_packet;
859 unsigned count; 945 unsigned count;
860 int r, n; 946 int r, n, scantime = 0;
861 947
862 /* sticky fingers release in progress, abort */ 948 /* sticky fingers release in progress, abort */
863 if (test_and_set_bit(MT_IO_FLAGS_RUNNING, &td->mt_io_flags)) 949 if (test_and_set_bit(MT_IO_FLAGS_RUNNING, &td->mt_io_flags))
@@ -867,13 +953,31 @@ static void mt_touch_report(struct hid_device *hid, struct hid_report *report)
867 * Includes multi-packet support where subsequent 953 * Includes multi-packet support where subsequent
868 * packets are sent with zero contactcount. 954 * packets are sent with zero contactcount.
869 */ 955 */
956 if (td->scantime_index >= 0) {
957 field = report->field[td->scantime_index];
958 scantime = field->value[td->scantime_val_index];
959 }
870 if (td->cc_index >= 0) { 960 if (td->cc_index >= 0) {
871 struct hid_field *field = report->field[td->cc_index]; 961 struct hid_field *field = report->field[td->cc_index];
872 int value = field->value[td->cc_value_index]; 962 int value = field->value[td->cc_value_index];
873 if (value) 963
964 /*
965 * For Win8 PTPs the first packet (td->num_received == 0) may
966 * have a contactcount of 0 if there only is a button event.
967 * We double check that this is not a continuation packet
968 * of a possible multi-packet frame be checking that the
969 * timestamp has changed.
970 */
971 if ((cls == MT_CLS_WIN_8 || cls == MT_CLS_WIN_8_DUAL) &&
972 td->num_received == 0 && td->prev_scantime != scantime)
973 td->num_expected = value;
974 /* A non 0 contact count always indicates a first packet */
975 else if (value)
874 td->num_expected = value; 976 td->num_expected = value;
875 } 977 }
978 td->prev_scantime = scantime;
876 979
980 first_packet = td->num_received == 0;
877 for (r = 0; r < report->maxfield; r++) { 981 for (r = 0; r < report->maxfield; r++) {
878 field = report->field[r]; 982 field = report->field[r];
879 count = field->report_count; 983 count = field->report_count;
@@ -883,7 +987,7 @@ static void mt_touch_report(struct hid_device *hid, struct hid_report *report)
883 987
884 for (n = 0; n < count; n++) 988 for (n = 0; n < count; n++)
885 mt_process_mt_event(hid, field, &field->usage[n], 989 mt_process_mt_event(hid, field, &field->usage[n],
886 field->value[n]); 990 field->value[n], first_packet);
887 } 991 }
888 992
889 if (td->num_received >= td->num_expected) 993 if (td->num_received >= td->num_expected)
@@ -1329,6 +1433,7 @@ static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id)
1329 td->maxcontact_report_id = -1; 1433 td->maxcontact_report_id = -1;
1330 td->inputmode_value = MT_INPUTMODE_TOUCHSCREEN; 1434 td->inputmode_value = MT_INPUTMODE_TOUCHSCREEN;
1331 td->cc_index = -1; 1435 td->cc_index = -1;
1436 td->scantime_index = -1;
1332 td->mt_report_id = -1; 1437 td->mt_report_id = -1;
1333 hid_set_drvdata(hdev, td); 1438 hid_set_drvdata(hdev, td);
1334 1439
@@ -1649,14 +1754,6 @@ static const struct hid_device_id mt_devices[] = {
1649 MT_USB_DEVICE(USB_VENDOR_ID_TURBOX, 1754 MT_USB_DEVICE(USB_VENDOR_ID_TURBOX,
1650 USB_DEVICE_ID_TURBOX_TOUCHSCREEN_MOSART) }, 1755 USB_DEVICE_ID_TURBOX_TOUCHSCREEN_MOSART) },
1651 1756
1652 /* Panasonic panels */
1653 { .driver_data = MT_CLS_PANASONIC,
1654 MT_USB_DEVICE(USB_VENDOR_ID_PANASONIC,
1655 USB_DEVICE_ID_PANABOARD_UBT780) },
1656 { .driver_data = MT_CLS_PANASONIC,
1657 MT_USB_DEVICE(USB_VENDOR_ID_PANASONIC,
1658 USB_DEVICE_ID_PANABOARD_UBT880) },
1659
1660 /* Novatek Panel */ 1757 /* Novatek Panel */
1661 { .driver_data = MT_CLS_NSMU, 1758 { .driver_data = MT_CLS_NSMU,
1662 MT_USB_DEVICE(USB_VENDOR_ID_NOVATEK, 1759 MT_USB_DEVICE(USB_VENDOR_ID_NOVATEK,
@@ -1667,6 +1764,14 @@ static const struct hid_device_id mt_devices[] = {
1667 HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8, 1764 HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8,
1668 USB_VENDOR_ID_NTRIG, 0x1b05) }, 1765 USB_VENDOR_ID_NTRIG, 0x1b05) },
1669 1766
1767 /* Panasonic panels */
1768 { .driver_data = MT_CLS_PANASONIC,
1769 MT_USB_DEVICE(USB_VENDOR_ID_PANASONIC,
1770 USB_DEVICE_ID_PANABOARD_UBT780) },
1771 { .driver_data = MT_CLS_PANASONIC,
1772 MT_USB_DEVICE(USB_VENDOR_ID_PANASONIC,
1773 USB_DEVICE_ID_PANABOARD_UBT880) },
1774
1670 /* PixArt optical touch screen */ 1775 /* PixArt optical touch screen */
1671 { .driver_data = MT_CLS_INRANGE_CONTACTNUMBER, 1776 { .driver_data = MT_CLS_INRANGE_CONTACTNUMBER,
1672 MT_USB_DEVICE(USB_VENDOR_ID_PIXART, 1777 MT_USB_DEVICE(USB_VENDOR_ID_PIXART,
diff --git a/drivers/hid/hid-quirks.c b/drivers/hid/hid-quirks.c
new file mode 100644
index 000000000000..5f6035a5ce36
--- /dev/null
+++ b/drivers/hid/hid-quirks.c
@@ -0,0 +1,1276 @@
1/*
2 * HID quirks support for Linux
3 *
4 * Copyright (c) 1999 Andreas Gal
5 * Copyright (c) 2000-2005 Vojtech Pavlik <vojtech@suse.cz>
6 * Copyright (c) 2005 Michael Haboustak <mike-@cinci.rr.com> for Concept2, Inc
7 * Copyright (c) 2006-2007 Jiri Kosina
8 * Copyright (c) 2007 Paul Walmsley
9 */
10
11/*
12 * This program is free software; you can redistribute it and/or modify it
13 * under the terms of the GNU General Public License as published by the Free
14 * Software Foundation; either version 2 of the License, or (at your option)
15 * any later version.
16 */
17
18#include <linux/hid.h>
19#include <linux/export.h>
20#include <linux/slab.h>
21#include <linux/mutex.h>
22
23#include "hid-ids.h"
24
25/*
26 * Alphabetically sorted by vendor then product.
27 */
28
29static const struct hid_device_id hid_quirks[] = {
30 { HID_USB_DEVICE(USB_VENDOR_ID_AASHIMA, USB_DEVICE_ID_AASHIMA_GAMEPAD), HID_QUIRK_BADPAD },
31 { HID_USB_DEVICE(USB_VENDOR_ID_AASHIMA, USB_DEVICE_ID_AASHIMA_PREDATOR), HID_QUIRK_BADPAD },
32 { HID_USB_DEVICE(USB_VENDOR_ID_AFATECH, USB_DEVICE_ID_AFATECH_AF9016), HID_QUIRK_FULLSPEED_INTERVAL },
33 { HID_USB_DEVICE(USB_VENDOR_ID_AIREN, USB_DEVICE_ID_AIREN_SLIMPLUS), HID_QUIRK_NOGET },
34 { HID_USB_DEVICE(USB_VENDOR_ID_AKAI_09E8, USB_DEVICE_ID_AKAI_09E8_MIDIMIX), HID_QUIRK_NO_INIT_REPORTS },
35 { HID_USB_DEVICE(USB_VENDOR_ID_AKAI, USB_DEVICE_ID_AKAI_MPKMINI2), HID_QUIRK_NO_INIT_REPORTS },
36 { HID_USB_DEVICE(USB_VENDOR_ID_ALPS, USB_DEVICE_ID_IBM_GAMEPAD), HID_QUIRK_BADPAD },
37 { HID_USB_DEVICE(USB_VENDOR_ID_AMI, USB_DEVICE_ID_AMI_VIRT_KEYBOARD_AND_MOUSE), HID_QUIRK_ALWAYS_POLL },
38 { HID_USB_DEVICE(USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_2PORTKVM), HID_QUIRK_NOGET },
39 { HID_USB_DEVICE(USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_4PORTKVMC), HID_QUIRK_NOGET },
40 { HID_USB_DEVICE(USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_4PORTKVM), HID_QUIRK_NOGET },
41 { HID_USB_DEVICE(USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_CS124U), HID_QUIRK_NOGET },
42 { HID_USB_DEVICE(USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_CS1758), HID_QUIRK_NOGET },
43 { HID_USB_DEVICE(USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_CS682), HID_QUIRK_NOGET },
44 { HID_USB_DEVICE(USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_CS692), HID_QUIRK_NOGET },
45 { HID_USB_DEVICE(USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_UC100KM), HID_QUIRK_NOGET },
46 { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_MULTI_TOUCH), HID_QUIRK_MULTI_INPUT },
47 { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_PIXART_USB_OPTICAL_MOUSE), HID_QUIRK_ALWAYS_POLL },
48 { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_WIRELESS), HID_QUIRK_MULTI_INPUT },
49 { HID_USB_DEVICE(USB_VENDOR_ID_CHIC, USB_DEVICE_ID_CHIC_GAMEPAD), HID_QUIRK_BADPAD },
50 { HID_USB_DEVICE(USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_3AXIS_5BUTTON_STICK), HID_QUIRK_NOGET },
51 { HID_USB_DEVICE(USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_AXIS_295), HID_QUIRK_NOGET },
52 { HID_USB_DEVICE(USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_COMBATSTICK), HID_QUIRK_NOGET },
53 { HID_USB_DEVICE(USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_FIGHTERSTICK), HID_QUIRK_NOGET },
54 { HID_USB_DEVICE(USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_FLIGHT_SIM_ECLIPSE_YOKE), HID_QUIRK_NOGET },
55 { HID_USB_DEVICE(USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_FLIGHT_SIM_YOKE), HID_QUIRK_NOGET },
56 { HID_USB_DEVICE(USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_PRO_PEDALS), HID_QUIRK_NOGET },
57 { HID_USB_DEVICE(USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_PRO_THROTTLE), HID_QUIRK_NOGET },
58 { HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K65RGB), HID_QUIRK_NO_INIT_REPORTS },
59 { HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K65RGB_RAPIDFIRE), HID_QUIRK_NO_INIT_REPORTS | HID_QUIRK_ALWAYS_POLL },
60 { HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K70RGB), HID_QUIRK_NO_INIT_REPORTS },
61 { HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K70RGB_RAPIDFIRE), HID_QUIRK_NO_INIT_REPORTS | HID_QUIRK_ALWAYS_POLL },
62 { HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K70R), HID_QUIRK_NO_INIT_REPORTS },
63 { HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K95RGB), HID_QUIRK_NO_INIT_REPORTS | HID_QUIRK_ALWAYS_POLL },
64 { HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_M65RGB), HID_QUIRK_NO_INIT_REPORTS },
65 { HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_SCIMITAR_PRO_RGB), HID_QUIRK_NO_INIT_REPORTS | HID_QUIRK_ALWAYS_POLL },
66 { HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_STRAFE), HID_QUIRK_NO_INIT_REPORTS | HID_QUIRK_ALWAYS_POLL },
67 { HID_USB_DEVICE(USB_VENDOR_ID_CREATIVELABS, USB_DEVICE_ID_CREATIVE_SB_OMNI_SURROUND_51), HID_QUIRK_NOGET },
68 { HID_USB_DEVICE(USB_VENDOR_ID_DELL, USB_DEVICE_ID_DELL_PIXART_USB_OPTICAL_MOUSE), HID_QUIRK_ALWAYS_POLL },
69 { HID_USB_DEVICE(USB_VENDOR_ID_DMI, USB_DEVICE_ID_DMI_ENC), HID_QUIRK_NOGET },
70 { HID_USB_DEVICE(USB_VENDOR_ID_DRACAL_RAPHNET, USB_DEVICE_ID_RAPHNET_2NES2SNES), HID_QUIRK_MULTI_INPUT },
71 { HID_USB_DEVICE(USB_VENDOR_ID_DRACAL_RAPHNET, USB_DEVICE_ID_RAPHNET_4NES4SNES), HID_QUIRK_MULTI_INPUT },
72 { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_DOLPHINBAR), HID_QUIRK_MULTI_INPUT },
73 { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_GAMECUBE1), HID_QUIRK_MULTI_INPUT },
74 { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_PS3), HID_QUIRK_MULTI_INPUT },
75 { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_WIIU), HID_QUIRK_MULTI_INPUT },
76 { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_EGALAX_TOUCHCONTROLLER), HID_QUIRK_MULTI_INPUT | HID_QUIRK_NOGET },
77 { HID_USB_DEVICE(USB_VENDOR_ID_ELAN, HID_ANY_ID), HID_QUIRK_ALWAYS_POLL },
78 { HID_USB_DEVICE(USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_TS2700), HID_QUIRK_NOGET },
79 { HID_USB_DEVICE(USB_VENDOR_ID_EMS, USB_DEVICE_ID_EMS_TRIO_LINKER_PLUS_II), HID_QUIRK_MULTI_INPUT },
80 { HID_USB_DEVICE(USB_VENDOR_ID_ETURBOTOUCH, USB_DEVICE_ID_ETURBOTOUCH_2968), HID_QUIRK_MULTI_INPUT },
81 { HID_USB_DEVICE(USB_VENDOR_ID_ETURBOTOUCH, USB_DEVICE_ID_ETURBOTOUCH), HID_QUIRK_MULTI_INPUT },
82 { HID_USB_DEVICE(USB_VENDOR_ID_FORMOSA, USB_DEVICE_ID_FORMOSA_IR_RECEIVER), HID_QUIRK_NO_INIT_REPORTS },
83 { HID_USB_DEVICE(USB_VENDOR_ID_FREESCALE, USB_DEVICE_ID_FREESCALE_MX28), HID_QUIRK_NOGET },
84 { HID_USB_DEVICE(USB_VENDOR_ID_FUTABA, USB_DEVICE_ID_LED_DISPLAY), HID_QUIRK_NO_INIT_REPORTS },
85 { HID_USB_DEVICE(USB_VENDOR_ID_GREENASIA, USB_DEVICE_ID_GREENASIA_DUAL_USB_JOYPAD), HID_QUIRK_MULTI_INPUT },
86 { HID_USB_DEVICE(USB_VENDOR_ID_HAPP, USB_DEVICE_ID_UGCI_DRIVING), HID_QUIRK_BADPAD | HID_QUIRK_MULTI_INPUT },
87 { HID_USB_DEVICE(USB_VENDOR_ID_HAPP, USB_DEVICE_ID_UGCI_FIGHTING), HID_QUIRK_BADPAD | HID_QUIRK_MULTI_INPUT },
88 { HID_USB_DEVICE(USB_VENDOR_ID_HAPP, USB_DEVICE_ID_UGCI_FLYING), HID_QUIRK_BADPAD | HID_QUIRK_MULTI_INPUT },
89 { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_KEYBOARD_A096), HID_QUIRK_NO_INIT_REPORTS },
90 { HID_USB_DEVICE(USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_LOGITECH_OEM_USB_OPTICAL_MOUSE_0A4A), HID_QUIRK_ALWAYS_POLL },
91 { HID_USB_DEVICE(USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_LOGITECH_OEM_USB_OPTICAL_MOUSE_0B4A), HID_QUIRK_ALWAYS_POLL },
92 { HID_USB_DEVICE(USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTICAL_MOUSE), HID_QUIRK_ALWAYS_POLL },
93 { HID_USB_DEVICE(USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTICAL_MOUSE_094A), HID_QUIRK_ALWAYS_POLL },
94 { HID_USB_DEVICE(USB_VENDOR_ID_IDEACOM, USB_DEVICE_ID_IDEACOM_IDC6680), HID_QUIRK_MULTI_INPUT },
95 { HID_USB_DEVICE(USB_VENDOR_ID_INNOMEDIA, USB_DEVICE_ID_INNEX_GENESIS_ATARI), HID_QUIRK_MULTI_INPUT },
96 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_M610X), HID_QUIRK_MULTI_INPUT },
97 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_MOUSEPEN_I608X), HID_QUIRK_MULTI_INPUT },
98 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_MOUSEPEN_I608X_V2), HID_QUIRK_MULTI_INPUT },
99 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_PENSKETCH_M912), HID_QUIRK_MULTI_INPUT },
100 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_PIXART_USB_OPTICAL_MOUSE_ID2), HID_QUIRK_ALWAYS_POLL },
101 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_C007), HID_QUIRK_ALWAYS_POLL },
102 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_C077), HID_QUIRK_ALWAYS_POLL },
103 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_KEYBOARD_G710_PLUS), HID_QUIRK_NOGET },
104 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOUSE_C01A), HID_QUIRK_ALWAYS_POLL },
105 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOUSE_C05A), HID_QUIRK_ALWAYS_POLL },
106 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOUSE_C06A), HID_QUIRK_ALWAYS_POLL },
107 { HID_USB_DEVICE(USB_VENDOR_ID_MCS, USB_DEVICE_ID_MCS_GAMEPADBLOCK), HID_QUIRK_MULTI_INPUT },
108 { HID_USB_DEVICE(USB_VENDOR_ID_MGE, USB_DEVICE_ID_MGE_UPS), HID_QUIRK_NOGET },
109 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_POWER_COVER), HID_QUIRK_NO_INIT_REPORTS },
110 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_SURFACE_PRO_2), HID_QUIRK_NO_INIT_REPORTS },
111 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TOUCH_COVER_2), HID_QUIRK_NO_INIT_REPORTS },
112 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_2), HID_QUIRK_NO_INIT_REPORTS },
113 { HID_USB_DEVICE(USB_VENDOR_ID_MOJO, USB_DEVICE_ID_RETRO_ADAPTER), HID_QUIRK_MULTI_INPUT },
114 { HID_USB_DEVICE(USB_VENDOR_ID_MSI, USB_DEVICE_ID_MSI_GT683R_LED_PANEL), HID_QUIRK_NO_INIT_REPORTS },
115 { HID_USB_DEVICE(USB_VENDOR_ID_MULTIPLE_1781, USB_DEVICE_ID_RAPHNET_4NES4SNES_OLD), HID_QUIRK_MULTI_INPUT },
116 { HID_USB_DEVICE(USB_VENDOR_ID_NATSU, USB_DEVICE_ID_NATSU_GAMEPAD), HID_QUIRK_BADPAD },
117 { HID_USB_DEVICE(USB_VENDOR_ID_NEC, USB_DEVICE_ID_NEC_USB_GAME_PAD), HID_QUIRK_BADPAD },
118 { HID_USB_DEVICE(USB_VENDOR_ID_NEXIO, USB_DEVICE_ID_NEXIO_MULTITOUCH_PTI0750), HID_QUIRK_NO_INIT_REPORTS },
119 { HID_USB_DEVICE(USB_VENDOR_ID_NEXTWINDOW, USB_DEVICE_ID_NEXTWINDOW_TOUCHSCREEN), HID_QUIRK_MULTI_INPUT},
120 { HID_USB_DEVICE(USB_VENDOR_ID_NOVATEK, USB_DEVICE_ID_NOVATEK_MOUSE), HID_QUIRK_NO_INIT_REPORTS },
121 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_DUOSENSE), HID_QUIRK_NO_INIT_REPORTS },
122 { HID_USB_DEVICE(USB_VENDOR_ID_PANTHERLORD, USB_DEVICE_ID_PANTHERLORD_TWIN_USB_JOYSTICK), HID_QUIRK_MULTI_INPUT | HID_QUIRK_SKIP_OUTPUT_REPORTS },
123 { HID_USB_DEVICE(USB_VENDOR_ID_PENMOUNT, USB_DEVICE_ID_PENMOUNT_1610), HID_QUIRK_NOGET },
124 { HID_USB_DEVICE(USB_VENDOR_ID_PENMOUNT, USB_DEVICE_ID_PENMOUNT_1640), HID_QUIRK_NOGET },
125 { HID_USB_DEVICE(USB_VENDOR_ID_PI_ENGINEERING, USB_DEVICE_ID_PI_ENGINEERING_VEC_USB_FOOTPEDAL), HID_QUIRK_HIDINPUT_FORCE },
126 { HID_USB_DEVICE(USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN1), HID_QUIRK_NO_INIT_REPORTS },
127 { HID_USB_DEVICE(USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN2), HID_QUIRK_NO_INIT_REPORTS },
128 { HID_USB_DEVICE(USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN), HID_QUIRK_NO_INIT_REPORTS },
129 { HID_USB_DEVICE(USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_USB_OPTICAL_MOUSE), HID_QUIRK_ALWAYS_POLL },
130 { HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_MOUSE_4D22), HID_QUIRK_ALWAYS_POLL },
131 { HID_USB_DEVICE(USB_VENDOR_ID_PRODIGE, USB_DEVICE_ID_PRODIGE_CORDLESS), HID_QUIRK_NOGET },
132 { HID_USB_DEVICE(USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3001), HID_QUIRK_NOGET },
133 { HID_USB_DEVICE(USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3003), HID_QUIRK_NOGET },
134 { HID_USB_DEVICE(USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3008), HID_QUIRK_NOGET },
135 { HID_USB_DEVICE(USB_VENDOR_ID_REALTEK, USB_DEVICE_ID_REALTEK_READER), HID_QUIRK_NO_INIT_REPORTS },
136 { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_RUMBLEPAD), HID_QUIRK_BADPAD },
137 { HID_USB_DEVICE(USB_VENDOR_ID_SEMICO, USB_DEVICE_ID_SEMICO_USB_KEYKOARD2), HID_QUIRK_NO_INIT_REPORTS },
138 { HID_USB_DEVICE(USB_VENDOR_ID_SEMICO, USB_DEVICE_ID_SEMICO_USB_KEYKOARD), HID_QUIRK_NO_INIT_REPORTS },
139 { HID_USB_DEVICE(USB_VENDOR_ID_SENNHEISER, USB_DEVICE_ID_SENNHEISER_BTD500USB), HID_QUIRK_NOGET },
140 { HID_USB_DEVICE(USB_VENDOR_ID_SIGMA_MICRO, USB_DEVICE_ID_SIGMA_MICRO_KEYBOARD), HID_QUIRK_NO_INIT_REPORTS },
141 { HID_USB_DEVICE(USB_VENDOR_ID_SIGMATEL, USB_DEVICE_ID_SIGMATEL_STMP3780), HID_QUIRK_NOGET },
142 { HID_USB_DEVICE(USB_VENDOR_ID_SIS_TOUCH, USB_DEVICE_ID_SIS1030_TOUCH), HID_QUIRK_NOGET },
143 { HID_USB_DEVICE(USB_VENDOR_ID_SIS_TOUCH, USB_DEVICE_ID_SIS817_TOUCH), HID_QUIRK_NOGET },
144 { HID_USB_DEVICE(USB_VENDOR_ID_SIS_TOUCH, USB_DEVICE_ID_SIS9200_TOUCH), HID_QUIRK_NOGET },
145 { HID_USB_DEVICE(USB_VENDOR_ID_SIS_TOUCH, USB_DEVICE_ID_SIS_TS), HID_QUIRK_NO_INIT_REPORTS },
146 { HID_USB_DEVICE(USB_VENDOR_ID_SUN, USB_DEVICE_ID_RARITAN_KVM_DONGLE), HID_QUIRK_NOGET },
147 { HID_USB_DEVICE(USB_VENDOR_ID_SYMBOL, USB_DEVICE_ID_SYMBOL_SCANNER_1), HID_QUIRK_NOGET },
148 { HID_USB_DEVICE(USB_VENDOR_ID_SYMBOL, USB_DEVICE_ID_SYMBOL_SCANNER_2), HID_QUIRK_NOGET },
149 { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_HD), HID_QUIRK_NO_INIT_REPORTS },
150 { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_LTS1), HID_QUIRK_NO_INIT_REPORTS },
151 { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_LTS2), HID_QUIRK_NO_INIT_REPORTS },
152 { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_QUAD_HD), HID_QUIRK_NO_INIT_REPORTS },
153 { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_TP_V103), HID_QUIRK_NO_INIT_REPORTS },
154 { HID_USB_DEVICE(USB_VENDOR_ID_TOPMAX, USB_DEVICE_ID_TOPMAX_COBRAPAD), HID_QUIRK_BADPAD },
155 { HID_USB_DEVICE(USB_VENDOR_ID_TOUCHPACK, USB_DEVICE_ID_TOUCHPACK_RTS), HID_QUIRK_MULTI_INPUT },
156 { HID_USB_DEVICE(USB_VENDOR_ID_TPV, USB_DEVICE_ID_TPV_OPTICAL_TOUCHSCREEN_8882), HID_QUIRK_NOGET },
157 { HID_USB_DEVICE(USB_VENDOR_ID_TPV, USB_DEVICE_ID_TPV_OPTICAL_TOUCHSCREEN_8883), HID_QUIRK_NOGET },
158 { HID_USB_DEVICE(USB_VENDOR_ID_TURBOX, USB_DEVICE_ID_TURBOX_KEYBOARD), HID_QUIRK_NOGET },
159 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_KNA5), HID_QUIRK_MULTI_INPUT },
160 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_TWA60), HID_QUIRK_MULTI_INPUT },
161 { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_MEDIA_TABLET_10_6_INCH), HID_QUIRK_MULTI_INPUT },
162 { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_MEDIA_TABLET_14_1_INCH), HID_QUIRK_MULTI_INPUT },
163 { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_SIRIUS_BATTERY_FREE_TABLET), HID_QUIRK_MULTI_INPUT },
164 { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP_LTD2, USB_DEVICE_ID_SMARTJOY_DUAL_PLUS), HID_QUIRK_NOGET | HID_QUIRK_MULTI_INPUT },
165 { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_QUAD_USB_JOYPAD), HID_QUIRK_NOGET | HID_QUIRK_MULTI_INPUT },
166
167 { 0 }
168};
169
170/*
171 * A list of devices for which there is a specialized driver on HID bus.
172 *
173 * Please note that for multitouch devices (driven by hid-multitouch driver),
174 * there is a proper autodetection and autoloading in place (based on presence
175 * of HID_DG_CONTACTID), so those devices don't need to be added to this list,
176 * as we are doing the right thing in hid_scan_usage().
177 *
178 * Autodetection for (USB) HID sensor hubs exists too. If a collection of type
179 * physical is found inside a usage page of type sensor, hid-sensor-hub will be
180 * used as a driver. See hid_scan_report().
181 */
182static const struct hid_device_id hid_have_special_driver[] = {
183#if IS_ENABLED(CONFIG_HID_A4TECH)
184 { HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_WCP32PU) },
185 { HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_X5_005D) },
186 { HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_RP_649) },
187#endif
188#if IS_ENABLED(CONFIG_HID_ACCUTOUCH)
189 { HID_USB_DEVICE(USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_ACCUTOUCH_2216) },
190#endif
191#if IS_ENABLED(CONFIG_HID_ACRUX)
192 { HID_USB_DEVICE(USB_VENDOR_ID_ACRUX, 0x0802) },
193 { HID_USB_DEVICE(USB_VENDOR_ID_ACRUX, 0xf705) },
194#endif
195#if IS_ENABLED(CONFIG_HID_ALPS)
196 { HID_DEVICE(HID_BUS_ANY, HID_GROUP_ANY, USB_VENDOR_ID_ALPS_JP, HID_DEVICE_ID_ALPS_U1_DUAL) },
197#endif
198#if IS_ENABLED(CONFIG_HID_APPLE)
199 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MIGHTYMOUSE) },
200 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_ANSI) },
201 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_ISO) },
202 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER_ANSI) },
203 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER_ISO) },
204 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER_JIS) },
205 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER3_ANSI) },
206 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER3_ISO) },
207 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER3_JIS) },
208 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_ANSI) },
209 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_ISO) },
210 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_JIS) },
211 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_MINI_ANSI) },
212 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_MINI_ISO) },
213 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_MINI_JIS) },
214 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_ANSI) },
215 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_ISO) },
216 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_JIS) },
217 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_HF_ANSI) },
218 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_HF_ISO) },
219 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_HF_JIS) },
220 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_ANSI) },
221 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_ISO) },
222 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_JIS) },
223 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING_ANSI) },
224 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING_ISO) },
225 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING_JIS) },
226 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING2_ANSI) },
227 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING2_ISO) },
228 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING2_JIS) },
229 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_ANSI) },
230 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_ISO) },
231 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_JIS) },
232 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_ANSI) },
233 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_ISO) },
234 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_JIS) },
235 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_ANSI) },
236 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_ISO) },
237 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS) },
238 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5_ANSI) },
239 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5_ISO) },
240 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5_JIS) },
241 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5A_ANSI) },
242 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5A_ISO) },
243 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5A_JIS) },
244 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_REVB_ANSI) },
245 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_REVB_ISO) },
246 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_REVB_JIS) },
247 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6_ANSI) },
248 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6_ISO) },
249 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6_JIS) },
250 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_ANSI) },
251 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_ISO) },
252 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_JIS) },
253 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_ANSI) },
254 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_ISO) },
255 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_JIS) },
256 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7A_ANSI) },
257 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7A_ISO) },
258 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7A_JIS) },
259 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING8_ANSI) },
260 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING8_ISO) },
261 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING8_JIS) },
262 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING9_ANSI) },
263 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING9_ISO) },
264 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING9_JIS) },
265 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI) },
266 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO) },
267 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS) },
268 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2011_ANSI) },
269 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2011_ISO) },
270 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2011_JIS) },
271 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_ANSI) },
272 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY) },
273 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY) },
274#endif
275#if IS_ENABLED(CONFIG_HID_APPLEIR)
276 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL) },
277 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL2) },
278 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL3) },
279 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL4) },
280 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL5) },
281#endif
282#if IS_ENABLED(CONFIG_HID_ASUS)
283 { HID_I2C_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_I2C_KEYBOARD) },
284 { HID_I2C_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_I2C_TOUCHPAD) },
285 { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD1) },
286 { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD2) },
287 { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD3) },
288 { HID_USB_DEVICE(USB_VENDOR_ID_JESS, USB_DEVICE_ID_ASUS_MD_5112) },
289 { HID_USB_DEVICE(USB_VENDOR_ID_TURBOX, USB_DEVICE_ID_ASUS_MD_5110) },
290 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_T100CHI_KEYBOARD) },
291#endif
292#if IS_ENABLED(CONFIG_HID_AUREAL)
293 { HID_USB_DEVICE(USB_VENDOR_ID_AUREAL, USB_DEVICE_ID_AUREAL_W01RN) },
294#endif
295#if IS_ENABLED(CONFIG_HID_BELKIN)
296 { HID_USB_DEVICE(USB_VENDOR_ID_BELKIN, USB_DEVICE_ID_FLIP_KVM) },
297 { HID_USB_DEVICE(USB_VENDOR_ID_LABTEC, USB_DEVICE_ID_LABTEC_WIRELESS_KEYBOARD) },
298#endif
299#if IS_ENABLED(CONFIG_HID_BETOP_FF)
300 { HID_USB_DEVICE(USB_VENDOR_ID_BETOP_2185BFM, 0x2208) },
301 { HID_USB_DEVICE(USB_VENDOR_ID_BETOP_2185PC, 0x5506) },
302 { HID_USB_DEVICE(USB_VENDOR_ID_BETOP_2185V2PC, 0x1850) },
303 { HID_USB_DEVICE(USB_VENDOR_ID_BETOP_2185V2BFM, 0x5500) },
304#endif
305#if IS_ENABLED(CONFIG_HID_CHERRY)
306 { HID_USB_DEVICE(USB_VENDOR_ID_CHERRY, USB_DEVICE_ID_CHERRY_CYMOTION) },
307 { HID_USB_DEVICE(USB_VENDOR_ID_CHERRY, USB_DEVICE_ID_CHERRY_CYMOTION_SOLAR) },
308#endif
309#if IS_ENABLED(CONFIG_HID_CHICONY)
310 { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_TACTICAL_PAD) },
311 { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_WIRELESS2) },
312 { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_ASUS_AK1D) },
313 { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_ACER_SWITCH12) },
314#endif
315#if IS_ENABLED(CONFIG_HID_CMEDIA)
316 { HID_USB_DEVICE(USB_VENDOR_ID_CMEDIA, USB_DEVICE_ID_CM6533) },
317#endif
318#if IS_ENABLED(CONFIG_HID_CORSAIR)
319 { HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K90) },
320 { HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_SCIMITAR_PRO_RGB) },
321#endif
322#if IS_ENABLED(CONFIG_HID_CP2112)
323 { HID_USB_DEVICE(USB_VENDOR_ID_CYGNAL, USB_DEVICE_ID_CYGNAL_CP2112) },
324#endif
325#if IS_ENABLED(CONFIG_HID_CYPRESS)
326 { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_BARCODE_1) },
327 { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_BARCODE_2) },
328 { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_BARCODE_3) },
329 { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_BARCODE_4) },
330 { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_MOUSE) },
331#endif
332#if IS_ENABLED(CONFIG_HID_DRAGONRISE)
333 { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, 0x0006) },
334 { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, 0x0011) },
335#endif
336#if IS_ENABLED(CONFIG_HID_ELECOM)
337 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_BM084) },
338 { HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_EX_G_WIRED) },
339 { HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_EX_G_WIRELESS) },
340 { HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_DEFT_WIRED) },
341 { HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_DEFT_WIRELESS) },
342 { HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_HUGE_WIRED) },
343 { HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_HUGE_WIRELESS) },
344#endif
345#if IS_ENABLED(CONFIG_HID_ELO)
346 { HID_USB_DEVICE(USB_VENDOR_ID_ELO, 0x0009) },
347 { HID_USB_DEVICE(USB_VENDOR_ID_ELO, 0x0030) },
348#endif
349#if IS_ENABLED(CONFIG_HID_EMS_FF)
350 { HID_USB_DEVICE(USB_VENDOR_ID_EMS, USB_DEVICE_ID_EMS_TRIO_LINKER_PLUS_II) },
351#endif
352#if IS_ENABLED(CONFIG_HID_EZKEY)
353 { HID_USB_DEVICE(USB_VENDOR_ID_EZKEY, USB_DEVICE_ID_BTC_8193) },
354#endif
355#if IS_ENABLED(CONFIG_HID_GEMBIRD)
356 { HID_USB_DEVICE(USB_VENDOR_ID_GEMBIRD, USB_DEVICE_ID_GEMBIRD_JPD_DUALFORCE2) },
357#endif
358#if IS_ENABLED(CONFIG_HID_GFRM)
359 { HID_BLUETOOTH_DEVICE(0x58, 0x2000) },
360 { HID_BLUETOOTH_DEVICE(0x471, 0x2210) },
361#endif
362#if IS_ENABLED(CONFIG_HID_GREENASIA)
363 { HID_USB_DEVICE(USB_VENDOR_ID_GREENASIA, 0x0012) },
364#endif
365#if IS_ENABLED(CONFIG_HID_GT683R)
366 { HID_USB_DEVICE(USB_VENDOR_ID_MSI, USB_DEVICE_ID_MSI_GT683R_LED_PANEL) },
367#endif
368#if IS_ENABLED(CONFIG_HID_GYRATION)
369 { HID_USB_DEVICE(USB_VENDOR_ID_GYRATION, USB_DEVICE_ID_GYRATION_REMOTE) },
370 { HID_USB_DEVICE(USB_VENDOR_ID_GYRATION, USB_DEVICE_ID_GYRATION_REMOTE_2) },
371 { HID_USB_DEVICE(USB_VENDOR_ID_GYRATION, USB_DEVICE_ID_GYRATION_REMOTE_3) },
372#endif
373#if IS_ENABLED(CONFIG_HID_HOLTEK)
374 { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK, USB_DEVICE_ID_HOLTEK_ON_LINE_GRIP) },
375 { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_KEYBOARD) },
376 { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A04A) },
377 { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A067) },
378 { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A070) },
379 { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A072) },
380 { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A081) },
381 { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A0C2) },
382#endif
383#if IS_ENABLED(CONFIG_HID_ITE)
384 { HID_USB_DEVICE(USB_VENDOR_ID_ITE, USB_DEVICE_ID_ITE8595) },
385#endif
386#if IS_ENABLED(CONFIG_HID_ICADE)
387 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ION, USB_DEVICE_ID_ICADE) },
388#endif
389#if IS_ENABLED(CONFIG_HID_JABRA)
390 { HID_USB_DEVICE(USB_VENDOR_ID_JABRA, HID_ANY_ID) },
391#endif
392#if IS_ENABLED(CONFIG_HID_KENSINGTON)
393 { HID_USB_DEVICE(USB_VENDOR_ID_KENSINGTON, USB_DEVICE_ID_KS_SLIMBLADE) },
394#endif
395#if IS_ENABLED(CONFIG_HID_KEYTOUCH)
396 { HID_USB_DEVICE(USB_VENDOR_ID_KEYTOUCH, USB_DEVICE_ID_KEYTOUCH_IEC) },
397#endif
398#if IS_ENABLED(CONFIG_HID_KYE)
399 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_GENIUS_GILA_GAMING_MOUSE) },
400 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_GENIUS_MANTICORE) },
401 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_GENIUS_GX_IMPERATOR) },
402 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_ERGO_525V) },
403 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_I405X) },
404 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_MOUSEPEN_I608X) },
405 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_MOUSEPEN_I608X_V2) },
406 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_M610X) },
407 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_PENSKETCH_M912) },
408#endif
409#if IS_ENABLED(CONFIG_HID_LCPOWER)
410 { HID_USB_DEVICE(USB_VENDOR_ID_LCPOWER, USB_DEVICE_ID_LCPOWER_LC1000) },
411#endif
412#if IS_ENABLED(CONFIG_HID_LED)
413 { HID_USB_DEVICE(USB_VENDOR_ID_DELCOM, USB_DEVICE_ID_DELCOM_VISUAL_IND) },
414 { HID_USB_DEVICE(USB_VENDOR_ID_DREAM_CHEEKY, USB_DEVICE_ID_DREAM_CHEEKY_WN) },
415 { HID_USB_DEVICE(USB_VENDOR_ID_DREAM_CHEEKY, USB_DEVICE_ID_DREAM_CHEEKY_FA) },
416 { HID_USB_DEVICE(USB_VENDOR_ID_MICROCHIP, USB_DEVICE_ID_LUXAFOR) },
417 { HID_USB_DEVICE(USB_VENDOR_ID_RISO_KAGAKU, USB_DEVICE_ID_RI_KA_WEBMAIL) },
418 { HID_USB_DEVICE(USB_VENDOR_ID_THINGM, USB_DEVICE_ID_BLINK1) },
419#endif
420#if IS_ENABLED(CONFIG_HID_LENOVO)
421 { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_TPKBD) },
422 { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_CUSBKBD) },
423 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_CBTKBD) },
424 { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_TPPRODOCK) },
425#endif
426#if IS_ENABLED(CONFIG_HID_LOGITECH)
427 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_MX3000_RECEIVER) },
428 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_S510_RECEIVER) },
429 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_S510_RECEIVER_2) },
430 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RECEIVER) },
431 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_DINOVO_DESKTOP) },
432 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_DINOVO_EDGE) },
433 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_DINOVO_MINI) },
434 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_ELITE_KBD) },
435 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_CORDLESS_DESKTOP_LX500) },
436 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_EXTREME_3D) },
437 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_DUAL_ACTION) },
438 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WHEEL) },
439 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD_CORD) },
440 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD) },
441 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD2_2) },
442 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_G29_WHEEL) },
443 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WINGMAN_F3D) },
444 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WINGMAN_FFG) },
445 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_FORCE3D_PRO) },
446 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_FLIGHT_SYSTEM_G940) },
447 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOMO_WHEEL) },
448 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOMO_WHEEL2) },
449 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_VIBRATION_WHEEL) },
450 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_DFP_WHEEL) },
451 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_DFGT_WHEEL) },
452 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_G25_WHEEL) },
453 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_G27_WHEEL) },
454 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WII_WHEEL) },
455 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD2) },
456 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_SPACETRAVELLER) },
457 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_SPACENAVIGATOR) },
458#endif
459#if IS_ENABLED(CONFIG_HID_LOGITECH_HIDPP)
460 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_T651) },
461 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_G920_WHEEL) },
462#endif
463#if IS_ENABLED(CONFIG_HID_LOGITECH_DJ)
464 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_UNIFYING_RECEIVER) },
465 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_UNIFYING_RECEIVER_2) },
466#endif
467#if IS_ENABLED(CONFIG_HID_MAGICMOUSE)
468 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGICMOUSE) },
469 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGICTRACKPAD) },
470#endif
471#if IS_ENABLED(CONFIG_HID_MAYFLASH)
472 { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_PS3) },
473 { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_DOLPHINBAR) },
474 { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_GAMECUBE1) },
475 { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_GAMECUBE2) },
476#endif
477#if IS_ENABLED(CONFIG_HID_MICROSOFT)
478 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_COMFORT_MOUSE_4500) },
479 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_COMFORT_KEYBOARD) },
480 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_SIDEWINDER_GV) },
481 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_NE4K) },
482 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_NE4K_JP) },
483 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_NE7K) },
484 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_LK6K) },
485 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_PRESENTER_8K_USB) },
486 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_DIGITAL_MEDIA_3K) },
487 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_WIRELESS_OPTICAL_DESKTOP_3_0) },
488 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_OFFICE_KB) },
489 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_DIGITAL_MEDIA_7K) },
490 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_DIGITAL_MEDIA_600) },
491 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_DIGITAL_MEDIA_3KV1) },
492 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_POWER_COVER) },
493 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_PRESENTER_8K_BT) },
494#endif
495#if IS_ENABLED(CONFIG_HID_MONTEREY)
496 { HID_USB_DEVICE(USB_VENDOR_ID_MONTEREY, USB_DEVICE_ID_GENIUS_KB29E) },
497#endif
498#if IS_ENABLED(CONFIG_HID_MULTITOUCH)
499 { HID_USB_DEVICE(USB_VENDOR_ID_LG, USB_DEVICE_ID_LG_MELFAS_MT) },
500#endif
501#if IS_ENABLED(CONFIG_HID_WIIMOTE)
502 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_NINTENDO, USB_DEVICE_ID_NINTENDO_WIIMOTE) },
503 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_NINTENDO, USB_DEVICE_ID_NINTENDO_WIIMOTE2) },
504#endif
505#if IS_ENABLED(CONFIG_HID_NTI)
506 { HID_USB_DEVICE(USB_VENDOR_ID_NTI, USB_DEVICE_ID_USB_SUN) },
507#endif
508#if IS_ENABLED(CONFIG_HID_NTRIG)
509 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN) },
510 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_1) },
511 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_2) },
512 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_3) },
513 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_4) },
514 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_5) },
515 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_6) },
516 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_7) },
517 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_8) },
518 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_9) },
519 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_10) },
520 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_11) },
521 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_12) },
522 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_13) },
523 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_14) },
524 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_15) },
525 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_16) },
526 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_17) },
527 { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_18) },
528#endif
529#if IS_ENABLED(CONFIG_HID_ORTEK)
530 { HID_USB_DEVICE(USB_VENDOR_ID_ORTEK, USB_DEVICE_ID_ORTEK_PKB1700) },
531 { HID_USB_DEVICE(USB_VENDOR_ID_ORTEK, USB_DEVICE_ID_ORTEK_WKB2000) },
532 { HID_USB_DEVICE(USB_VENDOR_ID_ORTEK, USB_DEVICE_ID_ORTEK_IHOME_IMAC_A210S) },
533 { HID_USB_DEVICE(USB_VENDOR_ID_SKYCABLE, USB_DEVICE_ID_SKYCABLE_WIRELESS_PRESENTER) },
534#endif
535#if IS_ENABLED(CONFIG_HID_PANTHERLORD)
536 { HID_USB_DEVICE(USB_VENDOR_ID_GAMERON, USB_DEVICE_ID_GAMERON_DUAL_PSX_ADAPTOR) },
537 { HID_USB_DEVICE(USB_VENDOR_ID_GAMERON, USB_DEVICE_ID_GAMERON_DUAL_PCS_ADAPTOR) },
538 { HID_USB_DEVICE(USB_VENDOR_ID_GREENASIA, 0x0003) },
539 { HID_USB_DEVICE(USB_VENDOR_ID_JESS2, USB_DEVICE_ID_JESS2_COLOR_RUMBLE_PAD) },
540#endif
541#if IS_ENABLED(CONFIG_HID_PENMOUNT)
542 { HID_USB_DEVICE(USB_VENDOR_ID_PENMOUNT, USB_DEVICE_ID_PENMOUNT_6000) },
543#endif
544#if IS_ENABLED(CONFIG_HID_PETALYNX)
545 { HID_USB_DEVICE(USB_VENDOR_ID_PETALYNX, USB_DEVICE_ID_PETALYNX_MAXTER_REMOTE) },
546#endif
547#if IS_ENABLED(CONFIG_HID_PICOLCD)
548 { HID_USB_DEVICE(USB_VENDOR_ID_MICROCHIP, USB_DEVICE_ID_PICOLCD) },
549 { HID_USB_DEVICE(USB_VENDOR_ID_MICROCHIP, USB_DEVICE_ID_PICOLCD_BOOTLOADER) },
550#endif
551#if IS_ENABLED(CONFIG_HID_PLANTRONICS)
552 { HID_USB_DEVICE(USB_VENDOR_ID_PLANTRONICS, HID_ANY_ID) },
553#endif
554#if IS_ENABLED(CONFIG_HID_PRIMAX)
555 { HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_KEYBOARD) },
556#endif
557#if IS_ENABLED(CONFIG_HID_PRODIKEYS)
558 { HID_USB_DEVICE(USB_VENDOR_ID_CREATIVELABS, USB_DEVICE_ID_PRODIKEYS_PCMIDI) },
559#endif
560#if IS_ENABLED(CONFIG_HID_RETRODE)
561 { HID_USB_DEVICE(USB_VENDOR_ID_FUTURE_TECHNOLOGY, USB_DEVICE_ID_RETRODE2) },
562#endif
563#if IS_ENABLED(CONFIG_HID_RMI)
564 { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_X1_COVER) },
565 { HID_USB_DEVICE(USB_VENDOR_ID_RAZER, USB_DEVICE_ID_RAZER_BLADE_14) },
566 { HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_REZEL) },
567#endif
568#if IS_ENABLED(CONFIG_HID_ROCCAT)
569 { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_ARVO) },
570 { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_ISKU) },
571 { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_ISKUFX) },
572 { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_KONE) },
573 { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_KONEPLUS) },
574 { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_KONEPURE) },
575 { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_KONEPURE_OPTICAL) },
576 { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_KONEXTD) },
577 { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_KOVAPLUS) },
578 { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_LUA) },
579 { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_PYRA_WIRED) },
580 { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_PYRA_WIRELESS) },
581 { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_RYOS_MK) },
582 { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_RYOS_MK_GLOW) },
583 { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_RYOS_MK_PRO) },
584 { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_SAVU) },
585#endif
586#if IS_ENABLED(CONFIG_HID_SAITEK)
587 { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_PS1000) },
588 { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_RAT7_OLD) },
589 { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_RAT7) },
590 { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_RAT9) },
591 { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_MMO7) },
592 { HID_USB_DEVICE(USB_VENDOR_ID_MADCATZ, USB_DEVICE_ID_MADCATZ_RAT5) },
593 { HID_USB_DEVICE(USB_VENDOR_ID_MADCATZ, USB_DEVICE_ID_MADCATZ_RAT9) },
594#endif
595#if IS_ENABLED(CONFIG_HID_SAMSUNG)
596 { HID_USB_DEVICE(USB_VENDOR_ID_SAMSUNG, USB_DEVICE_ID_SAMSUNG_IR_REMOTE) },
597 { HID_USB_DEVICE(USB_VENDOR_ID_SAMSUNG, USB_DEVICE_ID_SAMSUNG_WIRELESS_KBD_MOUSE) },
598#endif
599#if IS_ENABLED(CONFIG_HID_SMARTJOYPLUS)
600 { HID_USB_DEVICE(USB_VENDOR_ID_PLAYDOTCOM, USB_DEVICE_ID_PLAYDOTCOM_EMS_USBII) },
601 { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_SMARTJOY_PLUS) },
602 { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_SUPER_JOY_BOX_3) },
603 { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_DUAL_USB_JOYPAD) },
604 { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP_LTD, USB_DEVICE_ID_SUPER_JOY_BOX_3_PRO) },
605 { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP_LTD, USB_DEVICE_ID_SUPER_DUAL_BOX_PRO) },
606 { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP_LTD, USB_DEVICE_ID_SUPER_JOY_BOX_5_PRO) },
607#endif
608#if IS_ENABLED(CONFIG_HID_SONY)
609 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_HARMONY_PS3) },
610 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SMK, USB_DEVICE_ID_SMK_PS3_BDREMOTE) },
611 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_BUZZ_CONTROLLER) },
612 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_WIRELESS_BUZZ_CONTROLLER) },
613 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_MOTION_CONTROLLER) },
614 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_MOTION_CONTROLLER) },
615 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_NAVIGATION_CONTROLLER) },
616 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_NAVIGATION_CONTROLLER) },
617 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_BDREMOTE) },
618 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER) },
619 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER) },
620 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER) },
621 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER) },
622 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER_2) },
623 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER_2) },
624 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER_DONGLE) },
625 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE) },
626 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGP_MOUSE) },
627 { HID_USB_DEVICE(USB_VENDOR_ID_SINO_LITE, USB_DEVICE_ID_SINO_LITE_CONTROLLER) },
628#endif
629#if IS_ENABLED(CONFIG_HID_SPEEDLINK)
630 { HID_USB_DEVICE(USB_VENDOR_ID_X_TENSIONS, USB_DEVICE_ID_SPEEDLINK_VAD_CEZANNE) },
631#endif
632#if IS_ENABLED(CONFIG_HID_STEELSERIES)
633 { HID_USB_DEVICE(USB_VENDOR_ID_STEELSERIES, USB_DEVICE_ID_STEELSERIES_SRWS1) },
634#endif
635#if IS_ENABLED(CONFIG_HID_SUNPLUS)
636 { HID_USB_DEVICE(USB_VENDOR_ID_SUNPLUS, USB_DEVICE_ID_SUNPLUS_WDESKTOP) },
637#endif
638#if IS_ENABLED(CONFIG_HID_THRUSTMASTER)
639 { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb300) },
640 { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb304) },
641 { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb323) },
642 { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb324) },
643 { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb605) },
644 { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb651) },
645 { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb653) },
646 { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb654) },
647 { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb65a) },
648#endif
649#if IS_ENABLED(CONFIG_HID_TIVO)
650 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_TIVO, USB_DEVICE_ID_TIVO_SLIDE_BT) },
651 { HID_USB_DEVICE(USB_VENDOR_ID_TIVO, USB_DEVICE_ID_TIVO_SLIDE) },
652 { HID_USB_DEVICE(USB_VENDOR_ID_TIVO, USB_DEVICE_ID_TIVO_SLIDE_PRO) },
653#endif
654#if IS_ENABLED(CONFIG_HID_TOPSEED)
655 { HID_USB_DEVICE(USB_VENDOR_ID_BTC, USB_DEVICE_ID_BTC_EMPREX_REMOTE) },
656 { HID_USB_DEVICE(USB_VENDOR_ID_BTC, USB_DEVICE_ID_BTC_EMPREX_REMOTE_2) },
657 { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_WIRELESS) },
658 { HID_USB_DEVICE(USB_VENDOR_ID_TOPSEED, USB_DEVICE_ID_TOPSEED_CYBERLINK) },
659 { HID_USB_DEVICE(USB_VENDOR_ID_TOPSEED2, USB_DEVICE_ID_TOPSEED2_RF_COMBO) },
660#endif
661#if IS_ENABLED(CONFIG_HID_TWINHAN)
662 { HID_USB_DEVICE(USB_VENDOR_ID_TWINHAN, USB_DEVICE_ID_TWINHAN_IR_REMOTE) },
663#endif
664#if IS_ENABLED(CONFIG_HID_UCLOGIC)
665 { HID_USB_DEVICE(USB_VENDOR_ID_HUION, USB_DEVICE_ID_HUION_TABLET) },
666 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_HUION_TABLET) },
667 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_PF1209) },
668 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_WP4030U) },
669 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_WP5540U) },
670 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_WP8060U) },
671 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_WP1062) },
672 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_WIRELESS_TABLET_TWHL850) },
673 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_TWHA60) },
674 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_YIYNOVA_TABLET) },
675 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UGEE_TABLET_81) },
676 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UGEE_TABLET_45) },
677 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_DRAWIMAGE_G3) },
678 { HID_USB_DEVICE(USB_VENDOR_ID_UGEE, USB_DEVICE_ID_UGEE_TABLET_EX07S) },
679 { HID_USB_DEVICE(USB_VENDOR_ID_UGTIZER, USB_DEVICE_ID_UGTIZER_TABLET_GP0610) },
680#endif
681#if IS_ENABLED(CONFIG_HID_UDRAW_PS3)
682 { HID_USB_DEVICE(USB_VENDOR_ID_THQ, USB_DEVICE_ID_THQ_PS3_UDRAW) },
683#endif
684#if IS_ENABLED(CONFIG_HID_WALTOP)
685 { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_SLIM_TABLET_5_8_INCH) },
686 { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_SLIM_TABLET_12_1_INCH) },
687 { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_Q_PAD) },
688 { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_PID_0038) },
689 { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_MEDIA_TABLET_10_6_INCH) },
690 { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_MEDIA_TABLET_14_1_INCH) },
691 { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_SIRIUS_BATTERY_FREE_TABLET) },
692#endif
693#if IS_ENABLED(CONFIG_HID_XINMO)
694 { HID_USB_DEVICE(USB_VENDOR_ID_XIN_MO, USB_DEVICE_ID_XIN_MO_DUAL_ARCADE) },
695 { HID_USB_DEVICE(USB_VENDOR_ID_XIN_MO, USB_DEVICE_ID_THT_2P_ARCADE) },
696#endif
697#if IS_ENABLED(CONFIG_HID_ZEROPLUS)
698 { HID_USB_DEVICE(USB_VENDOR_ID_ZEROPLUS, 0x0005) },
699 { HID_USB_DEVICE(USB_VENDOR_ID_ZEROPLUS, 0x0030) },
700#endif
701#if IS_ENABLED(CONFIG_HID_ZYDACRON)
702 { HID_USB_DEVICE(USB_VENDOR_ID_ZYDACRON, USB_DEVICE_ID_ZYDACRON_REMOTE_CONTROL) },
703#endif
704 { }
705};
706
707/* a list of devices that shouldn't be handled by HID core at all */
708static const struct hid_device_id hid_ignore_list[] = {
709 { HID_USB_DEVICE(USB_VENDOR_ID_ACECAD, USB_DEVICE_ID_ACECAD_FLAIR) },
710 { HID_USB_DEVICE(USB_VENDOR_ID_ACECAD, USB_DEVICE_ID_ACECAD_302) },
711 { HID_USB_DEVICE(USB_VENDOR_ID_ADS_TECH, USB_DEVICE_ID_ADS_TECH_RADIO_SI470X) },
712 { HID_USB_DEVICE(USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_01) },
713 { HID_USB_DEVICE(USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_10) },
714 { HID_USB_DEVICE(USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_20) },
715 { HID_USB_DEVICE(USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_21) },
716 { HID_USB_DEVICE(USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_22) },
717 { HID_USB_DEVICE(USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_23) },
718 { HID_USB_DEVICE(USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_24) },
719 { HID_USB_DEVICE(USB_VENDOR_ID_AIRCABLE, USB_DEVICE_ID_AIRCABLE1) },
720 { HID_USB_DEVICE(USB_VENDOR_ID_ALCOR, USB_DEVICE_ID_ALCOR_USBRS232) },
721 { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_LCM)},
722 { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_LCM2)},
723 { HID_USB_DEVICE(USB_VENDOR_ID_AVERMEDIA, USB_DEVICE_ID_AVER_FM_MR800) },
724 { HID_USB_DEVICE(USB_VENDOR_ID_AXENTIA, USB_DEVICE_ID_AXENTIA_FM_RADIO) },
725 { HID_USB_DEVICE(USB_VENDOR_ID_BERKSHIRE, USB_DEVICE_ID_BERKSHIRE_PCWD) },
726 { HID_USB_DEVICE(USB_VENDOR_ID_CIDC, 0x0103) },
727 { HID_USB_DEVICE(USB_VENDOR_ID_CYGNAL, USB_DEVICE_ID_CYGNAL_RADIO_SI470X) },
728 { HID_USB_DEVICE(USB_VENDOR_ID_CYGNAL, USB_DEVICE_ID_CYGNAL_RADIO_SI4713) },
729 { HID_USB_DEVICE(USB_VENDOR_ID_CMEDIA, USB_DEVICE_ID_CM109) },
730 { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_HIDCOM) },
731 { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_ULTRAMOUSE) },
732 { HID_USB_DEVICE(USB_VENDOR_ID_DEALEXTREAME, USB_DEVICE_ID_DEALEXTREAME_RADIO_SI4701) },
733 { HID_USB_DEVICE(USB_VENDOR_ID_DELORME, USB_DEVICE_ID_DELORME_EARTHMATE) },
734 { HID_USB_DEVICE(USB_VENDOR_ID_DELORME, USB_DEVICE_ID_DELORME_EM_LT20) },
735 { HID_I2C_DEVICE(USB_VENDOR_ID_ELAN, 0x0400) },
736 { HID_USB_DEVICE(USB_VENDOR_ID_ESSENTIAL_REALITY, USB_DEVICE_ID_ESSENTIAL_REALITY_P5) },
737 { HID_USB_DEVICE(USB_VENDOR_ID_ETT, USB_DEVICE_ID_TC5UH) },
738 { HID_USB_DEVICE(USB_VENDOR_ID_ETT, USB_DEVICE_ID_TC4UM) },
739 { HID_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH, 0x0001) },
740 { HID_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH, 0x0002) },
741 { HID_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH, 0x0004) },
742 { HID_USB_DEVICE(USB_VENDOR_ID_GOTOP, USB_DEVICE_ID_SUPER_Q2) },
743 { HID_USB_DEVICE(USB_VENDOR_ID_GOTOP, USB_DEVICE_ID_GOGOPEN) },
744 { HID_USB_DEVICE(USB_VENDOR_ID_GOTOP, USB_DEVICE_ID_PENPOWER) },
745 { HID_USB_DEVICE(USB_VENDOR_ID_GRETAGMACBETH, USB_DEVICE_ID_GRETAGMACBETH_HUEY) },
746 { HID_USB_DEVICE(USB_VENDOR_ID_GRIFFIN, USB_DEVICE_ID_POWERMATE) },
747 { HID_USB_DEVICE(USB_VENDOR_ID_GRIFFIN, USB_DEVICE_ID_SOUNDKNOB) },
748 { HID_USB_DEVICE(USB_VENDOR_ID_GRIFFIN, USB_DEVICE_ID_RADIOSHARK) },
749 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_90) },
750 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_100) },
751 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_101) },
752 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_103) },
753 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_104) },
754 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_105) },
755 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_106) },
756 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_107) },
757 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_108) },
758 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_200) },
759 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_201) },
760 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_202) },
761 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_203) },
762 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_204) },
763 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_205) },
764 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_206) },
765 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_207) },
766 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_300) },
767 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_301) },
768 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_302) },
769 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_303) },
770 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_304) },
771 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_305) },
772 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_306) },
773 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_307) },
774 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_308) },
775 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_309) },
776 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_400) },
777 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_401) },
778 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_402) },
779 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_403) },
780 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_404) },
781 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_405) },
782 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_500) },
783 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_501) },
784 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_502) },
785 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_503) },
786 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_504) },
787 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1000) },
788 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1001) },
789 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1002) },
790 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1003) },
791 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1004) },
792 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1005) },
793 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1006) },
794 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1007) },
795 { HID_USB_DEVICE(USB_VENDOR_ID_IMATION, USB_DEVICE_ID_DISC_STAKKA) },
796 { HID_USB_DEVICE(USB_VENDOR_ID_JABRA, USB_DEVICE_ID_JABRA_GN9350E) },
797 { HID_USB_DEVICE(USB_VENDOR_ID_KBGEAR, USB_DEVICE_ID_KBGEAR_JAMSTUDIO) },
798 { HID_USB_DEVICE(USB_VENDOR_ID_KWORLD, USB_DEVICE_ID_KWORLD_RADIO_FM700) },
799 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_GPEN_560) },
800 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_KYE, 0x0058) },
801 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_CASSY) },
802 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_CASSY2) },
803 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_POCKETCASSY) },
804 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_POCKETCASSY2) },
805 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MOBILECASSY) },
806 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MOBILECASSY2) },
807 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MICROCASSYVOLTAGE) },
808 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MICROCASSYCURRENT) },
809 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MICROCASSYTIME) },
810 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MICROCASSYTEMPERATURE) },
811 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MICROCASSYPH) },
812 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_JWM) },
813 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_DMMP) },
814 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_UMIP) },
815 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_UMIC) },
816 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_UMIB) },
817 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_XRAY) },
818 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_XRAY2) },
819 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_VIDEOCOM) },
820 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MOTOR) },
821 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_COM3LAB) },
822 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_TELEPORT) },
823 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_NETWORKANALYSER) },
824 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_POWERCONTROL) },
825 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MACHINETEST) },
826 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MOSTANALYSER) },
827 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MOSTANALYSER2) },
828 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_ABSESP) },
829 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_AUTODATABUS) },
830 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_MCT) },
831 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_HYBRID) },
832 { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_HEATCONTROL) },
833 { HID_USB_DEVICE(USB_VENDOR_ID_MADCATZ, USB_DEVICE_ID_MADCATZ_BEATPAD) },
834 { HID_USB_DEVICE(USB_VENDOR_ID_MCC, USB_DEVICE_ID_MCC_PMD1024LS) },
835 { HID_USB_DEVICE(USB_VENDOR_ID_MCC, USB_DEVICE_ID_MCC_PMD1208LS) },
836 { HID_USB_DEVICE(USB_VENDOR_ID_MICROCHIP, USB_DEVICE_ID_PICKIT1) },
837 { HID_USB_DEVICE(USB_VENDOR_ID_MICROCHIP, USB_DEVICE_ID_PICKIT2) },
838 { HID_USB_DEVICE(USB_VENDOR_ID_MICROCHIP, USB_DEVICE_ID_PICK16F1454) },
839 { HID_USB_DEVICE(USB_VENDOR_ID_MICROCHIP, USB_DEVICE_ID_PICK16F1454_V2) },
840 { HID_USB_DEVICE(USB_VENDOR_ID_NATIONAL_SEMICONDUCTOR, USB_DEVICE_ID_N_S_HARMONY) },
841 { HID_USB_DEVICE(USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100) },
842 { HID_USB_DEVICE(USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 20) },
843 { HID_USB_DEVICE(USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 30) },
844 { HID_USB_DEVICE(USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 100) },
845 { HID_USB_DEVICE(USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 108) },
846 { HID_USB_DEVICE(USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 118) },
847 { HID_USB_DEVICE(USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 200) },
848 { HID_USB_DEVICE(USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 300) },
849 { HID_USB_DEVICE(USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 400) },
850 { HID_USB_DEVICE(USB_VENDOR_ID_ONTRAK, USB_DEVICE_ID_ONTRAK_ADU100 + 500) },
851 { HID_USB_DEVICE(USB_VENDOR_ID_PANJIT, 0x0001) },
852 { HID_USB_DEVICE(USB_VENDOR_ID_PANJIT, 0x0002) },
853 { HID_USB_DEVICE(USB_VENDOR_ID_PANJIT, 0x0003) },
854 { HID_USB_DEVICE(USB_VENDOR_ID_PANJIT, 0x0004) },
855 { HID_USB_DEVICE(USB_VENDOR_ID_PETZL, USB_DEVICE_ID_PETZL_HEADLAMP) },
856 { HID_USB_DEVICE(USB_VENDOR_ID_PHILIPS, USB_DEVICE_ID_PHILIPS_IEEE802154_DONGLE) },
857 { HID_USB_DEVICE(USB_VENDOR_ID_POWERCOM, USB_DEVICE_ID_POWERCOM_UPS) },
858#if IS_ENABLED(CONFIG_MOUSE_SYNAPTICS_USB)
859 { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_TP) },
860 { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_INT_TP) },
861 { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_CPAD) },
862 { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_STICK) },
863 { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_WP) },
864 { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_COMP_TP) },
865 { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_WTP) },
866 { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_DPAD) },
867#endif
868 { HID_USB_DEVICE(USB_VENDOR_ID_YEALINK, USB_DEVICE_ID_YEALINK_P1K_P4K_B2K) },
869 { }
870};
871
872/**
873 * hid_mouse_ignore_list - mouse devices which should not be handled by the hid layer
874 *
875 * There are composite devices for which we want to ignore only a certain
876 * interface. This is a list of devices for which only the mouse interface will
877 * be ignored. This allows a dedicated driver to take care of the interface.
878 */
879static const struct hid_device_id hid_mouse_ignore_list[] = {
880 /* appletouch driver */
881 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_ANSI) },
882 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_ISO) },
883 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER_ANSI) },
884 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER_ISO) },
885 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER_JIS) },
886 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER3_ANSI) },
887 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER3_ISO) },
888 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER3_JIS) },
889 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_ANSI) },
890 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_ISO) },
891 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_JIS) },
892 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_HF_ANSI) },
893 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_HF_ISO) },
894 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_HF_JIS) },
895 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING_ANSI) },
896 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING_ISO) },
897 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING_JIS) },
898 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING2_ANSI) },
899 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING2_ISO) },
900 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING2_JIS) },
901 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_ANSI) },
902 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_ISO) },
903 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING3_JIS) },
904 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_ANSI) },
905 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_ISO) },
906 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4_JIS) },
907 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_ANSI) },
908 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_ISO) },
909 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS) },
910 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5_ANSI) },
911 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5_ISO) },
912 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5_JIS) },
913 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5A_ANSI) },
914 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5A_ISO) },
915 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5A_JIS) },
916 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6_ANSI) },
917 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6_ISO) },
918 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6_JIS) },
919 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_ANSI) },
920 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_ISO) },
921 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING6A_JIS) },
922 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_ANSI) },
923 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_ISO) },
924 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7_JIS) },
925 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7A_ANSI) },
926 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7A_ISO) },
927 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING7A_JIS) },
928 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING8_ANSI) },
929 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING8_ISO) },
930 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING8_JIS) },
931 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING9_ANSI) },
932 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING9_ISO) },
933 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING9_JIS) },
934 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY) },
935 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY) },
936 { }
937};
938
939bool hid_ignore(struct hid_device *hdev)
940{
941 if (hdev->quirks & HID_QUIRK_NO_IGNORE)
942 return false;
943 if (hdev->quirks & HID_QUIRK_IGNORE)
944 return true;
945
946 switch (hdev->vendor) {
947 case USB_VENDOR_ID_CODEMERCS:
948 /* ignore all Code Mercenaries IOWarrior devices */
949 if (hdev->product >= USB_DEVICE_ID_CODEMERCS_IOW_FIRST &&
950 hdev->product <= USB_DEVICE_ID_CODEMERCS_IOW_LAST)
951 return true;
952 break;
953 case USB_VENDOR_ID_LOGITECH:
954 if (hdev->product >= USB_DEVICE_ID_LOGITECH_HARMONY_FIRST &&
955 hdev->product <= USB_DEVICE_ID_LOGITECH_HARMONY_LAST)
956 return true;
957 /*
958 * The Keene FM transmitter USB device has the same USB ID as
959 * the Logitech AudioHub Speaker, but it should ignore the hid.
960 * Check if the name is that of the Keene device.
961 * For reference: the name of the AudioHub is
962 * "HOLTEK AudioHub Speaker".
963 */
964 if (hdev->product == USB_DEVICE_ID_LOGITECH_AUDIOHUB &&
965 !strcmp(hdev->name, "HOLTEK B-LINK USB Audio "))
966 return true;
967 break;
968 case USB_VENDOR_ID_SOUNDGRAPH:
969 if (hdev->product >= USB_DEVICE_ID_SOUNDGRAPH_IMON_FIRST &&
970 hdev->product <= USB_DEVICE_ID_SOUNDGRAPH_IMON_LAST)
971 return true;
972 break;
973 case USB_VENDOR_ID_HANWANG:
974 if (hdev->product >= USB_DEVICE_ID_HANWANG_TABLET_FIRST &&
975 hdev->product <= USB_DEVICE_ID_HANWANG_TABLET_LAST)
976 return true;
977 break;
978 case USB_VENDOR_ID_JESS:
979 if (hdev->product == USB_DEVICE_ID_JESS_YUREX &&
980 hdev->type == HID_TYPE_USBNONE)
981 return true;
982 break;
983 case USB_VENDOR_ID_VELLEMAN:
984 /* These are not HID devices. They are handled by comedi. */
985 if ((hdev->product >= USB_DEVICE_ID_VELLEMAN_K8055_FIRST &&
986 hdev->product <= USB_DEVICE_ID_VELLEMAN_K8055_LAST) ||
987 (hdev->product >= USB_DEVICE_ID_VELLEMAN_K8061_FIRST &&
988 hdev->product <= USB_DEVICE_ID_VELLEMAN_K8061_LAST))
989 return true;
990 break;
991 case USB_VENDOR_ID_ATMEL_V_USB:
992 /* Masterkit MA901 usb radio based on Atmel tiny85 chip and
993 * it has the same USB ID as many Atmel V-USB devices. This
994 * usb radio is handled by radio-ma901.c driver so we want
995 * ignore the hid. Check the name, bus, product and ignore
996 * if we have MA901 usb radio.
997 */
998 if (hdev->product == USB_DEVICE_ID_ATMEL_V_USB &&
999 hdev->bus == BUS_USB &&
1000 strncmp(hdev->name, "www.masterkit.ru MA901", 22) == 0)
1001 return true;
1002 break;
1003 case USB_VENDOR_ID_ELAN:
1004 /*
1005 * Many Elan devices have a product id of 0x0401 and are handled
1006 * by the elan_i2c input driver. But the ACPI HID ELAN0800 dev
1007 * is not (and cannot be) handled by that driver ->
1008 * Ignore all 0x0401 devs except for the ELAN0800 dev.
1009 */
1010 if (hdev->product == 0x0401 &&
1011 strncmp(hdev->name, "ELAN0800", 8) != 0)
1012 return true;
1013 break;
1014 }
1015
1016 if (hdev->type == HID_TYPE_USBMOUSE &&
1017 hid_match_id(hdev, hid_mouse_ignore_list))
1018 return true;
1019
1020 return !!hid_match_id(hdev, hid_ignore_list);
1021}
1022EXPORT_SYMBOL_GPL(hid_ignore);
1023
1024/* Dynamic HID quirks list - specified at runtime */
1025struct quirks_list_struct {
1026 struct hid_device_id hid_bl_item;
1027 struct list_head node;
1028};
1029
1030static LIST_HEAD(dquirks_list);
1031static DEFINE_MUTEX(dquirks_lock);
1032
1033/* Runtime ("dynamic") quirks manipulation functions */
1034
1035/**
1036 * hid_exists_dquirk: find any dynamic quirks for a HID device
1037 * @hdev: the HID device to match
1038 *
1039 * Description:
1040 * Scans dquirks_list for a matching dynamic quirk and returns
1041 * the pointer to the relevant struct hid_device_id if found.
1042 * Must be called with a read lock held on dquirks_lock.
1043 *
1044 * Returns: NULL if no quirk found, struct hid_device_id * if found.
1045 */
1046static struct hid_device_id *hid_exists_dquirk(const struct hid_device *hdev)
1047{
1048 struct quirks_list_struct *q;
1049 struct hid_device_id *bl_entry = NULL;
1050
1051 list_for_each_entry(q, &dquirks_list, node) {
1052 if (hid_match_one_id(hdev, &q->hid_bl_item)) {
1053 bl_entry = &q->hid_bl_item;
1054 break;
1055 }
1056 }
1057
1058 if (bl_entry != NULL)
1059 dbg_hid("Found dynamic quirk 0x%lx for HID device 0x%hx:0x%hx\n",
1060 bl_entry->driver_data, bl_entry->vendor,
1061 bl_entry->product);
1062
1063 return bl_entry;
1064}
1065
1066
1067/**
1068 * hid_modify_dquirk: add/replace a HID quirk
1069 * @id: the HID device to match
1070 * @quirks: the unsigned long quirks value to add/replace
1071 *
1072 * Description:
1073 * If an dynamic quirk exists in memory for this device, replace its
1074 * quirks value with what was provided. Otherwise, add the quirk
1075 * to the dynamic quirks list.
1076 *
1077 * Returns: 0 OK, -error on failure.
1078 */
1079static int hid_modify_dquirk(const struct hid_device_id *id,
1080 const unsigned long quirks)
1081{
1082 struct hid_device *hdev;
1083 struct quirks_list_struct *q_new, *q;
1084 int list_edited = 0;
1085 int ret = 0;
1086
1087 hdev = kzalloc(sizeof(*hdev), GFP_KERNEL);
1088 if (!hdev)
1089 return -ENOMEM;
1090
1091 q_new = kmalloc(sizeof(struct quirks_list_struct), GFP_KERNEL);
1092 if (!q_new) {
1093 ret = -ENOMEM;
1094 goto out;
1095 }
1096
1097 hdev->bus = q_new->hid_bl_item.bus = id->bus;
1098 hdev->group = q_new->hid_bl_item.group = id->group;
1099 hdev->vendor = q_new->hid_bl_item.vendor = id->vendor;
1100 hdev->product = q_new->hid_bl_item.product = id->product;
1101 q_new->hid_bl_item.driver_data = quirks;
1102
1103 mutex_lock(&dquirks_lock);
1104
1105 list_for_each_entry(q, &dquirks_list, node) {
1106
1107 if (hid_match_one_id(hdev, &q->hid_bl_item)) {
1108
1109 list_replace(&q->node, &q_new->node);
1110 kfree(q);
1111 list_edited = 1;
1112 break;
1113
1114 }
1115
1116 }
1117
1118 if (!list_edited)
1119 list_add_tail(&q_new->node, &dquirks_list);
1120
1121 mutex_unlock(&dquirks_lock);
1122
1123 out:
1124 kfree(hdev);
1125 return ret;
1126}
1127
1128/**
1129 * hid_remove_all_dquirks: remove all runtime HID quirks from memory
1130 * @bus: bus to match against. Use HID_BUS_ANY if all need to be removed.
1131 *
1132 * Description:
1133 * Free all memory associated with dynamic quirks - called before
1134 * module unload.
1135 *
1136 */
1137static void hid_remove_all_dquirks(__u16 bus)
1138{
1139 struct quirks_list_struct *q, *temp;
1140
1141 mutex_lock(&dquirks_lock);
1142 list_for_each_entry_safe(q, temp, &dquirks_list, node) {
1143 if (bus == HID_BUS_ANY || bus == q->hid_bl_item.bus) {
1144 list_del(&q->node);
1145 kfree(q);
1146 }
1147 }
1148 mutex_unlock(&dquirks_lock);
1149
1150}
1151
1152/**
1153 * hid_quirks_init: apply HID quirks specified at module load time
1154 */
1155int hid_quirks_init(char **quirks_param, __u16 bus, int count)
1156{
1157 struct hid_device_id id = { 0 };
1158 int n = 0, m;
1159 unsigned short int vendor, product;
1160 u32 quirks;
1161
1162 id.bus = bus;
1163
1164 for (; n < count && quirks_param[n]; n++) {
1165
1166 m = sscanf(quirks_param[n], "0x%hx:0x%hx:0x%x",
1167 &vendor, &product, &quirks);
1168
1169 id.vendor = (__u16)vendor;
1170 id.product = (__u16)product;
1171
1172 if (m != 3 ||
1173 hid_modify_dquirk(&id, quirks) != 0) {
1174 pr_warn("Could not parse HID quirk module param %s\n",
1175 quirks_param[n]);
1176 }
1177 }
1178
1179 return 0;
1180}
1181EXPORT_SYMBOL_GPL(hid_quirks_init);
1182
1183/**
1184 * hid_quirks_exit: release memory associated with dynamic_quirks
1185 * @bus: a bus to match against
1186 *
1187 * Description:
1188 * Release all memory associated with dynamic quirks for a given bus.
1189 * Called upon module unload.
1190 * Use HID_BUS_ANY to remove all dynamic quirks.
1191 *
1192 * Returns: nothing
1193 */
1194void hid_quirks_exit(__u16 bus)
1195{
1196 hid_remove_all_dquirks(bus);
1197}
1198EXPORT_SYMBOL_GPL(hid_quirks_exit);
1199
1200/**
1201 * hid_gets_squirk: return any static quirks for a HID device
1202 * @hdev: the HID device to match
1203 *
1204 * Description:
1205 * Given a HID device, return a pointer to the quirked hid_device_id entry
1206 * associated with that device.
1207 *
1208 * Returns: the quirks.
1209 */
1210static unsigned long hid_gets_squirk(const struct hid_device *hdev)
1211{
1212 const struct hid_device_id *bl_entry;
1213 unsigned long quirks = 0;
1214
1215 if (hid_match_id(hdev, hid_ignore_list))
1216 quirks |= HID_QUIRK_IGNORE;
1217
1218 if (hid_match_id(hdev, hid_have_special_driver))
1219 quirks |= HID_QUIRK_HAVE_SPECIAL_DRIVER;
1220
1221 bl_entry = hid_match_id(hdev, hid_quirks);
1222 if (bl_entry != NULL)
1223 quirks |= bl_entry->driver_data;
1224
1225 if (quirks)
1226 dbg_hid("Found squirk 0x%lx for HID device 0x%hx:0x%hx\n",
1227 quirks, hdev->vendor, hdev->product);
1228 return quirks;
1229}
1230
1231/**
1232 * hid_lookup_quirk: return any quirks associated with a HID device
1233 * @hdev: the HID device to look for
1234 *
1235 * Description:
1236 * Given a HID device, return any quirks associated with that device.
1237 *
1238 * Returns: an unsigned long quirks value.
1239 */
1240unsigned long hid_lookup_quirk(const struct hid_device *hdev)
1241{
1242 unsigned long quirks = 0;
1243 const struct hid_device_id *quirk_entry = NULL;
1244
1245 /* NCR devices must not be queried for reports */
1246 if (hdev->bus == BUS_USB &&
1247 hdev->vendor == USB_VENDOR_ID_NCR &&
1248 hdev->product >= USB_DEVICE_ID_NCR_FIRST &&
1249 hdev->product <= USB_DEVICE_ID_NCR_LAST)
1250 return HID_QUIRK_NO_INIT_REPORTS;
1251
1252 /* These devices must be ignored if version (bcdDevice) is too old */
1253 if (hdev->bus == BUS_USB && hdev->vendor == USB_VENDOR_ID_JABRA) {
1254 switch (hdev->product) {
1255 case USB_DEVICE_ID_JABRA_SPEAK_410:
1256 if (hdev->version < 0x0111)
1257 return HID_QUIRK_IGNORE;
1258 break;
1259 case USB_DEVICE_ID_JABRA_SPEAK_510:
1260 if (hdev->version < 0x0214)
1261 return HID_QUIRK_IGNORE;
1262 break;
1263 }
1264 }
1265
1266 mutex_lock(&dquirks_lock);
1267 quirk_entry = hid_exists_dquirk(hdev);
1268 if (quirk_entry)
1269 quirks = quirk_entry->driver_data;
1270 else
1271 quirks = hid_gets_squirk(hdev);
1272 mutex_unlock(&dquirks_lock);
1273
1274 return quirks;
1275}
1276EXPORT_SYMBOL_GPL(hid_lookup_quirk);
diff --git a/drivers/hid/hid-rmi.c b/drivers/hid/hid-rmi.c
index 0f43c4292685..c6c05df3e8d2 100644
--- a/drivers/hid/hid-rmi.c
+++ b/drivers/hid/hid-rmi.c
@@ -731,6 +731,7 @@ static const struct hid_device_id rmi_id[] = {
731 { HID_USB_DEVICE(USB_VENDOR_ID_RAZER, USB_DEVICE_ID_RAZER_BLADE_14), 731 { HID_USB_DEVICE(USB_VENDOR_ID_RAZER, USB_DEVICE_ID_RAZER_BLADE_14),
732 .driver_data = RMI_DEVICE_HAS_PHYS_BUTTONS }, 732 .driver_data = RMI_DEVICE_HAS_PHYS_BUTTONS },
733 { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_X1_COVER) }, 733 { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_X1_COVER) },
734 { HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_REZEL) },
734 { HID_DEVICE(HID_BUS_ANY, HID_GROUP_RMI, HID_ANY_ID, HID_ANY_ID) }, 735 { HID_DEVICE(HID_BUS_ANY, HID_GROUP_RMI, HID_ANY_ID, HID_ANY_ID) },
735 { } 736 { }
736}; 737};
diff --git a/drivers/hid/hid-roccat-kovaplus.c b/drivers/hid/hid-roccat-kovaplus.c
index 43617fb28b87..317c9c2c0a7c 100644
--- a/drivers/hid/hid-roccat-kovaplus.c
+++ b/drivers/hid/hid-roccat-kovaplus.c
@@ -37,6 +37,8 @@ static uint kovaplus_convert_event_cpi(uint value)
37static void kovaplus_profile_activated(struct kovaplus_device *kovaplus, 37static void kovaplus_profile_activated(struct kovaplus_device *kovaplus,
38 uint new_profile_index) 38 uint new_profile_index)
39{ 39{
40 if (new_profile_index >= ARRAY_SIZE(kovaplus->profile_settings))
41 return;
40 kovaplus->actual_profile = new_profile_index; 42 kovaplus->actual_profile = new_profile_index;
41 kovaplus->actual_cpi = kovaplus->profile_settings[new_profile_index].cpi_startup_level; 43 kovaplus->actual_cpi = kovaplus->profile_settings[new_profile_index].cpi_startup_level;
42 kovaplus->actual_x_sensitivity = kovaplus->profile_settings[new_profile_index].sensitivity_x; 44 kovaplus->actual_x_sensitivity = kovaplus->profile_settings[new_profile_index].sensitivity_x;
diff --git a/drivers/hid/hid-sony.c b/drivers/hid/hid-sony.c
index b9dc3ac4d4aa..ccdc5f2d01b1 100644
--- a/drivers/hid/hid-sony.c
+++ b/drivers/hid/hid-sony.c
@@ -473,6 +473,7 @@ struct motion_output_report_02 {
473#define DS4_FEATURE_REPORT_0x02_SIZE 37 473#define DS4_FEATURE_REPORT_0x02_SIZE 37
474#define DS4_FEATURE_REPORT_0x05_SIZE 41 474#define DS4_FEATURE_REPORT_0x05_SIZE 41
475#define DS4_FEATURE_REPORT_0x81_SIZE 7 475#define DS4_FEATURE_REPORT_0x81_SIZE 7
476#define DS4_FEATURE_REPORT_0xA3_SIZE 49
476#define DS4_INPUT_REPORT_0x11_SIZE 78 477#define DS4_INPUT_REPORT_0x11_SIZE 78
477#define DS4_OUTPUT_REPORT_0x05_SIZE 32 478#define DS4_OUTPUT_REPORT_0x05_SIZE 32
478#define DS4_OUTPUT_REPORT_0x11_SIZE 78 479#define DS4_OUTPUT_REPORT_0x11_SIZE 78
@@ -544,6 +545,8 @@ struct sony_sc {
544 struct power_supply *battery; 545 struct power_supply *battery;
545 struct power_supply_desc battery_desc; 546 struct power_supply_desc battery_desc;
546 int device_id; 547 int device_id;
548 unsigned fw_version;
549 unsigned hw_version;
547 u8 *output_report_dmabuf; 550 u8 *output_report_dmabuf;
548 551
549#ifdef CONFIG_SONY_FF 552#ifdef CONFIG_SONY_FF
@@ -627,6 +630,29 @@ static ssize_t ds4_store_poll_interval(struct device *dev,
627static DEVICE_ATTR(bt_poll_interval, 0644, ds4_show_poll_interval, 630static DEVICE_ATTR(bt_poll_interval, 0644, ds4_show_poll_interval,
628 ds4_store_poll_interval); 631 ds4_store_poll_interval);
629 632
633static ssize_t sony_show_firmware_version(struct device *dev,
634 struct device_attribute
635 *attr, char *buf)
636{
637 struct hid_device *hdev = to_hid_device(dev);
638 struct sony_sc *sc = hid_get_drvdata(hdev);
639
640 return snprintf(buf, PAGE_SIZE, "0x%04x\n", sc->fw_version);
641}
642
643static DEVICE_ATTR(firmware_version, 0444, sony_show_firmware_version, NULL);
644
645static ssize_t sony_show_hardware_version(struct device *dev,
646 struct device_attribute
647 *attr, char *buf)
648{
649 struct hid_device *hdev = to_hid_device(dev);
650 struct sony_sc *sc = hid_get_drvdata(hdev);
651
652 return snprintf(buf, PAGE_SIZE, "0x%04x\n", sc->hw_version);
653}
654
655static DEVICE_ATTR(hardware_version, 0444, sony_show_hardware_version, NULL);
630 656
631static u8 *motion_fixup(struct hid_device *hdev, u8 *rdesc, 657static u8 *motion_fixup(struct hid_device *hdev, u8 *rdesc,
632 unsigned int *rsize) 658 unsigned int *rsize)
@@ -1646,6 +1672,31 @@ static void dualshock4_calibration_work(struct work_struct *work)
1646 spin_unlock_irqrestore(&sc->lock, flags); 1672 spin_unlock_irqrestore(&sc->lock, flags);
1647} 1673}
1648 1674
1675static int dualshock4_get_version_info(struct sony_sc *sc)
1676{
1677 u8 *buf;
1678 int ret;
1679
1680 buf = kmalloc(DS4_FEATURE_REPORT_0xA3_SIZE, GFP_KERNEL);
1681 if (!buf)
1682 return -ENOMEM;
1683
1684 ret = hid_hw_raw_request(sc->hdev, 0xA3, buf,
1685 DS4_FEATURE_REPORT_0xA3_SIZE,
1686 HID_FEATURE_REPORT,
1687 HID_REQ_GET_REPORT);
1688 if (ret < 0) {
1689 kfree(buf);
1690 return ret;
1691 }
1692
1693 sc->hw_version = get_unaligned_le16(&buf[35]);
1694 sc->fw_version = get_unaligned_le16(&buf[41]);
1695
1696 kfree(buf);
1697 return 0;
1698}
1699
1649static void sixaxis_set_leds_from_id(struct sony_sc *sc) 1700static void sixaxis_set_leds_from_id(struct sony_sc *sc)
1650{ 1701{
1651 static const u8 sixaxis_leds[10][4] = { 1702 static const u8 sixaxis_leds[10][4] = {
@@ -2399,10 +2450,7 @@ static int sony_check_add(struct sony_sc *sc)
2399 memcpy(sc->mac_address, &buf[1], sizeof(sc->mac_address)); 2450 memcpy(sc->mac_address, &buf[1], sizeof(sc->mac_address));
2400 2451
2401 snprintf(sc->hdev->uniq, sizeof(sc->hdev->uniq), 2452 snprintf(sc->hdev->uniq, sizeof(sc->hdev->uniq),
2402 "%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx", 2453 "%pMR", sc->mac_address);
2403 sc->mac_address[5], sc->mac_address[4],
2404 sc->mac_address[3], sc->mac_address[2],
2405 sc->mac_address[1], sc->mac_address[0]);
2406 } else if ((sc->quirks & SIXAXIS_CONTROLLER_USB) || 2454 } else if ((sc->quirks & SIXAXIS_CONTROLLER_USB) ||
2407 (sc->quirks & NAVIGATION_CONTROLLER_USB)) { 2455 (sc->quirks & NAVIGATION_CONTROLLER_USB)) {
2408 buf = kmalloc(SIXAXIS_REPORT_0xF2_SIZE, GFP_KERNEL); 2456 buf = kmalloc(SIXAXIS_REPORT_0xF2_SIZE, GFP_KERNEL);
@@ -2432,10 +2480,7 @@ static int sony_check_add(struct sony_sc *sc)
2432 sc->mac_address[5-n] = buf[4+n]; 2480 sc->mac_address[5-n] = buf[4+n];
2433 2481
2434 snprintf(sc->hdev->uniq, sizeof(sc->hdev->uniq), 2482 snprintf(sc->hdev->uniq, sizeof(sc->hdev->uniq),
2435 "%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx", 2483 "%pMR", sc->mac_address);
2436 sc->mac_address[5], sc->mac_address[4],
2437 sc->mac_address[3], sc->mac_address[2],
2438 sc->mac_address[1], sc->mac_address[0]);
2439 } else { 2484 } else {
2440 return 0; 2485 return 0;
2441 } 2486 }
@@ -2619,6 +2664,28 @@ static int sony_input_configured(struct hid_device *hdev,
2619 goto err_stop; 2664 goto err_stop;
2620 } 2665 }
2621 2666
2667 ret = dualshock4_get_version_info(sc);
2668 if (ret < 0) {
2669 hid_err(sc->hdev, "Failed to get version data from Dualshock 4\n");
2670 goto err_stop;
2671 }
2672
2673 ret = device_create_file(&sc->hdev->dev, &dev_attr_firmware_version);
2674 if (ret) {
2675 /* Make zero for cleanup reasons of sysfs entries. */
2676 sc->fw_version = 0;
2677 sc->hw_version = 0;
2678 hid_err(sc->hdev, "can't create sysfs firmware_version attribute err: %d\n", ret);
2679 goto err_stop;
2680 }
2681
2682 ret = device_create_file(&sc->hdev->dev, &dev_attr_hardware_version);
2683 if (ret) {
2684 sc->hw_version = 0;
2685 hid_err(sc->hdev, "can't create sysfs hardware_version attribute err: %d\n", ret);
2686 goto err_stop;
2687 }
2688
2622 /* 2689 /*
2623 * The Dualshock 4 touchpad supports 2 touches and has a 2690 * The Dualshock 4 touchpad supports 2 touches and has a
2624 * resolution of 1920x942 (44.86 dots/mm). 2691 * resolution of 1920x942 (44.86 dots/mm).
@@ -2695,6 +2762,10 @@ err_stop:
2695 */ 2762 */
2696 if (sc->ds4_bt_poll_interval) 2763 if (sc->ds4_bt_poll_interval)
2697 device_remove_file(&sc->hdev->dev, &dev_attr_bt_poll_interval); 2764 device_remove_file(&sc->hdev->dev, &dev_attr_bt_poll_interval);
2765 if (sc->fw_version)
2766 device_remove_file(&sc->hdev->dev, &dev_attr_firmware_version);
2767 if (sc->hw_version)
2768 device_remove_file(&sc->hdev->dev, &dev_attr_hardware_version);
2698 if (sc->quirks & SONY_LED_SUPPORT) 2769 if (sc->quirks & SONY_LED_SUPPORT)
2699 sony_leds_remove(sc); 2770 sony_leds_remove(sc);
2700 if (sc->quirks & SONY_BATTERY_SUPPORT) 2771 if (sc->quirks & SONY_BATTERY_SUPPORT)
@@ -2796,6 +2867,12 @@ static void sony_remove(struct hid_device *hdev)
2796 if (sc->quirks & DUALSHOCK4_CONTROLLER_BT) 2867 if (sc->quirks & DUALSHOCK4_CONTROLLER_BT)
2797 device_remove_file(&sc->hdev->dev, &dev_attr_bt_poll_interval); 2868 device_remove_file(&sc->hdev->dev, &dev_attr_bt_poll_interval);
2798 2869
2870 if (sc->fw_version)
2871 device_remove_file(&sc->hdev->dev, &dev_attr_firmware_version);
2872
2873 if (sc->hw_version)
2874 device_remove_file(&sc->hdev->dev, &dev_attr_hardware_version);
2875
2799 sony_cancel_work_sync(sc); 2876 sony_cancel_work_sync(sc);
2800 2877
2801 kfree(sc->output_report_dmabuf); 2878 kfree(sc->output_report_dmabuf);
diff --git a/drivers/hid/i2c-hid/i2c-hid.c b/drivers/hid/i2c-hid/i2c-hid.c
index e054ee43c1e2..7230243b94d3 100644
--- a/drivers/hid/i2c-hid/i2c-hid.c
+++ b/drivers/hid/i2c-hid/i2c-hid.c
@@ -934,11 +934,6 @@ static int i2c_hid_of_probe(struct i2c_client *client,
934 } 934 }
935 pdata->hid_descriptor_address = val; 935 pdata->hid_descriptor_address = val;
936 936
937 ret = of_property_read_u32(dev->of_node, "post-power-on-delay-ms",
938 &val);
939 if (!ret)
940 pdata->post_power_delay_ms = val;
941
942 return 0; 937 return 0;
943} 938}
944 939
@@ -955,6 +950,16 @@ static inline int i2c_hid_of_probe(struct i2c_client *client,
955} 950}
956#endif 951#endif
957 952
953static void i2c_hid_fwnode_probe(struct i2c_client *client,
954 struct i2c_hid_platform_data *pdata)
955{
956 u32 val;
957
958 if (!device_property_read_u32(&client->dev, "post-power-on-delay-ms",
959 &val))
960 pdata->post_power_delay_ms = val;
961}
962
958static int i2c_hid_probe(struct i2c_client *client, 963static int i2c_hid_probe(struct i2c_client *client,
959 const struct i2c_device_id *dev_id) 964 const struct i2c_device_id *dev_id)
960{ 965{
@@ -998,6 +1003,9 @@ static int i2c_hid_probe(struct i2c_client *client,
998 ihid->pdata = *platform_data; 1003 ihid->pdata = *platform_data;
999 } 1004 }
1000 1005
1006 /* Parse platform agnostic common properties from ACPI / device tree */
1007 i2c_hid_fwnode_probe(client, &ihid->pdata);
1008
1001 ihid->pdata.supply = devm_regulator_get(&client->dev, "vdd"); 1009 ihid->pdata.supply = devm_regulator_get(&client->dev, "vdd");
1002 if (IS_ERR(ihid->pdata.supply)) { 1010 if (IS_ERR(ihid->pdata.supply)) {
1003 ret = PTR_ERR(ihid->pdata.supply); 1011 ret = PTR_ERR(ihid->pdata.supply);
diff --git a/drivers/hid/intel-ish-hid/ipc/hw-ish.h b/drivers/hid/intel-ish-hid/ipc/hw-ish.h
index 2aac097c3f70..97869b7410eb 100644
--- a/drivers/hid/intel-ish-hid/ipc/hw-ish.h
+++ b/drivers/hid/intel-ish-hid/ipc/hw-ish.h
@@ -28,6 +28,7 @@
28#define SPT_Ax_DEVICE_ID 0x9D35 28#define SPT_Ax_DEVICE_ID 0x9D35
29#define CNL_Ax_DEVICE_ID 0x9DFC 29#define CNL_Ax_DEVICE_ID 0x9DFC
30#define GLK_Ax_DEVICE_ID 0x31A2 30#define GLK_Ax_DEVICE_ID 0x31A2
31#define CNL_H_DEVICE_ID 0xA37C
31 32
32#define REVISION_ID_CHT_A0 0x6 33#define REVISION_ID_CHT_A0 0x6
33#define REVISION_ID_CHT_Ax_SI 0x0 34#define REVISION_ID_CHT_Ax_SI 0x0
diff --git a/drivers/hid/intel-ish-hid/ipc/pci-ish.c b/drivers/hid/intel-ish-hid/ipc/pci-ish.c
index 20d824f74f99..582e449be9fe 100644
--- a/drivers/hid/intel-ish-hid/ipc/pci-ish.c
+++ b/drivers/hid/intel-ish-hid/ipc/pci-ish.c
@@ -37,6 +37,7 @@ static const struct pci_device_id ish_pci_tbl[] = {
37 {PCI_DEVICE(PCI_VENDOR_ID_INTEL, SPT_Ax_DEVICE_ID)}, 37 {PCI_DEVICE(PCI_VENDOR_ID_INTEL, SPT_Ax_DEVICE_ID)},
38 {PCI_DEVICE(PCI_VENDOR_ID_INTEL, CNL_Ax_DEVICE_ID)}, 38 {PCI_DEVICE(PCI_VENDOR_ID_INTEL, CNL_Ax_DEVICE_ID)},
39 {PCI_DEVICE(PCI_VENDOR_ID_INTEL, GLK_Ax_DEVICE_ID)}, 39 {PCI_DEVICE(PCI_VENDOR_ID_INTEL, GLK_Ax_DEVICE_ID)},
40 {PCI_DEVICE(PCI_VENDOR_ID_INTEL, CNL_H_DEVICE_ID)},
40 {0, } 41 {0, }
41}; 42};
42MODULE_DEVICE_TABLE(pci, ish_pci_tbl); 43MODULE_DEVICE_TABLE(pci, ish_pci_tbl);
diff --git a/drivers/hid/usbhid/Makefile b/drivers/hid/usbhid/Makefile
index 0ff227d0c033..b6349e30bd93 100644
--- a/drivers/hid/usbhid/Makefile
+++ b/drivers/hid/usbhid/Makefile
@@ -3,7 +3,7 @@
3# Makefile for the USB input drivers 3# Makefile for the USB input drivers
4# 4#
5 5
6usbhid-y := hid-core.o hid-quirks.o 6usbhid-y := hid-core.o
7usbhid-$(CONFIG_USB_HIDDEV) += hiddev.o 7usbhid-$(CONFIG_USB_HIDDEV) += hiddev.o
8usbhid-$(CONFIG_HID_PID) += hid-pidff.o 8usbhid-$(CONFIG_HID_PID) += hid-pidff.o
9 9
diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c
index 640dfb937c69..77c50cdfff97 100644
--- a/drivers/hid/usbhid/hid-core.c
+++ b/drivers/hid/usbhid/hid-core.c
@@ -978,8 +978,7 @@ static int usbhid_parse(struct hid_device *hid)
978 int num_descriptors; 978 int num_descriptors;
979 size_t offset = offsetof(struct hid_descriptor, desc); 979 size_t offset = offsetof(struct hid_descriptor, desc);
980 980
981 quirks = usbhid_lookup_quirk(le16_to_cpu(dev->descriptor.idVendor), 981 quirks = hid_lookup_quirk(hid);
982 le16_to_cpu(dev->descriptor.idProduct));
983 982
984 if (quirks & HID_QUIRK_IGNORE) 983 if (quirks & HID_QUIRK_IGNORE)
985 return -ENODEV; 984 return -ENODEV;
@@ -1328,8 +1327,8 @@ static int usbhid_probe(struct usb_interface *intf, const struct usb_device_id *
1328 hid->bus = BUS_USB; 1327 hid->bus = BUS_USB;
1329 hid->vendor = le16_to_cpu(dev->descriptor.idVendor); 1328 hid->vendor = le16_to_cpu(dev->descriptor.idVendor);
1330 hid->product = le16_to_cpu(dev->descriptor.idProduct); 1329 hid->product = le16_to_cpu(dev->descriptor.idProduct);
1330 hid->version = le16_to_cpu(dev->descriptor.bcdDevice);
1331 hid->name[0] = 0; 1331 hid->name[0] = 0;
1332 hid->quirks = usbhid_lookup_quirk(hid->vendor, hid->product);
1333 if (intf->cur_altsetting->desc.bInterfaceProtocol == 1332 if (intf->cur_altsetting->desc.bInterfaceProtocol ==
1334 USB_INTERFACE_PROTOCOL_MOUSE) 1333 USB_INTERFACE_PROTOCOL_MOUSE)
1335 hid->type = HID_TYPE_USBMOUSE; 1334 hid->type = HID_TYPE_USBMOUSE;
@@ -1641,7 +1640,7 @@ static int __init hid_init(void)
1641{ 1640{
1642 int retval = -ENOMEM; 1641 int retval = -ENOMEM;
1643 1642
1644 retval = usbhid_quirks_init(quirks_param); 1643 retval = hid_quirks_init(quirks_param, BUS_USB, MAX_USBHID_BOOT_QUIRKS);
1645 if (retval) 1644 if (retval)
1646 goto usbhid_quirks_init_fail; 1645 goto usbhid_quirks_init_fail;
1647 retval = usb_register(&hid_driver); 1646 retval = usb_register(&hid_driver);
@@ -1651,7 +1650,7 @@ static int __init hid_init(void)
1651 1650
1652 return 0; 1651 return 0;
1653usb_register_fail: 1652usb_register_fail:
1654 usbhid_quirks_exit(); 1653 hid_quirks_exit(BUS_USB);
1655usbhid_quirks_init_fail: 1654usbhid_quirks_init_fail:
1656 return retval; 1655 return retval;
1657} 1656}
@@ -1659,7 +1658,7 @@ usbhid_quirks_init_fail:
1659static void __exit hid_exit(void) 1658static void __exit hid_exit(void)
1660{ 1659{
1661 usb_deregister(&hid_driver); 1660 usb_deregister(&hid_driver);
1662 usbhid_quirks_exit(); 1661 hid_quirks_exit(BUS_USB);
1663} 1662}
1664 1663
1665module_init(hid_init); 1664module_init(hid_init);
diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c
deleted file mode 100644
index 331f7f34ec14..000000000000
--- a/drivers/hid/usbhid/hid-quirks.c
+++ /dev/null
@@ -1,402 +0,0 @@
1/*
2 * USB HID quirks support for Linux
3 *
4 * Copyright (c) 1999 Andreas Gal
5 * Copyright (c) 2000-2005 Vojtech Pavlik <vojtech@suse.cz>
6 * Copyright (c) 2005 Michael Haboustak <mike-@cinci.rr.com> for Concept2, Inc
7 * Copyright (c) 2006-2007 Jiri Kosina
8 * Copyright (c) 2007 Paul Walmsley
9 */
10
11/*
12 * This program is free software; you can redistribute it and/or modify it
13 * under the terms of the GNU General Public License as published by the Free
14 * Software Foundation; either version 2 of the License, or (at your option)
15 * any later version.
16 */
17
18#include <linux/hid.h>
19#include <linux/export.h>
20#include <linux/slab.h>
21
22#include "../hid-ids.h"
23
24/*
25 * Alphabetically sorted blacklist by quirk type.
26 */
27
28static const struct hid_blacklist {
29 __u16 idVendor;
30 __u16 idProduct;
31 __u32 quirks;
32} hid_blacklist[] = {
33 { USB_VENDOR_ID_AASHIMA, USB_DEVICE_ID_AASHIMA_GAMEPAD, HID_QUIRK_BADPAD },
34 { USB_VENDOR_ID_AASHIMA, USB_DEVICE_ID_AASHIMA_PREDATOR, HID_QUIRK_BADPAD },
35 { USB_VENDOR_ID_ALPS, USB_DEVICE_ID_IBM_GAMEPAD, HID_QUIRK_BADPAD },
36 { USB_VENDOR_ID_CHIC, USB_DEVICE_ID_CHIC_GAMEPAD, HID_QUIRK_BADPAD },
37 { USB_VENDOR_ID_DWAV, USB_DEVICE_ID_EGALAX_TOUCHCONTROLLER, HID_QUIRK_MULTI_INPUT | HID_QUIRK_NOGET },
38 { USB_VENDOR_ID_MOJO, USB_DEVICE_ID_RETRO_ADAPTER, HID_QUIRK_MULTI_INPUT },
39 { USB_VENDOR_ID_HAPP, USB_DEVICE_ID_UGCI_DRIVING, HID_QUIRK_BADPAD | HID_QUIRK_MULTI_INPUT },
40 { USB_VENDOR_ID_HAPP, USB_DEVICE_ID_UGCI_FLYING, HID_QUIRK_BADPAD | HID_QUIRK_MULTI_INPUT },
41 { USB_VENDOR_ID_HAPP, USB_DEVICE_ID_UGCI_FIGHTING, HID_QUIRK_BADPAD | HID_QUIRK_MULTI_INPUT },
42 { USB_VENDOR_ID_NATSU, USB_DEVICE_ID_NATSU_GAMEPAD, HID_QUIRK_BADPAD },
43 { USB_VENDOR_ID_NEC, USB_DEVICE_ID_NEC_USB_GAME_PAD, HID_QUIRK_BADPAD },
44 { USB_VENDOR_ID_NEXTWINDOW, USB_DEVICE_ID_NEXTWINDOW_TOUCHSCREEN, HID_QUIRK_MULTI_INPUT},
45 { USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_RUMBLEPAD, HID_QUIRK_BADPAD },
46 { USB_VENDOR_ID_TOPMAX, USB_DEVICE_ID_TOPMAX_COBRAPAD, HID_QUIRK_BADPAD },
47
48 { USB_VENDOR_ID_AFATECH, USB_DEVICE_ID_AFATECH_AF9016, HID_QUIRK_FULLSPEED_INTERVAL },
49
50 { USB_VENDOR_ID_EMS, USB_DEVICE_ID_EMS_TRIO_LINKER_PLUS_II, HID_QUIRK_MULTI_INPUT },
51 { USB_VENDOR_ID_ETURBOTOUCH, USB_DEVICE_ID_ETURBOTOUCH, HID_QUIRK_MULTI_INPUT },
52 { USB_VENDOR_ID_ETURBOTOUCH, USB_DEVICE_ID_ETURBOTOUCH_2968, HID_QUIRK_MULTI_INPUT },
53 { USB_VENDOR_ID_GREENASIA, USB_DEVICE_ID_GREENASIA_DUAL_USB_JOYPAD, HID_QUIRK_MULTI_INPUT },
54 { USB_VENDOR_ID_PANTHERLORD, USB_DEVICE_ID_PANTHERLORD_TWIN_USB_JOYSTICK, HID_QUIRK_MULTI_INPUT | HID_QUIRK_SKIP_OUTPUT_REPORTS },
55 { USB_VENDOR_ID_TOUCHPACK, USB_DEVICE_ID_TOUCHPACK_RTS, HID_QUIRK_MULTI_INPUT },
56
57 { USB_VENDOR_ID_AIREN, USB_DEVICE_ID_AIREN_SLIMPLUS, HID_QUIRK_NOGET },
58 { USB_VENDOR_ID_AKAI, USB_DEVICE_ID_AKAI_MPKMINI2, HID_QUIRK_NO_INIT_REPORTS },
59 { USB_VENDOR_ID_AKAI_09E8, USB_DEVICE_ID_AKAI_09E8_MIDIMIX, HID_QUIRK_NO_INIT_REPORTS },
60 { USB_VENDOR_ID_AMI, USB_DEVICE_ID_AMI_VIRT_KEYBOARD_AND_MOUSE, HID_QUIRK_ALWAYS_POLL },
61 { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_UC100KM, HID_QUIRK_NOGET },
62 { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_CS124U, HID_QUIRK_NOGET },
63 { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_2PORTKVM, HID_QUIRK_NOGET },
64 { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_4PORTKVM, HID_QUIRK_NOGET },
65 { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_4PORTKVMC, HID_QUIRK_NOGET },
66 { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_CS682, HID_QUIRK_NOGET },
67 { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_CS692, HID_QUIRK_NOGET },
68 { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_CS1758, HID_QUIRK_NOGET },
69 { USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_FIGHTERSTICK, HID_QUIRK_NOGET },
70 { USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_COMBATSTICK, HID_QUIRK_NOGET },
71 { USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_FLIGHT_SIM_ECLIPSE_YOKE, HID_QUIRK_NOGET },
72 { USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_FLIGHT_SIM_YOKE, HID_QUIRK_NOGET },
73 { USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_PRO_THROTTLE, HID_QUIRK_NOGET },
74 { USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_PRO_PEDALS, HID_QUIRK_NOGET },
75 { USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_3AXIS_5BUTTON_STICK, HID_QUIRK_NOGET },
76 { USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_AXIS_295, HID_QUIRK_NOGET },
77 { USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_PIXART_USB_OPTICAL_MOUSE, HID_QUIRK_ALWAYS_POLL },
78 { USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K70R, HID_QUIRK_NO_INIT_REPORTS },
79 { USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_M65RGB, HID_QUIRK_NO_INIT_REPORTS },
80 { USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K95RGB, HID_QUIRK_NO_INIT_REPORTS | HID_QUIRK_ALWAYS_POLL },
81 { USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K70RGB, HID_QUIRK_NO_INIT_REPORTS },
82 { USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K65RGB, HID_QUIRK_NO_INIT_REPORTS },
83 { USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_STRAFE, HID_QUIRK_NO_INIT_REPORTS | HID_QUIRK_ALWAYS_POLL },
84 { USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K70RGB_RAPIDFIRE, HID_QUIRK_NO_INIT_REPORTS | HID_QUIRK_ALWAYS_POLL },
85 { USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K65RGB_RAPIDFIRE, HID_QUIRK_NO_INIT_REPORTS | HID_QUIRK_ALWAYS_POLL },
86 { USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_SCIMITAR_PRO_RGB, HID_QUIRK_NO_INIT_REPORTS | HID_QUIRK_ALWAYS_POLL },
87 { USB_VENDOR_ID_CREATIVELABS, USB_DEVICE_ID_CREATIVE_SB_OMNI_SURROUND_51, HID_QUIRK_NOGET },
88 { USB_VENDOR_ID_DELL, USB_DEVICE_ID_DELL_PIXART_USB_OPTICAL_MOUSE, HID_QUIRK_ALWAYS_POLL },
89 { USB_VENDOR_ID_DMI, USB_DEVICE_ID_DMI_ENC, HID_QUIRK_NOGET },
90 { USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_WIIU, HID_QUIRK_MULTI_INPUT },
91 { USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_PS3, HID_QUIRK_MULTI_INPUT },
92 { USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_DOLPHINBAR, HID_QUIRK_MULTI_INPUT },
93 { USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_GAMECUBE1, HID_QUIRK_MULTI_INPUT },
94 { USB_VENDOR_ID_ELAN, HID_ANY_ID, HID_QUIRK_ALWAYS_POLL },
95 { USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_TS2700, HID_QUIRK_NOGET },
96 { USB_VENDOR_ID_FORMOSA, USB_DEVICE_ID_FORMOSA_IR_RECEIVER, HID_QUIRK_NO_INIT_REPORTS },
97 { USB_VENDOR_ID_FREESCALE, USB_DEVICE_ID_FREESCALE_MX28, HID_QUIRK_NOGET },
98 { USB_VENDOR_ID_FUTABA, USB_DEVICE_ID_LED_DISPLAY, HID_QUIRK_NO_INIT_REPORTS },
99 { USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_LOGITECH_OEM_USB_OPTICAL_MOUSE_0A4A, HID_QUIRK_ALWAYS_POLL },
100 { USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_LOGITECH_OEM_USB_OPTICAL_MOUSE_0B4A, HID_QUIRK_ALWAYS_POLL },
101 { USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTICAL_MOUSE, HID_QUIRK_ALWAYS_POLL },
102 { USB_VENDOR_ID_IDEACOM, USB_DEVICE_ID_IDEACOM_IDC6680, HID_QUIRK_MULTI_INPUT },
103 { USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_C007, HID_QUIRK_ALWAYS_POLL },
104 { USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_C077, HID_QUIRK_ALWAYS_POLL },
105 { USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_KEYBOARD_G710_PLUS, HID_QUIRK_NOGET },
106 { USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOUSE_C01A, HID_QUIRK_ALWAYS_POLL },
107 { USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOUSE_C05A, HID_QUIRK_ALWAYS_POLL },
108 { USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOUSE_C06A, HID_QUIRK_ALWAYS_POLL },
109 { USB_VENDOR_ID_MGE, USB_DEVICE_ID_MGE_UPS, HID_QUIRK_NOGET },
110 { USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_SURFACE_PRO_2, HID_QUIRK_NO_INIT_REPORTS },
111 { USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_2, HID_QUIRK_NO_INIT_REPORTS },
112 { USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TOUCH_COVER_2, HID_QUIRK_NO_INIT_REPORTS },
113 { USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_POWER_COVER, HID_QUIRK_NO_INIT_REPORTS },
114 { USB_VENDOR_ID_MSI, USB_DEVICE_ID_MSI_GT683R_LED_PANEL, HID_QUIRK_NO_INIT_REPORTS },
115 { USB_VENDOR_ID_NEXIO, USB_DEVICE_ID_NEXIO_MULTITOUCH_PTI0750, HID_QUIRK_NO_INIT_REPORTS },
116 { USB_VENDOR_ID_NOVATEK, USB_DEVICE_ID_NOVATEK_MOUSE, HID_QUIRK_NO_INIT_REPORTS },
117 { USB_VENDOR_ID_PENMOUNT, USB_DEVICE_ID_PENMOUNT_1610, HID_QUIRK_NOGET },
118 { USB_VENDOR_ID_PENMOUNT, USB_DEVICE_ID_PENMOUNT_1640, HID_QUIRK_NOGET },
119 { USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_USB_OPTICAL_MOUSE, HID_QUIRK_ALWAYS_POLL },
120 { USB_VENDOR_ID_KYE, USB_DEVICE_ID_PIXART_USB_OPTICAL_MOUSE_ID2, HID_QUIRK_ALWAYS_POLL },
121 { USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN, HID_QUIRK_NO_INIT_REPORTS },
122 { USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN1, HID_QUIRK_NO_INIT_REPORTS },
123 { USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN2, HID_QUIRK_NO_INIT_REPORTS },
124 { USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_MOUSE_4D22, HID_QUIRK_ALWAYS_POLL },
125 { USB_VENDOR_ID_PRODIGE, USB_DEVICE_ID_PRODIGE_CORDLESS, HID_QUIRK_NOGET },
126 { USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3001, HID_QUIRK_NOGET },
127 { USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3003, HID_QUIRK_NOGET },
128 { USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3008, HID_QUIRK_NOGET },
129 { USB_VENDOR_ID_REALTEK, USB_DEVICE_ID_REALTEK_READER, HID_QUIRK_NO_INIT_REPORTS },
130 { USB_VENDOR_ID_SENNHEISER, USB_DEVICE_ID_SENNHEISER_BTD500USB, HID_QUIRK_NOGET },
131 { USB_VENDOR_ID_SIGMATEL, USB_DEVICE_ID_SIGMATEL_STMP3780, HID_QUIRK_NOGET },
132 { USB_VENDOR_ID_SIS_TOUCH, USB_DEVICE_ID_SIS9200_TOUCH, HID_QUIRK_NOGET },
133 { USB_VENDOR_ID_SIS_TOUCH, USB_DEVICE_ID_SIS817_TOUCH, HID_QUIRK_NOGET },
134 { USB_VENDOR_ID_SIS_TOUCH, USB_DEVICE_ID_SIS_TS, HID_QUIRK_NO_INIT_REPORTS },
135 { USB_VENDOR_ID_SIS_TOUCH, USB_DEVICE_ID_SIS1030_TOUCH, HID_QUIRK_NOGET },
136 { USB_VENDOR_ID_SUN, USB_DEVICE_ID_RARITAN_KVM_DONGLE, HID_QUIRK_NOGET },
137 { USB_VENDOR_ID_SYMBOL, USB_DEVICE_ID_SYMBOL_SCANNER_1, HID_QUIRK_NOGET },
138 { USB_VENDOR_ID_SYMBOL, USB_DEVICE_ID_SYMBOL_SCANNER_2, HID_QUIRK_NOGET },
139 { USB_VENDOR_ID_TPV, USB_DEVICE_ID_TPV_OPTICAL_TOUCHSCREEN_8882, HID_QUIRK_NOGET },
140 { USB_VENDOR_ID_TPV, USB_DEVICE_ID_TPV_OPTICAL_TOUCHSCREEN_8883, HID_QUIRK_NOGET },
141 { USB_VENDOR_ID_TURBOX, USB_DEVICE_ID_TURBOX_KEYBOARD, HID_QUIRK_NOGET },
142 { USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_KNA5, HID_QUIRK_MULTI_INPUT },
143 { USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_TWA60, HID_QUIRK_MULTI_INPUT },
144 { USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_MEDIA_TABLET_10_6_INCH, HID_QUIRK_MULTI_INPUT },
145 { USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_MEDIA_TABLET_14_1_INCH, HID_QUIRK_MULTI_INPUT },
146 { USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_SIRIUS_BATTERY_FREE_TABLET, HID_QUIRK_MULTI_INPUT },
147 { USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_QUAD_USB_JOYPAD, HID_QUIRK_NOGET | HID_QUIRK_MULTI_INPUT },
148
149 { USB_VENDOR_ID_WISEGROUP_LTD2, USB_DEVICE_ID_SMARTJOY_DUAL_PLUS, HID_QUIRK_NOGET | HID_QUIRK_MULTI_INPUT },
150
151 { USB_VENDOR_ID_PI_ENGINEERING, USB_DEVICE_ID_PI_ENGINEERING_VEC_USB_FOOTPEDAL, HID_QUIRK_HIDINPUT_FORCE },
152
153 { USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_MULTI_TOUCH, HID_QUIRK_MULTI_INPUT },
154 { USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_WIRELESS, HID_QUIRK_MULTI_INPUT },
155 { USB_VENDOR_ID_SIGMA_MICRO, USB_DEVICE_ID_SIGMA_MICRO_KEYBOARD, HID_QUIRK_NO_INIT_REPORTS },
156 { USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_MOUSEPEN_I608X, HID_QUIRK_MULTI_INPUT },
157 { USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_MOUSEPEN_I608X_V2, HID_QUIRK_MULTI_INPUT },
158 { USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_M610X, HID_QUIRK_MULTI_INPUT },
159 { USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_PENSKETCH_M912, HID_QUIRK_MULTI_INPUT },
160 { USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_DUOSENSE, HID_QUIRK_NO_INIT_REPORTS },
161 { USB_VENDOR_ID_SEMICO, USB_DEVICE_ID_SEMICO_USB_KEYKOARD, HID_QUIRK_NO_INIT_REPORTS },
162 { USB_VENDOR_ID_SEMICO, USB_DEVICE_ID_SEMICO_USB_KEYKOARD2, HID_QUIRK_NO_INIT_REPORTS },
163 { USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_LTS1, HID_QUIRK_NO_INIT_REPORTS },
164 { USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_LTS2, HID_QUIRK_NO_INIT_REPORTS },
165 { USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_HD, HID_QUIRK_NO_INIT_REPORTS },
166 { USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_QUAD_HD, HID_QUIRK_NO_INIT_REPORTS },
167 { USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_TP_V103, HID_QUIRK_NO_INIT_REPORTS },
168 { USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_KEYBOARD_A096, HID_QUIRK_NO_INIT_REPORTS },
169 { USB_VENDOR_ID_MULTIPLE_1781, USB_DEVICE_ID_RAPHNET_4NES4SNES_OLD, HID_QUIRK_MULTI_INPUT },
170 { USB_VENDOR_ID_DRACAL_RAPHNET, USB_DEVICE_ID_RAPHNET_2NES2SNES, HID_QUIRK_MULTI_INPUT },
171 { USB_VENDOR_ID_DRACAL_RAPHNET, USB_DEVICE_ID_RAPHNET_4NES4SNES, HID_QUIRK_MULTI_INPUT },
172 { USB_VENDOR_ID_INNOMEDIA, USB_DEVICE_ID_INNEX_GENESIS_ATARI, HID_QUIRK_MULTI_INPUT },
173 { USB_VENDOR_ID_MCS, USB_DEVICE_ID_MCS_GAMEPADBLOCK, HID_QUIRK_MULTI_INPUT },
174
175 { 0, 0 }
176};
177
178/* Dynamic HID quirks list - specified at runtime */
179struct quirks_list_struct {
180 struct hid_blacklist hid_bl_item;
181 struct list_head node;
182};
183
184static LIST_HEAD(dquirks_list);
185static DECLARE_RWSEM(dquirks_rwsem);
186
187/* Runtime ("dynamic") quirks manipulation functions */
188
189/**
190 * usbhid_exists_dquirk: find any dynamic quirks for a USB HID device
191 * @idVendor: the 16-bit USB vendor ID, in native byteorder
192 * @idProduct: the 16-bit USB product ID, in native byteorder
193 *
194 * Description:
195 * Scans dquirks_list for a matching dynamic quirk and returns
196 * the pointer to the relevant struct hid_blacklist if found.
197 * Must be called with a read lock held on dquirks_rwsem.
198 *
199 * Returns: NULL if no quirk found, struct hid_blacklist * if found.
200 */
201static struct hid_blacklist *usbhid_exists_dquirk(const u16 idVendor,
202 const u16 idProduct)
203{
204 struct quirks_list_struct *q;
205 struct hid_blacklist *bl_entry = NULL;
206
207 list_for_each_entry(q, &dquirks_list, node) {
208 if (q->hid_bl_item.idVendor == idVendor &&
209 q->hid_bl_item.idProduct == idProduct) {
210 bl_entry = &q->hid_bl_item;
211 break;
212 }
213 }
214
215 if (bl_entry != NULL)
216 dbg_hid("Found dynamic quirk 0x%x for USB HID vendor 0x%hx prod 0x%hx\n",
217 bl_entry->quirks, bl_entry->idVendor,
218 bl_entry->idProduct);
219
220 return bl_entry;
221}
222
223
224/**
225 * usbhid_modify_dquirk: add/replace a HID quirk
226 * @idVendor: the 16-bit USB vendor ID, in native byteorder
227 * @idProduct: the 16-bit USB product ID, in native byteorder
228 * @quirks: the u32 quirks value to add/replace
229 *
230 * Description:
231 * If an dynamic quirk exists in memory for this (idVendor,
232 * idProduct) pair, replace its quirks value with what was
233 * provided. Otherwise, add the quirk to the dynamic quirks list.
234 *
235 * Returns: 0 OK, -error on failure.
236 */
237static int usbhid_modify_dquirk(const u16 idVendor, const u16 idProduct,
238 const u32 quirks)
239{
240 struct quirks_list_struct *q_new, *q;
241 int list_edited = 0;
242
243 if (!idVendor) {
244 dbg_hid("Cannot add a quirk with idVendor = 0\n");
245 return -EINVAL;
246 }
247
248 q_new = kmalloc(sizeof(struct quirks_list_struct), GFP_KERNEL);
249 if (!q_new)
250 return -ENOMEM;
251
252 q_new->hid_bl_item.idVendor = idVendor;
253 q_new->hid_bl_item.idProduct = idProduct;
254 q_new->hid_bl_item.quirks = quirks;
255
256 down_write(&dquirks_rwsem);
257
258 list_for_each_entry(q, &dquirks_list, node) {
259
260 if (q->hid_bl_item.idVendor == idVendor &&
261 q->hid_bl_item.idProduct == idProduct) {
262
263 list_replace(&q->node, &q_new->node);
264 kfree(q);
265 list_edited = 1;
266 break;
267
268 }
269
270 }
271
272 if (!list_edited)
273 list_add_tail(&q_new->node, &dquirks_list);
274
275 up_write(&dquirks_rwsem);
276
277 return 0;
278}
279
280/**
281 * usbhid_remove_all_dquirks: remove all runtime HID quirks from memory
282 *
283 * Description:
284 * Free all memory associated with dynamic quirks - called before
285 * module unload.
286 *
287 */
288static void usbhid_remove_all_dquirks(void)
289{
290 struct quirks_list_struct *q, *temp;
291
292 down_write(&dquirks_rwsem);
293 list_for_each_entry_safe(q, temp, &dquirks_list, node) {
294 list_del(&q->node);
295 kfree(q);
296 }
297 up_write(&dquirks_rwsem);
298
299}
300
301/**
302 * usbhid_quirks_init: apply USB HID quirks specified at module load time
303 */
304int usbhid_quirks_init(char **quirks_param)
305{
306 u16 idVendor, idProduct;
307 u32 quirks;
308 int n = 0, m;
309
310 for (; n < MAX_USBHID_BOOT_QUIRKS && quirks_param[n]; n++) {
311
312 m = sscanf(quirks_param[n], "0x%hx:0x%hx:0x%x",
313 &idVendor, &idProduct, &quirks);
314
315 if (m != 3 ||
316 usbhid_modify_dquirk(idVendor, idProduct, quirks) != 0) {
317 pr_warn("Could not parse HID quirk module param %s\n",
318 quirks_param[n]);
319 }
320 }
321
322 return 0;
323}
324
325/**
326 * usbhid_quirks_exit: release memory associated with dynamic_quirks
327 *
328 * Description:
329 * Release all memory associated with dynamic quirks. Called upon
330 * module unload.
331 *
332 * Returns: nothing
333 */
334void usbhid_quirks_exit(void)
335{
336 usbhid_remove_all_dquirks();
337}
338
339/**
340 * usbhid_exists_squirk: return any static quirks for a USB HID device
341 * @idVendor: the 16-bit USB vendor ID, in native byteorder
342 * @idProduct: the 16-bit USB product ID, in native byteorder
343 *
344 * Description:
345 * Given a USB vendor ID and product ID, return a pointer to
346 * the hid_blacklist entry associated with that device.
347 *
348 * Returns: pointer if quirk found, or NULL if no quirks found.
349 */
350static const struct hid_blacklist *usbhid_exists_squirk(const u16 idVendor,
351 const u16 idProduct)
352{
353 const struct hid_blacklist *bl_entry = NULL;
354 int n = 0;
355
356 for (; hid_blacklist[n].idVendor; n++)
357 if (hid_blacklist[n].idVendor == idVendor &&
358 (hid_blacklist[n].idProduct == (__u16) HID_ANY_ID ||
359 hid_blacklist[n].idProduct == idProduct))
360 bl_entry = &hid_blacklist[n];
361
362 if (bl_entry != NULL)
363 dbg_hid("Found squirk 0x%x for USB HID vendor 0x%hx prod 0x%hx\n",
364 bl_entry->quirks, bl_entry->idVendor,
365 bl_entry->idProduct);
366 return bl_entry;
367}
368
369/**
370 * usbhid_lookup_quirk: return any quirks associated with a USB HID device
371 * @idVendor: the 16-bit USB vendor ID, in native byteorder
372 * @idProduct: the 16-bit USB product ID, in native byteorder
373 *
374 * Description:
375 * Given a USB vendor ID and product ID, return any quirks associated
376 * with that device.
377 *
378 * Returns: a u32 quirks value.
379 */
380u32 usbhid_lookup_quirk(const u16 idVendor, const u16 idProduct)
381{
382 u32 quirks = 0;
383 const struct hid_blacklist *bl_entry = NULL;
384
385 /* NCR devices must not be queried for reports */
386 if (idVendor == USB_VENDOR_ID_NCR &&
387 idProduct >= USB_DEVICE_ID_NCR_FIRST &&
388 idProduct <= USB_DEVICE_ID_NCR_LAST)
389 return HID_QUIRK_NO_INIT_REPORTS;
390
391 down_read(&dquirks_rwsem);
392 bl_entry = usbhid_exists_dquirk(idVendor, idProduct);
393 if (!bl_entry)
394 bl_entry = usbhid_exists_squirk(idVendor, idProduct);
395 if (bl_entry)
396 quirks = bl_entry->quirks;
397 up_read(&dquirks_rwsem);
398
399 return quirks;
400}
401
402EXPORT_SYMBOL_GPL(usbhid_lookup_quirk);
diff --git a/drivers/hid/wacom_sys.c b/drivers/hid/wacom_sys.c
index ee71ad9b6cc1..409543160af7 100644
--- a/drivers/hid/wacom_sys.c
+++ b/drivers/hid/wacom_sys.c
@@ -56,6 +56,107 @@ static int wacom_set_report(struct hid_device *hdev, u8 type, u8 *buf,
56 return retval; 56 return retval;
57} 57}
58 58
59static void wacom_wac_queue_insert(struct hid_device *hdev,
60 struct kfifo_rec_ptr_2 *fifo,
61 u8 *raw_data, int size)
62{
63 bool warned = false;
64
65 while (kfifo_avail(fifo) < size) {
66 if (!warned)
67 hid_warn(hdev, "%s: kfifo has filled, starting to drop events\n", __func__);
68 warned = true;
69
70 kfifo_skip(fifo);
71 }
72
73 kfifo_in(fifo, raw_data, size);
74}
75
76static void wacom_wac_queue_flush(struct hid_device *hdev,
77 struct kfifo_rec_ptr_2 *fifo)
78{
79 while (!kfifo_is_empty(fifo)) {
80 u8 buf[WACOM_PKGLEN_MAX];
81 int size;
82 int err;
83
84 size = kfifo_out(fifo, buf, sizeof(buf));
85 err = hid_report_raw_event(hdev, HID_INPUT_REPORT, buf, size, false);
86 if (err) {
87 hid_warn(hdev, "%s: unable to flush event due to error %d\n",
88 __func__, err);
89 }
90 }
91}
92
93static int wacom_wac_pen_serial_enforce(struct hid_device *hdev,
94 struct hid_report *report, u8 *raw_data, int size)
95{
96 struct wacom *wacom = hid_get_drvdata(hdev);
97 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
98 struct wacom_features *features = &wacom_wac->features;
99 bool flush = false;
100 bool insert = false;
101 int i, j;
102
103 if (wacom_wac->serial[0] || !(features->quirks & WACOM_QUIRK_TOOLSERIAL))
104 return 0;
105
106 /* Queue events which have invalid tool type or serial number */
107 for (i = 0; i < report->maxfield; i++) {
108 for (j = 0; j < report->field[i]->maxusage; j++) {
109 struct hid_field *field = report->field[i];
110 struct hid_usage *usage = &field->usage[j];
111 unsigned int equivalent_usage = wacom_equivalent_usage(usage->hid);
112 unsigned int offset;
113 unsigned int size;
114 unsigned int value;
115
116 if (equivalent_usage != HID_DG_INRANGE &&
117 equivalent_usage != HID_DG_TOOLSERIALNUMBER &&
118 equivalent_usage != WACOM_HID_WD_SERIALHI &&
119 equivalent_usage != WACOM_HID_WD_TOOLTYPE)
120 continue;
121
122 offset = field->report_offset;
123 size = field->report_size;
124 value = hid_field_extract(hdev, raw_data+1, offset + j * size, size);
125
126 /* If we go out of range, we need to flush the queue ASAP */
127 if (equivalent_usage == HID_DG_INRANGE)
128 value = !value;
129
130 if (value) {
131 flush = true;
132 switch (equivalent_usage) {
133 case HID_DG_TOOLSERIALNUMBER:
134 wacom_wac->serial[0] = value;
135 break;
136
137 case WACOM_HID_WD_SERIALHI:
138 wacom_wac->serial[0] |= ((__u64)value) << 32;
139 break;
140
141 case WACOM_HID_WD_TOOLTYPE:
142 wacom_wac->id[0] = value;
143 break;
144 }
145 }
146 else {
147 insert = true;
148 }
149 }
150 }
151
152 if (flush)
153 wacom_wac_queue_flush(hdev, &wacom_wac->pen_fifo);
154 else if (insert)
155 wacom_wac_queue_insert(hdev, &wacom_wac->pen_fifo, raw_data, size);
156
157 return insert && !flush;
158}
159
59static int wacom_raw_event(struct hid_device *hdev, struct hid_report *report, 160static int wacom_raw_event(struct hid_device *hdev, struct hid_report *report,
60 u8 *raw_data, int size) 161 u8 *raw_data, int size)
61{ 162{
@@ -64,6 +165,9 @@ static int wacom_raw_event(struct hid_device *hdev, struct hid_report *report,
64 if (size > WACOM_PKGLEN_MAX) 165 if (size > WACOM_PKGLEN_MAX)
65 return 1; 166 return 1;
66 167
168 if (wacom_wac_pen_serial_enforce(hdev, report, raw_data, size))
169 return -1;
170
67 memcpy(wacom->wacom_wac.data, raw_data, size); 171 memcpy(wacom->wacom_wac.data, raw_data, size);
68 172
69 wacom_wac_irq(&wacom->wacom_wac, size); 173 wacom_wac_irq(&wacom->wacom_wac, size);
@@ -2347,23 +2451,23 @@ static void wacom_remote_destroy_one(struct wacom *wacom, unsigned int index)
2347 int i; 2451 int i;
2348 unsigned long flags; 2452 unsigned long flags;
2349 2453
2350 spin_lock_irqsave(&remote->remote_lock, flags); 2454 for (i = 0; i < WACOM_MAX_REMOTES; i++) {
2351 remote->remotes[index].registered = false; 2455 if (remote->remotes[i].serial == serial) {
2352 spin_unlock_irqrestore(&remote->remote_lock, flags);
2353 2456
2354 if (remote->remotes[index].battery.battery) 2457 spin_lock_irqsave(&remote->remote_lock, flags);
2355 devres_release_group(&wacom->hdev->dev, 2458 remote->remotes[i].registered = false;
2356 &remote->remotes[index].battery.bat_desc); 2459 spin_unlock_irqrestore(&remote->remote_lock, flags);
2357 2460
2358 if (remote->remotes[index].group.name) 2461 if (remote->remotes[i].battery.battery)
2359 devres_release_group(&wacom->hdev->dev, 2462 devres_release_group(&wacom->hdev->dev,
2360 &remote->remotes[index]); 2463 &remote->remotes[i].battery.bat_desc);
2464
2465 if (remote->remotes[i].group.name)
2466 devres_release_group(&wacom->hdev->dev,
2467 &remote->remotes[i]);
2361 2468
2362 for (i = 0; i < WACOM_MAX_REMOTES; i++) {
2363 if (remote->remotes[i].serial == serial) {
2364 remote->remotes[i].serial = 0; 2469 remote->remotes[i].serial = 0;
2365 remote->remotes[i].group.name = NULL; 2470 remote->remotes[i].group.name = NULL;
2366 remote->remotes[i].registered = false;
2367 remote->remotes[i].battery.battery = NULL; 2471 remote->remotes[i].battery.battery = NULL;
2368 wacom->led.groups[i].select = WACOM_STATUS_UNKNOWN; 2472 wacom->led.groups[i].select = WACOM_STATUS_UNKNOWN;
2369 } 2473 }
@@ -2580,6 +2684,10 @@ static int wacom_probe(struct hid_device *hdev,
2580 goto fail; 2684 goto fail;
2581 } 2685 }
2582 2686
2687 error = kfifo_alloc(&wacom_wac->pen_fifo, WACOM_PKGLEN_MAX, GFP_KERNEL);
2688 if (error)
2689 goto fail;
2690
2583 wacom_wac->hid_data.inputmode = -1; 2691 wacom_wac->hid_data.inputmode = -1;
2584 wacom_wac->mode_report = -1; 2692 wacom_wac->mode_report = -1;
2585 2693
@@ -2643,6 +2751,8 @@ static void wacom_remove(struct hid_device *hdev)
2643 if (wacom->wacom_wac.features.type != REMOTE) 2751 if (wacom->wacom_wac.features.type != REMOTE)
2644 wacom_release_resources(wacom); 2752 wacom_release_resources(wacom);
2645 2753
2754 kfifo_free(&wacom_wac->pen_fifo);
2755
2646 hid_set_drvdata(hdev, NULL); 2756 hid_set_drvdata(hdev, NULL);
2647} 2757}
2648 2758
diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c
index 16af6886e828..90c38a0523e9 100644
--- a/drivers/hid/wacom_wac.c
+++ b/drivers/hid/wacom_wac.c
@@ -1924,7 +1924,6 @@ static void wacom_wac_pad_event(struct hid_device *hdev, struct hid_field *field
1924 struct wacom_features *features = &wacom_wac->features; 1924 struct wacom_features *features = &wacom_wac->features;
1925 unsigned equivalent_usage = wacom_equivalent_usage(usage->hid); 1925 unsigned equivalent_usage = wacom_equivalent_usage(usage->hid);
1926 int i; 1926 int i;
1927 bool is_touch_on = value;
1928 bool do_report = false; 1927 bool do_report = false;
1929 1928
1930 /* 1929 /*
@@ -1969,16 +1968,17 @@ static void wacom_wac_pad_event(struct hid_device *hdev, struct hid_field *field
1969 break; 1968 break;
1970 1969
1971 case WACOM_HID_WD_MUTE_DEVICE: 1970 case WACOM_HID_WD_MUTE_DEVICE:
1972 if (wacom_wac->shared->touch_input && value) {
1973 wacom_wac->shared->is_touch_on = !wacom_wac->shared->is_touch_on;
1974 is_touch_on = wacom_wac->shared->is_touch_on;
1975 }
1976
1977 /* fall through*/
1978 case WACOM_HID_WD_TOUCHONOFF: 1971 case WACOM_HID_WD_TOUCHONOFF:
1979 if (wacom_wac->shared->touch_input) { 1972 if (wacom_wac->shared->touch_input) {
1973 bool *is_touch_on = &wacom_wac->shared->is_touch_on;
1974
1975 if (equivalent_usage == WACOM_HID_WD_MUTE_DEVICE && value)
1976 *is_touch_on = !(*is_touch_on);
1977 else if (equivalent_usage == WACOM_HID_WD_TOUCHONOFF)
1978 *is_touch_on = value;
1979
1980 input_report_switch(wacom_wac->shared->touch_input, 1980 input_report_switch(wacom_wac->shared->touch_input,
1981 SW_MUTE_DEVICE, !is_touch_on); 1981 SW_MUTE_DEVICE, !(*is_touch_on));
1982 input_sync(wacom_wac->shared->touch_input); 1982 input_sync(wacom_wac->shared->touch_input);
1983 } 1983 }
1984 break; 1984 break;
@@ -2085,7 +2085,29 @@ static void wacom_wac_pen_usage_mapping(struct hid_device *hdev,
2085 wacom_map_usage(input, usage, field, EV_KEY, BTN_STYLUS2, 0); 2085 wacom_map_usage(input, usage, field, EV_KEY, BTN_STYLUS2, 0);
2086 break; 2086 break;
2087 case HID_DG_TOOLSERIALNUMBER: 2087 case HID_DG_TOOLSERIALNUMBER:
2088 features->quirks |= WACOM_QUIRK_TOOLSERIAL;
2088 wacom_map_usage(input, usage, field, EV_MSC, MSC_SERIAL, 0); 2089 wacom_map_usage(input, usage, field, EV_MSC, MSC_SERIAL, 0);
2090
2091 /* Adjust AES usages to match modern convention */
2092 if (usage->hid == WACOM_HID_WT_SERIALNUMBER && field->report_size == 16) {
2093 if (field->index + 2 < field->report->maxfield) {
2094 struct hid_field *a = field->report->field[field->index + 1];
2095 struct hid_field *b = field->report->field[field->index + 2];
2096
2097 if (a->maxusage > 0 && a->usage[0].hid == HID_DG_TOOLSERIALNUMBER && a->report_size == 32 &&
2098 b->maxusage > 0 && b->usage[0].hid == 0xFF000000 && b->report_size == 8) {
2099 features->quirks |= WACOM_QUIRK_AESPEN;
2100 usage->hid = WACOM_HID_WD_TOOLTYPE;
2101 field->logical_minimum = S16_MIN;
2102 field->logical_maximum = S16_MAX;
2103 a->logical_minimum = S32_MIN;
2104 a->logical_maximum = S32_MAX;
2105 b->usage[0].hid = WACOM_HID_WD_SERIALHI;
2106 b->logical_minimum = 0;
2107 b->logical_maximum = U8_MAX;
2108 }
2109 }
2110 }
2089 break; 2111 break;
2090 case WACOM_HID_WD_SENSE: 2112 case WACOM_HID_WD_SENSE:
2091 features->quirks |= WACOM_QUIRK_SENSE; 2113 features->quirks |= WACOM_QUIRK_SENSE;
@@ -2093,15 +2115,18 @@ static void wacom_wac_pen_usage_mapping(struct hid_device *hdev,
2093 break; 2115 break;
2094 case WACOM_HID_WD_SERIALHI: 2116 case WACOM_HID_WD_SERIALHI:
2095 wacom_map_usage(input, usage, field, EV_ABS, ABS_MISC, 0); 2117 wacom_map_usage(input, usage, field, EV_ABS, ABS_MISC, 0);
2096 set_bit(EV_KEY, input->evbit); 2118
2097 input_set_capability(input, EV_KEY, BTN_TOOL_PEN); 2119 if (!(features->quirks & WACOM_QUIRK_AESPEN)) {
2098 input_set_capability(input, EV_KEY, BTN_TOOL_RUBBER); 2120 set_bit(EV_KEY, input->evbit);
2099 input_set_capability(input, EV_KEY, BTN_TOOL_BRUSH); 2121 input_set_capability(input, EV_KEY, BTN_TOOL_PEN);
2100 input_set_capability(input, EV_KEY, BTN_TOOL_PENCIL); 2122 input_set_capability(input, EV_KEY, BTN_TOOL_RUBBER);
2101 input_set_capability(input, EV_KEY, BTN_TOOL_AIRBRUSH); 2123 input_set_capability(input, EV_KEY, BTN_TOOL_BRUSH);
2102 if (!(features->device_type & WACOM_DEVICETYPE_DIRECT)) { 2124 input_set_capability(input, EV_KEY, BTN_TOOL_PENCIL);
2103 input_set_capability(input, EV_KEY, BTN_TOOL_MOUSE); 2125 input_set_capability(input, EV_KEY, BTN_TOOL_AIRBRUSH);
2104 input_set_capability(input, EV_KEY, BTN_TOOL_LENS); 2126 if (!(features->device_type & WACOM_DEVICETYPE_DIRECT)) {
2127 input_set_capability(input, EV_KEY, BTN_TOOL_MOUSE);
2128 input_set_capability(input, EV_KEY, BTN_TOOL_LENS);
2129 }
2105 } 2130 }
2106 break; 2131 break;
2107 case WACOM_HID_WD_FINGERWHEEL: 2132 case WACOM_HID_WD_FINGERWHEEL:
@@ -4390,6 +4415,12 @@ static const struct wacom_features wacom_features_0x360 =
4390static const struct wacom_features wacom_features_0x361 = 4415static const struct wacom_features wacom_features_0x361 =
4391 { "Wacom Intuos Pro L", 62200, 43200, 8191, 63, 4416 { "Wacom Intuos Pro L", 62200, 43200, 8191, 63,
4392 INTUOSP2_BT, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES, 9, .touch_max = 10 }; 4417 INTUOSP2_BT, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES, 9, .touch_max = 10 };
4418static const struct wacom_features wacom_features_0x37A =
4419 { "Wacom One by Wacom S", 15200, 9500, 2047, 63,
4420 BAMBOO_PEN, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
4421static const struct wacom_features wacom_features_0x37B =
4422 { "Wacom One by Wacom M", 21600, 13500, 2047, 63,
4423 BAMBOO_PEN, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
4393 4424
4394static const struct wacom_features wacom_features_HID_ANY_ID = 4425static const struct wacom_features wacom_features_HID_ANY_ID =
4395 { "Wacom HID", .type = HID_GENERIC, .oVid = HID_ANY_ID, .oPid = HID_ANY_ID }; 4426 { "Wacom HID", .type = HID_GENERIC, .oVid = HID_ANY_ID, .oPid = HID_ANY_ID };
@@ -4558,6 +4589,8 @@ const struct hid_device_id wacom_ids[] = {
4558 { USB_DEVICE_WACOM(0x343) }, 4589 { USB_DEVICE_WACOM(0x343) },
4559 { BT_DEVICE_WACOM(0x360) }, 4590 { BT_DEVICE_WACOM(0x360) },
4560 { BT_DEVICE_WACOM(0x361) }, 4591 { BT_DEVICE_WACOM(0x361) },
4592 { USB_DEVICE_WACOM(0x37A) },
4593 { USB_DEVICE_WACOM(0x37B) },
4561 { USB_DEVICE_WACOM(0x4001) }, 4594 { USB_DEVICE_WACOM(0x4001) },
4562 { USB_DEVICE_WACOM(0x4004) }, 4595 { USB_DEVICE_WACOM(0x4004) },
4563 { USB_DEVICE_WACOM(0x5000) }, 4596 { USB_DEVICE_WACOM(0x5000) },
diff --git a/drivers/hid/wacom_wac.h b/drivers/hid/wacom_wac.h
index 64d8f014602e..15d9c14fbdf7 100644
--- a/drivers/hid/wacom_wac.h
+++ b/drivers/hid/wacom_wac.h
@@ -11,6 +11,7 @@
11 11
12#include <linux/types.h> 12#include <linux/types.h>
13#include <linux/hid.h> 13#include <linux/hid.h>
14#include <linux/kfifo.h>
14 15
15/* maximum packet length for USB/BT devices */ 16/* maximum packet length for USB/BT devices */
16#define WACOM_PKGLEN_MAX 361 17#define WACOM_PKGLEN_MAX 361
@@ -86,7 +87,9 @@
86/* device quirks */ 87/* device quirks */
87#define WACOM_QUIRK_BBTOUCH_LOWRES 0x0001 88#define WACOM_QUIRK_BBTOUCH_LOWRES 0x0001
88#define WACOM_QUIRK_SENSE 0x0002 89#define WACOM_QUIRK_SENSE 0x0002
90#define WACOM_QUIRK_AESPEN 0x0004
89#define WACOM_QUIRK_BATTERY 0x0008 91#define WACOM_QUIRK_BATTERY 0x0008
92#define WACOM_QUIRK_TOOLSERIAL 0x0010
90 93
91/* device types */ 94/* device types */
92#define WACOM_DEVICETYPE_NONE 0x0000 95#define WACOM_DEVICETYPE_NONE 0x0000
@@ -107,6 +110,7 @@
107#define WACOM_HID_WD_PEN (WACOM_HID_UP_WACOMDIGITIZER | 0x02) 110#define WACOM_HID_WD_PEN (WACOM_HID_UP_WACOMDIGITIZER | 0x02)
108#define WACOM_HID_WD_SENSE (WACOM_HID_UP_WACOMDIGITIZER | 0x36) 111#define WACOM_HID_WD_SENSE (WACOM_HID_UP_WACOMDIGITIZER | 0x36)
109#define WACOM_HID_WD_DIGITIZERFNKEYS (WACOM_HID_UP_WACOMDIGITIZER | 0x39) 112#define WACOM_HID_WD_DIGITIZERFNKEYS (WACOM_HID_UP_WACOMDIGITIZER | 0x39)
113#define WACOM_HID_WD_SERIALNUMBER (WACOM_HID_UP_WACOMDIGITIZER | 0x5b)
110#define WACOM_HID_WD_SERIALHI (WACOM_HID_UP_WACOMDIGITIZER | 0x5c) 114#define WACOM_HID_WD_SERIALHI (WACOM_HID_UP_WACOMDIGITIZER | 0x5c)
111#define WACOM_HID_WD_TOOLTYPE (WACOM_HID_UP_WACOMDIGITIZER | 0x77) 115#define WACOM_HID_WD_TOOLTYPE (WACOM_HID_UP_WACOMDIGITIZER | 0x77)
112#define WACOM_HID_WD_DISTANCE (WACOM_HID_UP_WACOMDIGITIZER | 0x0132) 116#define WACOM_HID_WD_DISTANCE (WACOM_HID_UP_WACOMDIGITIZER | 0x0132)
@@ -150,6 +154,7 @@
150#define WACOM_HID_WT_TOUCHSCREEN (WACOM_HID_UP_WACOMTOUCH | 0x04) 154#define WACOM_HID_WT_TOUCHSCREEN (WACOM_HID_UP_WACOMTOUCH | 0x04)
151#define WACOM_HID_WT_TOUCHPAD (WACOM_HID_UP_WACOMTOUCH | 0x05) 155#define WACOM_HID_WT_TOUCHPAD (WACOM_HID_UP_WACOMTOUCH | 0x05)
152#define WACOM_HID_WT_CONTACTMAX (WACOM_HID_UP_WACOMTOUCH | 0x55) 156#define WACOM_HID_WT_CONTACTMAX (WACOM_HID_UP_WACOMTOUCH | 0x55)
157#define WACOM_HID_WT_SERIALNUMBER (WACOM_HID_UP_WACOMTOUCH | 0x5b)
153#define WACOM_HID_WT_X (WACOM_HID_UP_WACOMTOUCH | 0x130) 158#define WACOM_HID_WT_X (WACOM_HID_UP_WACOMTOUCH | 0x130)
154#define WACOM_HID_WT_Y (WACOM_HID_UP_WACOMTOUCH | 0x131) 159#define WACOM_HID_WT_Y (WACOM_HID_UP_WACOMTOUCH | 0x131)
155 160
@@ -336,6 +341,7 @@ struct wacom_wac {
336 struct input_dev *pen_input; 341 struct input_dev *pen_input;
337 struct input_dev *touch_input; 342 struct input_dev *touch_input;
338 struct input_dev *pad_input; 343 struct input_dev *pad_input;
344 struct kfifo_rec_ptr_2 pen_fifo;
339 int pid; 345 int pid;
340 int num_contacts_left; 346 int num_contacts_left;
341 u8 bt_features; 347 u8 bt_features;
diff --git a/include/linux/hid.h b/include/linux/hid.h
index d491027a7c22..091a81cf330f 100644
--- a/include/linux/hid.h
+++ b/include/linux/hid.h
@@ -281,6 +281,7 @@ struct hid_item {
281 281
282#define HID_DG_DEVICECONFIG 0x000d000e 282#define HID_DG_DEVICECONFIG 0x000d000e
283#define HID_DG_DEVICESETTINGS 0x000d0023 283#define HID_DG_DEVICESETTINGS 0x000d0023
284#define HID_DG_AZIMUTH 0x000d003f
284#define HID_DG_CONFIDENCE 0x000d0047 285#define HID_DG_CONFIDENCE 0x000d0047
285#define HID_DG_WIDTH 0x000d0048 286#define HID_DG_WIDTH 0x000d0048
286#define HID_DG_HEIGHT 0x000d0049 287#define HID_DG_HEIGHT 0x000d0049
@@ -342,6 +343,7 @@ struct hid_item {
342#define HID_QUIRK_SKIP_OUTPUT_REPORTS 0x00010000 343#define HID_QUIRK_SKIP_OUTPUT_REPORTS 0x00010000
343#define HID_QUIRK_SKIP_OUTPUT_REPORT_ID 0x00020000 344#define HID_QUIRK_SKIP_OUTPUT_REPORT_ID 0x00020000
344#define HID_QUIRK_NO_OUTPUT_REPORTS_ON_INTR_EP 0x00040000 345#define HID_QUIRK_NO_OUTPUT_REPORTS_ON_INTR_EP 0x00040000
346#define HID_QUIRK_HAVE_SPECIAL_DRIVER 0x00080000
345#define HID_QUIRK_FULLSPEED_INTERVAL 0x10000000 347#define HID_QUIRK_FULLSPEED_INTERVAL 0x10000000
346#define HID_QUIRK_NO_INIT_REPORTS 0x20000000 348#define HID_QUIRK_NO_INIT_REPORTS 0x20000000
347#define HID_QUIRK_NO_IGNORE 0x40000000 349#define HID_QUIRK_NO_IGNORE 0x40000000
@@ -671,6 +673,7 @@ struct hid_usage_id {
671 * to be called) 673 * to be called)
672 * @dyn_list: list of dynamically added device ids 674 * @dyn_list: list of dynamically added device ids
673 * @dyn_lock: lock protecting @dyn_list 675 * @dyn_lock: lock protecting @dyn_list
676 * @match: check if the given device is handled by this driver
674 * @probe: new device inserted 677 * @probe: new device inserted
675 * @remove: device removed (NULL if not a hot-plug capable driver) 678 * @remove: device removed (NULL if not a hot-plug capable driver)
676 * @report_table: on which reports to call raw_event (NULL means all) 679 * @report_table: on which reports to call raw_event (NULL means all)
@@ -683,6 +686,8 @@ struct hid_usage_id {
683 * @input_mapped: invoked on input registering after mapping an usage 686 * @input_mapped: invoked on input registering after mapping an usage
684 * @input_configured: invoked just before the device is registered 687 * @input_configured: invoked just before the device is registered
685 * @feature_mapping: invoked on feature registering 688 * @feature_mapping: invoked on feature registering
689 * @bus_add_driver: invoked when a HID driver is about to be added
690 * @bus_removed_driver: invoked when a HID driver has been removed
686 * @suspend: invoked on suspend (NULL means nop) 691 * @suspend: invoked on suspend (NULL means nop)
687 * @resume: invoked on resume if device was not reset (NULL means nop) 692 * @resume: invoked on resume if device was not reset (NULL means nop)
688 * @reset_resume: invoked on resume if device was reset (NULL means nop) 693 * @reset_resume: invoked on resume if device was reset (NULL means nop)
@@ -711,6 +716,7 @@ struct hid_driver {
711 struct list_head dyn_list; 716 struct list_head dyn_list;
712 spinlock_t dyn_lock; 717 spinlock_t dyn_lock;
713 718
719 bool (*match)(struct hid_device *dev, bool ignore_special_driver);
714 int (*probe)(struct hid_device *dev, const struct hid_device_id *id); 720 int (*probe)(struct hid_device *dev, const struct hid_device_id *id);
715 void (*remove)(struct hid_device *dev); 721 void (*remove)(struct hid_device *dev);
716 722
@@ -736,6 +742,8 @@ struct hid_driver {
736 void (*feature_mapping)(struct hid_device *hdev, 742 void (*feature_mapping)(struct hid_device *hdev,
737 struct hid_field *field, 743 struct hid_field *field,
738 struct hid_usage *usage); 744 struct hid_usage *usage);
745 void (*bus_add_driver)(struct hid_driver *driver);
746 void (*bus_removed_driver)(struct hid_driver *driver);
739#ifdef CONFIG_PM 747#ifdef CONFIG_PM
740 int (*suspend)(struct hid_device *hdev, pm_message_t message); 748 int (*suspend)(struct hid_device *hdev, pm_message_t message);
741 int (*resume)(struct hid_device *hdev); 749 int (*resume)(struct hid_device *hdev);
@@ -814,6 +822,8 @@ extern bool hid_ignore(struct hid_device *);
814extern int hid_add_device(struct hid_device *); 822extern int hid_add_device(struct hid_device *);
815extern void hid_destroy_device(struct hid_device *); 823extern void hid_destroy_device(struct hid_device *);
816 824
825extern struct bus_type hid_bus_type;
826
817extern int __must_check __hid_register_driver(struct hid_driver *, 827extern int __must_check __hid_register_driver(struct hid_driver *,
818 struct module *, const char *mod_name); 828 struct module *, const char *mod_name);
819 829
@@ -860,8 +870,12 @@ int hid_open_report(struct hid_device *device);
860int hid_check_keys_pressed(struct hid_device *hid); 870int hid_check_keys_pressed(struct hid_device *hid);
861int hid_connect(struct hid_device *hid, unsigned int connect_mask); 871int hid_connect(struct hid_device *hid, unsigned int connect_mask);
862void hid_disconnect(struct hid_device *hid); 872void hid_disconnect(struct hid_device *hid);
863const struct hid_device_id *hid_match_id(struct hid_device *hdev, 873bool hid_match_one_id(const struct hid_device *hdev,
874 const struct hid_device_id *id);
875const struct hid_device_id *hid_match_id(const struct hid_device *hdev,
864 const struct hid_device_id *id); 876 const struct hid_device_id *id);
877const struct hid_device_id *hid_match_device(struct hid_device *hdev,
878 struct hid_driver *hdrv);
865s32 hid_snto32(__u32 value, unsigned n); 879s32 hid_snto32(__u32 value, unsigned n);
866__u32 hid_field_extract(const struct hid_device *hid, __u8 *report, 880__u32 hid_field_extract(const struct hid_device *hid, __u8 *report,
867 unsigned offset, unsigned n); 881 unsigned offset, unsigned n);
@@ -1098,9 +1112,9 @@ int hid_report_raw_event(struct hid_device *hid, int type, u8 *data, int size,
1098 int interrupt); 1112 int interrupt);
1099 1113
1100/* HID quirks API */ 1114/* HID quirks API */
1101u32 usbhid_lookup_quirk(const u16 idVendor, const u16 idProduct); 1115unsigned long hid_lookup_quirk(const struct hid_device *hdev);
1102int usbhid_quirks_init(char **quirks_param); 1116int hid_quirks_init(char **quirks_param, __u16 bus, int count);
1103void usbhid_quirks_exit(void); 1117void hid_quirks_exit(__u16 bus);
1104 1118
1105#ifdef CONFIG_HID_PID 1119#ifdef CONFIG_HID_PID
1106int hid_pidff_init(struct hid_device *hid); 1120int hid_pidff_init(struct hid_device *hid);
diff --git a/net/bluetooth/hidp/core.c b/net/bluetooth/hidp/core.c
index f2cec70d520c..1036e4fa1ea2 100644
--- a/net/bluetooth/hidp/core.c
+++ b/net/bluetooth/hidp/core.c
@@ -789,7 +789,7 @@ static int hidp_setup_hid(struct hidp_session *session,
789 hid->dev.parent = &session->conn->hcon->dev; 789 hid->dev.parent = &session->conn->hcon->dev;
790 hid->ll_driver = &hidp_hid_driver; 790 hid->ll_driver = &hidp_hid_driver;
791 791
792 /* True if device is blacklisted in drivers/hid/hid-core.c */ 792 /* True if device is blacklisted in drivers/hid/hid-quirks.c */
793 if (hid_ignore(hid)) { 793 if (hid_ignore(hid)) {
794 hid_destroy_device(session->hid); 794 hid_destroy_device(session->hid);
795 session->hid = NULL; 795 session->hid = NULL;