| .. | .. |
|---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-or-later |
|---|
| 1 | 2 | /* |
|---|
| 2 | 3 | * HID quirks support for Linux |
|---|
| 3 | 4 | * |
|---|
| .. | .. |
|---|
| 9 | 10 | */ |
|---|
| 10 | 11 | |
|---|
| 11 | 12 | /* |
|---|
| 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 | 13 | */ |
|---|
| 17 | 14 | |
|---|
| 18 | 15 | #include <linux/hid.h> |
|---|
| 19 | 16 | #include <linux/export.h> |
|---|
| 20 | 17 | #include <linux/slab.h> |
|---|
| 21 | 18 | #include <linux/mutex.h> |
|---|
| 19 | +#include <linux/input/elan-i2c-ids.h> |
|---|
| 22 | 20 | |
|---|
| 23 | 21 | #include "hid-ids.h" |
|---|
| 24 | 22 | |
|---|
| .. | .. |
|---|
| 56 | 54 | { HID_USB_DEVICE(USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_FLIGHT_SIM_YOKE), HID_QUIRK_NOGET }, |
|---|
| 57 | 55 | { HID_USB_DEVICE(USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_PRO_PEDALS), HID_QUIRK_NOGET }, |
|---|
| 58 | 56 | { HID_USB_DEVICE(USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_PRO_THROTTLE), HID_QUIRK_NOGET }, |
|---|
| 57 | + { HID_USB_DEVICE(USB_VENDOR_ID_CHERRY, USB_DEVICE_ID_CHERRY_MOUSE_000C), HID_QUIRK_ALWAYS_POLL }, |
|---|
| 59 | 58 | { HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K65RGB), HID_QUIRK_NO_INIT_REPORTS }, |
|---|
| 60 | 59 | { HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K65RGB_RAPIDFIRE), HID_QUIRK_NO_INIT_REPORTS | HID_QUIRK_ALWAYS_POLL }, |
|---|
| 61 | 60 | { HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K70RGB), HID_QUIRK_NO_INIT_REPORTS }, |
|---|
| .. | .. |
|---|
| 110 | 109 | { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_MOUSEPEN_I608X), HID_QUIRK_MULTI_INPUT }, |
|---|
| 111 | 110 | { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_MOUSEPEN_I608X_V2), HID_QUIRK_MULTI_INPUT }, |
|---|
| 112 | 111 | { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_PENSKETCH_M912), HID_QUIRK_MULTI_INPUT }, |
|---|
| 112 | + { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_M406XE), HID_QUIRK_MULTI_INPUT }, |
|---|
| 113 | 113 | { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_PIXART_USB_OPTICAL_MOUSE_ID2), HID_QUIRK_ALWAYS_POLL }, |
|---|
| 114 | + { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_OPTICAL_USB_MOUSE_600E), HID_QUIRK_ALWAYS_POLL }, |
|---|
| 115 | + { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_PIXART_USB_MOUSE_608D), HID_QUIRK_ALWAYS_POLL }, |
|---|
| 116 | + { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_PIXART_USB_MOUSE_6019), HID_QUIRK_ALWAYS_POLL }, |
|---|
| 117 | + { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_PIXART_USB_MOUSE_602E), HID_QUIRK_ALWAYS_POLL }, |
|---|
| 118 | + { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_PIXART_USB_MOUSE_6093), HID_QUIRK_ALWAYS_POLL }, |
|---|
| 114 | 119 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_C007), HID_QUIRK_ALWAYS_POLL }, |
|---|
| 115 | 120 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_C077), HID_QUIRK_ALWAYS_POLL }, |
|---|
| 116 | 121 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_KEYBOARD_G710_PLUS), HID_QUIRK_NOGET }, |
|---|
| .. | .. |
|---|
| 118 | 123 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOUSE_C05A), HID_QUIRK_ALWAYS_POLL }, |
|---|
| 119 | 124 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOUSE_C06A), HID_QUIRK_ALWAYS_POLL }, |
|---|
| 120 | 125 | { HID_USB_DEVICE(USB_VENDOR_ID_MCS, USB_DEVICE_ID_MCS_GAMEPADBLOCK), HID_QUIRK_MULTI_INPUT }, |
|---|
| 126 | + { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_MOUSE_0783), HID_QUIRK_ALWAYS_POLL }, |
|---|
| 121 | 127 | { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_PIXART_MOUSE), HID_QUIRK_ALWAYS_POLL }, |
|---|
| 122 | 128 | { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_POWER_COVER), HID_QUIRK_NO_INIT_REPORTS }, |
|---|
| 129 | + { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_SURFACE3_COVER), HID_QUIRK_NO_INIT_REPORTS }, |
|---|
| 123 | 130 | { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_SURFACE_PRO_2), HID_QUIRK_NO_INIT_REPORTS }, |
|---|
| 124 | 131 | { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TOUCH_COVER_2), HID_QUIRK_NO_INIT_REPORTS }, |
|---|
| 125 | 132 | { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_2), HID_QUIRK_NO_INIT_REPORTS }, |
|---|
| .. | .. |
|---|
| 141 | 148 | { HID_USB_DEVICE(USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN), HID_QUIRK_NO_INIT_REPORTS }, |
|---|
| 142 | 149 | { HID_USB_DEVICE(USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_USB_OPTICAL_MOUSE), HID_QUIRK_ALWAYS_POLL }, |
|---|
| 143 | 150 | { HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_MOUSE_4D22), HID_QUIRK_ALWAYS_POLL }, |
|---|
| 151 | + { HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_MOUSE_4E2A), HID_QUIRK_ALWAYS_POLL }, |
|---|
| 144 | 152 | { HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_PIXART_MOUSE_4D0F), HID_QUIRK_ALWAYS_POLL }, |
|---|
| 145 | 153 | { HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_PIXART_MOUSE_4D65), HID_QUIRK_ALWAYS_POLL }, |
|---|
| 146 | 154 | { HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_PIXART_MOUSE_4E22), HID_QUIRK_ALWAYS_POLL }, |
|---|
| .. | .. |
|---|
| 182 | 190 | { HID_USB_DEVICE(USB_VENDOR_ID_TURBOX, USB_DEVICE_ID_TURBOX_KEYBOARD), HID_QUIRK_NOGET }, |
|---|
| 183 | 191 | { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_KNA5), HID_QUIRK_MULTI_INPUT }, |
|---|
| 184 | 192 | { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_TWA60), HID_QUIRK_MULTI_INPUT }, |
|---|
| 193 | + { HID_USB_DEVICE(USB_VENDOR_ID_UGTIZER, USB_DEVICE_ID_UGTIZER_TABLET_WP5540), HID_QUIRK_MULTI_INPUT }, |
|---|
| 185 | 194 | { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_MEDIA_TABLET_10_6_INCH), HID_QUIRK_MULTI_INPUT }, |
|---|
| 186 | 195 | { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_MEDIA_TABLET_14_1_INCH), HID_QUIRK_MULTI_INPUT }, |
|---|
| 187 | 196 | { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_SIRIUS_BATTERY_FREE_TABLET), HID_QUIRK_MULTI_INPUT }, |
|---|
| .. | .. |
|---|
| 210 | 219 | { HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_WCP32PU) }, |
|---|
| 211 | 220 | { HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_X5_005D) }, |
|---|
| 212 | 221 | { HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_RP_649) }, |
|---|
| 222 | + { HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_NB_95) }, |
|---|
| 213 | 223 | #endif |
|---|
| 214 | 224 | #if IS_ENABLED(CONFIG_HID_ACCUTOUCH) |
|---|
| 215 | 225 | { HID_USB_DEVICE(USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_ACCUTOUCH_2216) }, |
|---|
| .. | .. |
|---|
| 428 | 438 | { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_GENIUS_MANTICORE) }, |
|---|
| 429 | 439 | { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_GENIUS_GX_IMPERATOR) }, |
|---|
| 430 | 440 | { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_ERGO_525V) }, |
|---|
| 431 | | - { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_I405X) }, |
|---|
| 432 | | - { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_MOUSEPEN_I608X) }, |
|---|
| 433 | | - { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_MOUSEPEN_I608X_V2) }, |
|---|
| 434 | | - { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_M610X) }, |
|---|
| 435 | | - { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_PENSKETCH_M912) }, |
|---|
| 436 | 441 | #endif |
|---|
| 437 | 442 | #if IS_ENABLED(CONFIG_HID_LCPOWER) |
|---|
| 438 | 443 | { HID_USB_DEVICE(USB_VENDOR_ID_LCPOWER, USB_DEVICE_ID_LCPOWER_LC1000) }, |
|---|
| 439 | | -#endif |
|---|
| 440 | | -#if IS_ENABLED(CONFIG_HID_LED) |
|---|
| 441 | | - { HID_USB_DEVICE(USB_VENDOR_ID_DREAM_CHEEKY, USB_DEVICE_ID_DREAM_CHEEKY_WN) }, |
|---|
| 442 | | - { HID_USB_DEVICE(USB_VENDOR_ID_DREAM_CHEEKY, USB_DEVICE_ID_DREAM_CHEEKY_FA) }, |
|---|
| 443 | | - { HID_USB_DEVICE(USB_VENDOR_ID_MICROCHIP, USB_DEVICE_ID_LUXAFOR) }, |
|---|
| 444 | | - { HID_USB_DEVICE(USB_VENDOR_ID_RISO_KAGAKU, USB_DEVICE_ID_RI_KA_WEBMAIL) }, |
|---|
| 445 | | - { HID_USB_DEVICE(USB_VENDOR_ID_THINGM, USB_DEVICE_ID_BLINK1) }, |
|---|
| 446 | 444 | #endif |
|---|
| 447 | 445 | #if IS_ENABLED(CONFIG_HID_LENOVO) |
|---|
| 448 | 446 | { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_TPKBD) }, |
|---|
| .. | .. |
|---|
| 453 | 451 | #if IS_ENABLED(CONFIG_HID_LOGITECH) |
|---|
| 454 | 452 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_MX3000_RECEIVER) }, |
|---|
| 455 | 453 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_S510_RECEIVER) }, |
|---|
| 456 | | - { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_S510_RECEIVER_2) }, |
|---|
| 457 | 454 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RECEIVER) }, |
|---|
| 458 | 455 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_DINOVO_DESKTOP) }, |
|---|
| 459 | 456 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_DINOVO_EDGE) }, |
|---|
| .. | .. |
|---|
| 468 | 465 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD2_2) }, |
|---|
| 469 | 466 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_G29_WHEEL) }, |
|---|
| 470 | 467 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WINGMAN_F3D) }, |
|---|
| 468 | + { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WINGMAN_FG) }, |
|---|
| 471 | 469 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WINGMAN_FFG) }, |
|---|
| 472 | 470 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_FORCE3D_PRO) }, |
|---|
| 473 | 471 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_FLIGHT_SYSTEM_G940) }, |
|---|
| .. | .. |
|---|
| 484 | 482 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_SPACENAVIGATOR) }, |
|---|
| 485 | 483 | #endif |
|---|
| 486 | 484 | #if IS_ENABLED(CONFIG_HID_LOGITECH_HIDPP) |
|---|
| 487 | | - { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_T651) }, |
|---|
| 488 | 485 | { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_G920_WHEEL) }, |
|---|
| 489 | | -#endif |
|---|
| 490 | | -#if IS_ENABLED(CONFIG_HID_LOGITECH_DJ) |
|---|
| 491 | | - { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_UNIFYING_RECEIVER) }, |
|---|
| 492 | | - { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_UNIFYING_RECEIVER_2) }, |
|---|
| 493 | 486 | #endif |
|---|
| 494 | 487 | #if IS_ENABLED(CONFIG_HID_MAGICMOUSE) |
|---|
| 495 | 488 | { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGICMOUSE) }, |
|---|
| .. | .. |
|---|
| 619 | 612 | { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_MMO7) }, |
|---|
| 620 | 613 | { HID_USB_DEVICE(USB_VENDOR_ID_MADCATZ, USB_DEVICE_ID_MADCATZ_RAT5) }, |
|---|
| 621 | 614 | { HID_USB_DEVICE(USB_VENDOR_ID_MADCATZ, USB_DEVICE_ID_MADCATZ_RAT9) }, |
|---|
| 615 | + { HID_USB_DEVICE(USB_VENDOR_ID_MADCATZ, USB_DEVICE_ID_MADCATZ_MMO7) }, |
|---|
| 622 | 616 | #endif |
|---|
| 623 | 617 | #if IS_ENABLED(CONFIG_HID_SAMSUNG) |
|---|
| 624 | 618 | { HID_USB_DEVICE(USB_VENDOR_ID_SAMSUNG, USB_DEVICE_ID_SAMSUNG_IR_REMOTE) }, |
|---|
| .. | .. |
|---|
| 691 | 685 | #if IS_ENABLED(CONFIG_HID_TWINHAN) |
|---|
| 692 | 686 | { HID_USB_DEVICE(USB_VENDOR_ID_TWINHAN, USB_DEVICE_ID_TWINHAN_IR_REMOTE) }, |
|---|
| 693 | 687 | #endif |
|---|
| 694 | | -#if IS_ENABLED(CONFIG_HID_UCLOGIC) |
|---|
| 695 | | - { HID_USB_DEVICE(USB_VENDOR_ID_HUION, USB_DEVICE_ID_HUION_TABLET) }, |
|---|
| 696 | | - { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_HUION_TABLET) }, |
|---|
| 697 | | - { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_PF1209) }, |
|---|
| 698 | | - { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_WP4030U) }, |
|---|
| 699 | | - { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_WP5540U) }, |
|---|
| 700 | | - { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_WP8060U) }, |
|---|
| 701 | | - { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_WP1062) }, |
|---|
| 702 | | - { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_WIRELESS_TABLET_TWHL850) }, |
|---|
| 703 | | - { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_TWHA60) }, |
|---|
| 704 | | - { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_YIYNOVA_TABLET) }, |
|---|
| 705 | | - { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UGEE_TABLET_81) }, |
|---|
| 706 | | - { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UGEE_TABLET_45) }, |
|---|
| 707 | | - { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_DRAWIMAGE_G3) }, |
|---|
| 708 | | - { HID_USB_DEVICE(USB_VENDOR_ID_UGEE, USB_DEVICE_ID_UGEE_TABLET_EX07S) }, |
|---|
| 709 | | - { HID_USB_DEVICE(USB_VENDOR_ID_UGTIZER, USB_DEVICE_ID_UGTIZER_TABLET_GP0610) }, |
|---|
| 710 | | -#endif |
|---|
| 711 | 688 | #if IS_ENABLED(CONFIG_HID_UDRAW_PS3) |
|---|
| 712 | 689 | { HID_USB_DEVICE(USB_VENDOR_ID_THQ, USB_DEVICE_ID_THQ_PS3_UDRAW) }, |
|---|
| 713 | | -#endif |
|---|
| 714 | | -#if IS_ENABLED(CONFIG_HID_WALTOP) |
|---|
| 715 | | - { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_SLIM_TABLET_5_8_INCH) }, |
|---|
| 716 | | - { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_SLIM_TABLET_12_1_INCH) }, |
|---|
| 717 | | - { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_Q_PAD) }, |
|---|
| 718 | | - { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_PID_0038) }, |
|---|
| 719 | | - { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_MEDIA_TABLET_10_6_INCH) }, |
|---|
| 720 | | - { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_MEDIA_TABLET_14_1_INCH) }, |
|---|
| 721 | | - { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_SIRIUS_BATTERY_FREE_TABLET) }, |
|---|
| 722 | 690 | #endif |
|---|
| 723 | 691 | #if IS_ENABLED(CONFIG_HID_XINMO) |
|---|
| 724 | 692 | { HID_USB_DEVICE(USB_VENDOR_ID_XIN_MO, USB_DEVICE_ID_XIN_MO_DUAL_ARCADE) }, |
|---|
| .. | .. |
|---|
| 902 | 870 | { } |
|---|
| 903 | 871 | }; |
|---|
| 904 | 872 | |
|---|
| 905 | | -/** |
|---|
| 873 | +/* |
|---|
| 906 | 874 | * hid_mouse_ignore_list - mouse devices which should not be handled by the hid layer |
|---|
| 907 | 875 | * |
|---|
| 908 | 876 | * There are composite devices for which we want to ignore only a certain |
|---|
| .. | .. |
|---|
| 971 | 939 | |
|---|
| 972 | 940 | bool hid_ignore(struct hid_device *hdev) |
|---|
| 973 | 941 | { |
|---|
| 942 | + int i; |
|---|
| 943 | + |
|---|
| 974 | 944 | if (hdev->quirks & HID_QUIRK_NO_IGNORE) |
|---|
| 975 | 945 | return false; |
|---|
| 976 | 946 | if (hdev->quirks & HID_QUIRK_IGNORE) |
|---|
| .. | .. |
|---|
| 1035 | 1005 | break; |
|---|
| 1036 | 1006 | case USB_VENDOR_ID_ELAN: |
|---|
| 1037 | 1007 | /* |
|---|
| 1038 | | - * Many Elan devices have a product id of 0x0401 and are handled |
|---|
| 1039 | | - * by the elan_i2c input driver. But the ACPI HID ELAN0800 dev |
|---|
| 1040 | | - * is not (and cannot be) handled by that driver -> |
|---|
| 1041 | | - * Ignore all 0x0401 devs except for the ELAN0800 dev. |
|---|
| 1008 | + * Blacklist of everything that gets handled by the elan_i2c |
|---|
| 1009 | + * input driver. This avoids disabling valid touchpads and |
|---|
| 1010 | + * other ELAN devices. |
|---|
| 1042 | 1011 | */ |
|---|
| 1043 | | - if (hdev->product == 0x0401 && |
|---|
| 1044 | | - strncmp(hdev->name, "ELAN0800", 8) != 0) |
|---|
| 1045 | | - return true; |
|---|
| 1046 | | - /* Same with product id 0x0400 */ |
|---|
| 1047 | | - if (hdev->product == 0x0400 && |
|---|
| 1048 | | - strncmp(hdev->name, "QTEC0001", 8) != 0) |
|---|
| 1049 | | - return true; |
|---|
| 1012 | + if ((hdev->product == 0x0401 || hdev->product == 0x0400)) |
|---|
| 1013 | + for (i = 0; strlen(elan_acpi_id[i].id); ++i) |
|---|
| 1014 | + if (!strncmp(hdev->name, elan_acpi_id[i].id, |
|---|
| 1015 | + strlen(elan_acpi_id[i].id))) |
|---|
| 1016 | + return true; |
|---|
| 1050 | 1017 | break; |
|---|
| 1051 | 1018 | } |
|---|
| 1052 | 1019 | |
|---|
| .. | .. |
|---|
| 1093 | 1060 | } |
|---|
| 1094 | 1061 | |
|---|
| 1095 | 1062 | if (bl_entry != NULL) |
|---|
| 1096 | | - dbg_hid("Found dynamic quirk 0x%lx for HID device 0x%hx:0x%hx\n", |
|---|
| 1063 | + dbg_hid("Found dynamic quirk 0x%lx for HID device 0x%04x:0x%04x\n", |
|---|
| 1097 | 1064 | bl_entry->driver_data, bl_entry->vendor, |
|---|
| 1098 | 1065 | bl_entry->product); |
|---|
| 1099 | 1066 | |
|---|
| .. | .. |
|---|
| 1260 | 1227 | quirks |= bl_entry->driver_data; |
|---|
| 1261 | 1228 | |
|---|
| 1262 | 1229 | if (quirks) |
|---|
| 1263 | | - dbg_hid("Found squirk 0x%lx for HID device 0x%hx:0x%hx\n", |
|---|
| 1230 | + dbg_hid("Found squirk 0x%lx for HID device 0x%04x:0x%04x\n", |
|---|
| 1264 | 1231 | quirks, hdev->vendor, hdev->product); |
|---|
| 1265 | 1232 | return quirks; |
|---|
| 1266 | 1233 | } |
|---|