diff options
27 files changed, 1993 insertions, 1388 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 | ||
| 36 | Example: | 36 | Example: |
| 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 | ||
| 400 | config 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 | |||
| 399 | config HID_TWINHAN | 411 | config 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 | # |
| 5 | hid-y := hid-core.o hid-input.o | 5 | hid-y := hid-core.o hid-input.o hid-quirks.o |
| 6 | hid-$(CONFIG_DEBUG_FS) += hid-debug.o | 6 | hid-$(CONFIG_DEBUG_FS) += hid-debug.o |
| 7 | 7 | ||
| 8 | obj-$(CONFIG_HID) += hid.o | 8 | obj-$(CONFIG_HID) += hid.o |
| @@ -52,6 +52,7 @@ obj-$(CONFIG_HID_HOLTEK) += hid-holtekff.o | |||
| 52 | obj-$(CONFIG_HID_HYPERV_MOUSE) += hid-hyperv.o | 52 | obj-$(CONFIG_HID_HYPERV_MOUSE) += hid-hyperv.o |
| 53 | obj-$(CONFIG_HID_ICADE) += hid-icade.o | 53 | obj-$(CONFIG_HID_ICADE) += hid-icade.o |
| 54 | obj-$(CONFIG_HID_ITE) += hid-ite.o | 54 | obj-$(CONFIG_HID_ITE) += hid-ite.o |
| 55 | obj-$(CONFIG_HID_JABRA) += hid-jabra.o | ||
| 55 | obj-$(CONFIG_HID_KENSINGTON) += hid-kensington.o | 56 | obj-$(CONFIG_HID_KENSINGTON) += hid-kensington.o |
| 56 | obj-$(CONFIG_HID_KEYTOUCH) += hid-keytouch.o | 57 | obj-$(CONFIG_HID_KEYTOUCH) += hid-keytouch.o |
| 57 | obj-$(CONFIG_HID_KYE) += hid-kye.o | 58 | obj-$(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 | ||
| 123 | static 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 | |||
| 132 | static 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 | |||
| 122 | static const struct asus_touchpad_info asus_t100chi_tp = { | 141 | static 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 | } |
| 1598 | EXPORT_SYMBOL_GPL(hid_input_report); | 1573 | EXPORT_SYMBOL_GPL(hid_input_report); |
| 1599 | 1574 | ||
| 1600 | static bool hid_match_one_id(struct hid_device *hdev, | 1575 | bool 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 | ||
| 1609 | const struct hid_device_id *hid_match_id(struct hid_device *hdev, | 1584 | const 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 | } |
| 1863 | EXPORT_SYMBOL_GPL(hid_hw_close); | 1838 | EXPORT_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 | */ | ||
| 1877 | static 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 | |||
| 2400 | struct hid_dynid { | 1840 | struct 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 | ||
| 2466 | static const struct hid_device_id *hid_match_device(struct hid_device *hdev, | 1906 | const 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 | } |
| 1922 | EXPORT_SYMBOL_GPL(hid_match_device); | ||
| 2482 | 1923 | ||
| 2483 | static int hid_bus_match(struct device *dev, struct device_driver *drv) | 1924 | static 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 | ||
| 2607 | static struct bus_type hid_bus_type = { | 2065 | struct 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 | 2074 | EXPORT_SYMBOL(hid_bus_type); | |
| 2617 | /* a list of devices that shouldn't be handled by HID core at all */ | ||
| 2618 | static 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 | */ | ||
| 2792 | static 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 | |||
| 2852 | bool 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 | } | ||
| 2924 | EXPORT_SYMBOL_GPL(hid_ignore); | ||
| 2925 | 2075 | ||
| 2926 | int hid_add_device(struct hid_device *hdev) | 2076 | int 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 | } |
| 3045 | EXPORT_SYMBOL_GPL(hid_destroy_device); | 2197 | EXPORT_SYMBOL_GPL(hid_destroy_device); |
| 3046 | 2198 | ||
| 2199 | |||
| 2200 | static 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 | |||
| 2211 | static 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 | |||
| 3047 | int __hid_register_driver(struct hid_driver *hdrv, struct module *owner, | 2222 | int __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 | } |
| 3060 | EXPORT_SYMBOL_GPL(__hid_register_driver); | 2237 | EXPORT_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 | } |
| 3067 | EXPORT_SYMBOL_GPL(hid_unregister_driver); | 2246 | EXPORT_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 | ||
| 3122 | module_init(hid_init); | 2302 | module_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 | ||
| 41 | static 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 | |||
| 22 | static __u8 *elecom_report_fixup(struct hid_device *hdev, __u8 *rdesc, | 56 | static __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 | ||
| 78 | static const struct hid_device_id elecom_devices[] = { | 82 | static 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 | ||
| 27 | static struct hid_driver hid_generic; | ||
| 28 | |||
| 29 | static 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 | |||
| 48 | static 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 | |||
| 53 | static void hid_generic_removed_driver(struct hid_driver *hdrv) | ||
| 54 | { | ||
| 55 | int ret; | ||
| 56 | |||
| 57 | ret = driver_attach(&hid_generic.driver); | ||
| 58 | } | ||
| 59 | |||
| 60 | static 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 | |||
| 71 | static 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 | |||
| 27 | static const struct hid_device_id hid_table[] = { | 90 | static 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 | }; |
| 31 | MODULE_DEVICE_TABLE(hid, hid_table); | 94 | MODULE_DEVICE_TABLE(hid, hid_table); |
| @@ -33,6 +96,9 @@ MODULE_DEVICE_TABLE(hid, hid_table); | |||
| 33 | static struct hid_driver hid_generic = { | 96 | static 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 | }; |
| 37 | module_hid_driver(hid_generic); | 103 | module_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 | |||
| 22 | static 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 | |||
| 43 | static const struct hid_device_id jabra_devices[] = { | ||
| 44 | { HID_USB_DEVICE(USB_VENDOR_ID_JABRA, HID_ANY_ID) }, | ||
| 45 | { } | ||
| 46 | }; | ||
| 47 | MODULE_DEVICE_TABLE(hid, jabra_devices); | ||
| 48 | |||
| 49 | static struct hid_driver jabra_driver = { | ||
| 50 | .name = "jabra", | ||
| 51 | .id_table = jabra_devices, | ||
| 52 | .input_mapping = jabra_input_mapping, | ||
| 53 | }; | ||
| 54 | module_hid_driver(jabra_driver); | ||
| 55 | |||
| 56 | MODULE_AUTHOR("Niels Skou Olsen <nolsen@jabra.com>"); | ||
| 57 | MODULE_DESCRIPTION("Jabra USB HID Driver"); | ||
| 58 | MODULE_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 | ||
| 87 | struct mt_slot { | 87 | struct 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 | ||
| 95 | struct mt_class { | 96 | struct 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 | */ |
| 735 | static void mt_sync_frame(struct mt_device *td, struct input_dev *input) | 773 | static 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 | ||
| 780 | static void mt_process_mt_event(struct hid_device *hid, struct hid_field *field, | 824 | static 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, | |||
| 855 | static void mt_touch_report(struct hid_device *hid, struct hid_report *report) | 939 | static 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 | |||
| 29 | static 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 | */ | ||
| 182 | static 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 */ | ||
| 708 | static 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 | */ | ||
| 879 | static 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 | |||
| 939 | bool 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 | } | ||
| 1022 | EXPORT_SYMBOL_GPL(hid_ignore); | ||
| 1023 | |||
| 1024 | /* Dynamic HID quirks list - specified at runtime */ | ||
| 1025 | struct quirks_list_struct { | ||
| 1026 | struct hid_device_id hid_bl_item; | ||
| 1027 | struct list_head node; | ||
| 1028 | }; | ||
| 1029 | |||
| 1030 | static LIST_HEAD(dquirks_list); | ||
| 1031 | static 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 | */ | ||
| 1046 | static 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 | */ | ||
| 1079 | static 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 | */ | ||
| 1137 | static 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 | */ | ||
| 1155 | int 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 | } | ||
| 1181 | EXPORT_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 | */ | ||
| 1194 | void hid_quirks_exit(__u16 bus) | ||
| 1195 | { | ||
| 1196 | hid_remove_all_dquirks(bus); | ||
| 1197 | } | ||
| 1198 | EXPORT_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 | */ | ||
| 1210 | static 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 | */ | ||
| 1240 | unsigned 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 | } | ||
| 1276 | EXPORT_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) | |||
| 37 | static void kovaplus_profile_activated(struct kovaplus_device *kovaplus, | 37 | static 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 138fd44d3c91..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, | |||
| 627 | static DEVICE_ATTR(bt_poll_interval, 0644, ds4_show_poll_interval, | 630 | static DEVICE_ATTR(bt_poll_interval, 0644, ds4_show_poll_interval, |
| 628 | ds4_store_poll_interval); | 631 | ds4_store_poll_interval); |
| 629 | 632 | ||
| 633 | static 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 | |||
| 643 | static DEVICE_ATTR(firmware_version, 0444, sony_show_firmware_version, NULL); | ||
| 644 | |||
| 645 | static 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 | |||
| 655 | static DEVICE_ATTR(hardware_version, 0444, sony_show_hardware_version, NULL); | ||
| 630 | 656 | ||
| 631 | static u8 *motion_fixup(struct hid_device *hdev, u8 *rdesc, | 657 | static 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 | ||
| 1675 | static 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 | |||
| 1649 | static void sixaxis_set_leds_from_id(struct sony_sc *sc) | 1700 | static 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] = { |
| @@ -2613,6 +2664,28 @@ static int sony_input_configured(struct hid_device *hdev, | |||
| 2613 | goto err_stop; | 2664 | goto err_stop; |
| 2614 | } | 2665 | } |
| 2615 | 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 | |||
| 2616 | /* | 2689 | /* |
| 2617 | * The Dualshock 4 touchpad supports 2 touches and has a | 2690 | * The Dualshock 4 touchpad supports 2 touches and has a |
| 2618 | * resolution of 1920x942 (44.86 dots/mm). | 2691 | * resolution of 1920x942 (44.86 dots/mm). |
| @@ -2689,6 +2762,10 @@ err_stop: | |||
| 2689 | */ | 2762 | */ |
| 2690 | if (sc->ds4_bt_poll_interval) | 2763 | if (sc->ds4_bt_poll_interval) |
| 2691 | 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); | ||
| 2692 | if (sc->quirks & SONY_LED_SUPPORT) | 2769 | if (sc->quirks & SONY_LED_SUPPORT) |
| 2693 | sony_leds_remove(sc); | 2770 | sony_leds_remove(sc); |
| 2694 | if (sc->quirks & SONY_BATTERY_SUPPORT) | 2771 | if (sc->quirks & SONY_BATTERY_SUPPORT) |
| @@ -2790,6 +2867,12 @@ static void sony_remove(struct hid_device *hdev) | |||
| 2790 | if (sc->quirks & DUALSHOCK4_CONTROLLER_BT) | 2867 | if (sc->quirks & DUALSHOCK4_CONTROLLER_BT) |
| 2791 | device_remove_file(&sc->hdev->dev, &dev_attr_bt_poll_interval); | 2868 | device_remove_file(&sc->hdev->dev, &dev_attr_bt_poll_interval); |
| 2792 | 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 | |||
| 2793 | sony_cancel_work_sync(sc); | 2876 | sony_cancel_work_sync(sc); |
| 2794 | 2877 | ||
| 2795 | 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 | ||
| 953 | static 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 | |||
| 958 | static int i2c_hid_probe(struct i2c_client *client, | 963 | static 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 | }; |
| 42 | MODULE_DEVICE_TABLE(pci, ish_pci_tbl); | 43 | MODULE_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 | ||
| 6 | usbhid-y := hid-core.o hid-quirks.o | 6 | usbhid-y := hid-core.o |
| 7 | usbhid-$(CONFIG_USB_HIDDEV) += hiddev.o | 7 | usbhid-$(CONFIG_USB_HIDDEV) += hiddev.o |
| 8 | usbhid-$(CONFIG_HID_PID) += hid-pidff.o | 8 | usbhid-$(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; |
| 1653 | usb_register_fail: | 1652 | usb_register_fail: |
| 1654 | usbhid_quirks_exit(); | 1653 | hid_quirks_exit(BUS_USB); |
| 1655 | usbhid_quirks_init_fail: | 1654 | usbhid_quirks_init_fail: |
| 1656 | return retval; | 1655 | return retval; |
| 1657 | } | 1656 | } |
| @@ -1659,7 +1658,7 @@ usbhid_quirks_init_fail: | |||
| 1659 | static void __exit hid_exit(void) | 1658 | static 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 | ||
| 1665 | module_init(hid_init); | 1664 | module_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 | |||
| 28 | static 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 */ | ||
| 179 | struct quirks_list_struct { | ||
| 180 | struct hid_blacklist hid_bl_item; | ||
| 181 | struct list_head node; | ||
| 182 | }; | ||
| 183 | |||
| 184 | static LIST_HEAD(dquirks_list); | ||
| 185 | static 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 | */ | ||
| 201 | static 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 | */ | ||
| 237 | static 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 | */ | ||
| 288 | static 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 | */ | ||
| 304 | int 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 | */ | ||
| 334 | void 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 | */ | ||
| 350 | static 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 | */ | ||
| 380 | u32 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 | |||
| 402 | EXPORT_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 | ||
| 59 | static 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 | |||
| 76 | static 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 | |||
| 93 | static 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 | |||
| 59 | static int wacom_raw_event(struct hid_device *hdev, struct hid_report *report, | 160 | static 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 = | |||
| 4390 | static const struct wacom_features wacom_features_0x361 = | 4415 | static 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 }; |
| 4418 | static 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 }; | ||
| 4421 | static 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 | ||
| 4394 | static const struct wacom_features wacom_features_HID_ANY_ID = | 4425 | static 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 *); | |||
| 814 | extern int hid_add_device(struct hid_device *); | 822 | extern int hid_add_device(struct hid_device *); |
| 815 | extern void hid_destroy_device(struct hid_device *); | 823 | extern void hid_destroy_device(struct hid_device *); |
| 816 | 824 | ||
| 825 | extern struct bus_type hid_bus_type; | ||
| 826 | |||
| 817 | extern int __must_check __hid_register_driver(struct hid_driver *, | 827 | extern 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); | |||
| 860 | int hid_check_keys_pressed(struct hid_device *hid); | 870 | int hid_check_keys_pressed(struct hid_device *hid); |
| 861 | int hid_connect(struct hid_device *hid, unsigned int connect_mask); | 871 | int hid_connect(struct hid_device *hid, unsigned int connect_mask); |
| 862 | void hid_disconnect(struct hid_device *hid); | 872 | void hid_disconnect(struct hid_device *hid); |
| 863 | const struct hid_device_id *hid_match_id(struct hid_device *hdev, | 873 | bool hid_match_one_id(const struct hid_device *hdev, |
| 874 | const struct hid_device_id *id); | ||
| 875 | const 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); |
| 877 | const struct hid_device_id *hid_match_device(struct hid_device *hdev, | ||
| 878 | struct hid_driver *hdrv); | ||
| 865 | s32 hid_snto32(__u32 value, unsigned n); | 879 | s32 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 */ |
| 1101 | u32 usbhid_lookup_quirk(const u16 idVendor, const u16 idProduct); | 1115 | unsigned long hid_lookup_quirk(const struct hid_device *hdev); |
| 1102 | int usbhid_quirks_init(char **quirks_param); | 1116 | int hid_quirks_init(char **quirks_param, __u16 bus, int count); |
| 1103 | void usbhid_quirks_exit(void); | 1117 | void hid_quirks_exit(__u16 bus); |
| 1104 | 1118 | ||
| 1105 | #ifdef CONFIG_HID_PID | 1119 | #ifdef CONFIG_HID_PID |
| 1106 | int hid_pidff_init(struct hid_device *hid); | 1120 | int 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; |
