Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'hid-for-linus-20241024' of git://git.kernel.org/pub/scm/linux/kernel/git/hid/hid

Pull HID fixes from Jiri Kosina:
"Device-specific functionality quirks for Thinkpad X1 Gen3, Logitech
Bolt and some Goodix touchpads (Bartłomiej Maryńczak, Hans de Goede
and Kenneth Albanowski)"

* tag 'hid-for-linus-20241024' of git://git.kernel.org/pub/scm/linux/kernel/git/hid/hid:
HID: lenovo: Add support for Thinkpad X1 Tablet Gen 3 keyboard
HID: multitouch: Add quirk for Logitech Bolt receiver w/ Casa touchpad
HID: i2c-hid: Delayed i2c resume wakeup for 0x0d42 Goodix touchpad

+24
+2
drivers/hid/hid-ids.h
··· 509 509 #define I2C_DEVICE_ID_GOODIX_01E8 0x01e8 510 510 #define I2C_DEVICE_ID_GOODIX_01E9 0x01e9 511 511 #define I2C_DEVICE_ID_GOODIX_01F0 0x01f0 512 + #define I2C_DEVICE_ID_GOODIX_0D42 0x0d42 512 513 513 514 #define USB_VENDOR_ID_GOODTOUCH 0x1aad 514 515 #define USB_DEVICE_ID_GOODTOUCH_000f 0x000f ··· 869 868 #define USB_DEVICE_ID_LOGITECH_NANO_RECEIVER_LIGHTSPEED_1 0xc539 870 869 #define USB_DEVICE_ID_LOGITECH_NANO_RECEIVER_LIGHTSPEED_1_1 0xc53f 871 870 #define USB_DEVICE_ID_LOGITECH_NANO_RECEIVER_POWERPLAY 0xc53a 871 + #define USB_DEVICE_ID_LOGITECH_BOLT_RECEIVER 0xc548 872 872 #define USB_DEVICE_ID_SPACETRAVELLER 0xc623 873 873 #define USB_DEVICE_ID_SPACENAVIGATOR 0xc626 874 874 #define USB_DEVICE_ID_DINOVO_DESKTOP 0xc704
+8
drivers/hid/hid-lenovo.c
··· 473 473 return lenovo_input_mapping_tp10_ultrabook_kbd(hdev, hi, field, 474 474 usage, bit, max); 475 475 case USB_DEVICE_ID_LENOVO_X1_TAB: 476 + case USB_DEVICE_ID_LENOVO_X1_TAB3: 476 477 return lenovo_input_mapping_x1_tab_kbd(hdev, hi, field, usage, bit, max); 477 478 default: 478 479 return 0; ··· 584 583 break; 585 584 case USB_DEVICE_ID_LENOVO_TP10UBKBD: 586 585 case USB_DEVICE_ID_LENOVO_X1_TAB: 586 + case USB_DEVICE_ID_LENOVO_X1_TAB3: 587 587 ret = lenovo_led_set_tp10ubkbd(hdev, TP10UBKBD_FN_LOCK_LED, value); 588 588 if (ret) 589 589 return ret; ··· 778 776 return lenovo_event_cptkbd(hdev, field, usage, value); 779 777 case USB_DEVICE_ID_LENOVO_TP10UBKBD: 780 778 case USB_DEVICE_ID_LENOVO_X1_TAB: 779 + case USB_DEVICE_ID_LENOVO_X1_TAB3: 781 780 return lenovo_event_tp10ubkbd(hdev, field, usage, value); 782 781 default: 783 782 return 0; ··· 1059 1056 break; 1060 1057 case USB_DEVICE_ID_LENOVO_TP10UBKBD: 1061 1058 case USB_DEVICE_ID_LENOVO_X1_TAB: 1059 + case USB_DEVICE_ID_LENOVO_X1_TAB3: 1062 1060 ret = lenovo_led_set_tp10ubkbd(hdev, tp10ubkbd_led[led_nr], value); 1063 1061 break; 1064 1062 } ··· 1290 1286 break; 1291 1287 case USB_DEVICE_ID_LENOVO_TP10UBKBD: 1292 1288 case USB_DEVICE_ID_LENOVO_X1_TAB: 1289 + case USB_DEVICE_ID_LENOVO_X1_TAB3: 1293 1290 ret = lenovo_probe_tp10ubkbd(hdev); 1294 1291 break; 1295 1292 default: ··· 1377 1372 break; 1378 1373 case USB_DEVICE_ID_LENOVO_TP10UBKBD: 1379 1374 case USB_DEVICE_ID_LENOVO_X1_TAB: 1375 + case USB_DEVICE_ID_LENOVO_X1_TAB3: 1380 1376 lenovo_remove_tp10ubkbd(hdev); 1381 1377 break; 1382 1378 } ··· 1427 1421 */ 1428 1422 { HID_DEVICE(BUS_USB, HID_GROUP_GENERIC, 1429 1423 USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_X1_TAB) }, 1424 + { HID_DEVICE(BUS_USB, HID_GROUP_GENERIC, 1425 + USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_X1_TAB3) }, 1430 1426 { } 1431 1427 }; 1432 1428
+4
drivers/hid/hid-multitouch.c
··· 2146 2146 HID_DEVICE(BUS_BLUETOOTH, HID_GROUP_MULTITOUCH_WIN_8, 2147 2147 USB_VENDOR_ID_LOGITECH, 2148 2148 USB_DEVICE_ID_LOGITECH_CASA_TOUCHPAD) }, 2149 + { .driver_data = MT_CLS_WIN_8_FORCE_MULTI_INPUT_NSMU, 2150 + HID_DEVICE(BUS_USB, HID_GROUP_MULTITOUCH_WIN_8, 2151 + USB_VENDOR_ID_LOGITECH, 2152 + USB_DEVICE_ID_LOGITECH_BOLT_RECEIVER) }, 2149 2153 2150 2154 /* MosArt panels */ 2151 2155 { .driver_data = MT_CLS_CONFIDENCE_MINUS_ONE,
+10
drivers/hid/i2c-hid/i2c-hid-core.c
··· 50 50 #define I2C_HID_QUIRK_BAD_INPUT_SIZE BIT(3) 51 51 #define I2C_HID_QUIRK_NO_WAKEUP_AFTER_RESET BIT(4) 52 52 #define I2C_HID_QUIRK_NO_SLEEP_ON_SUSPEND BIT(5) 53 + #define I2C_HID_QUIRK_DELAY_WAKEUP_AFTER_RESUME BIT(6) 53 54 54 55 /* Command opcodes */ 55 56 #define I2C_HID_OPCODE_RESET 0x01 ··· 141 140 { USB_VENDOR_ID_ELAN, HID_ANY_ID, 142 141 I2C_HID_QUIRK_NO_WAKEUP_AFTER_RESET | 143 142 I2C_HID_QUIRK_BOGUS_IRQ }, 143 + { I2C_VENDOR_ID_GOODIX, I2C_DEVICE_ID_GOODIX_0D42, 144 + I2C_HID_QUIRK_DELAY_WAKEUP_AFTER_RESUME }, 144 145 { 0, 0 } 145 146 }; 146 147 ··· 983 980 ret); 984 981 return -ENXIO; 985 982 } 983 + 984 + /* On Goodix 27c6:0d42 wait extra time before device wakeup. 985 + * It's not clear why but if we send wakeup too early, the device will 986 + * never trigger input interrupts. 987 + */ 988 + if (ihid->quirks & I2C_HID_QUIRK_DELAY_WAKEUP_AFTER_RESUME) 989 + msleep(1500); 986 990 987 991 /* Instead of resetting device, simply powers the device on. This 988 992 * solves "incomplete reports" on Raydium devices 2386:3118 and