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

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

Pull HID fixes from Jiri Kosina:

- handling of new keycodes for contextual AI usages (Akshai Murari)

- fix for UAF in hid-roccat (Benoît Sevens)

- deduplication of error logging in amd_sfh (Maximilian Pezzullo)

- various device-specific quirks and device ID additions (Even Xu, Lode
Willems, Leo Vriska)

* tag 'hid-for-linus-2026040801' of git://git.kernel.org/pub/scm/linux/kernel/git/hid/hid:
Input: add keycodes for contextual AI usages (HUTRR119)
HID: Kysona: Add support for VXE Dragonfly R1 Pro
HID: amd_sfh: don't log error when device discovery fails with -EOPNOTSUPP
HID: quirks: add HID_QUIRK_ALWAYS_POLL for 8BitDo Pro 3
HID: roccat: fix use-after-free in roccat_report_event
HID: Intel-thc-hid: Intel-quickspi: Add NVL Device IDs
HID: Intel-thc-hid: Intel-quicki2c: Add NVL Device IDs

+46 -1
+2 -1
drivers/hid/amd-sfh-hid/amd_sfh_pcie.c
··· 413 413 rc = amd_sfh_hid_client_init(mp2); 414 414 if (rc) { 415 415 amd_sfh_clear_intr(mp2); 416 - dev_err(&pdev->dev, "amd_sfh_hid_client_init failed err %d\n", rc); 416 + if (rc != -EOPNOTSUPP) 417 + dev_err(&pdev->dev, "amd_sfh_hid_client_init failed err %d\n", rc); 417 418 return; 418 419 } 419 420
+6
drivers/hid/hid-debug.c
··· 990 990 { 0x0c, 0x01c9, "ALContactSync" }, 991 991 { 0x0c, 0x01ca, "ALNavigation" }, 992 992 { 0x0c, 0x01cb, "ALContextawareDesktopAssistant" }, 993 + { 0x0c, 0x01cc, "ALActionOnSelection" }, 994 + { 0x0c, 0x01cd, "ALContextualInsertion" }, 995 + { 0x0c, 0x01ce, "ALContextualQuery" }, 993 996 { 0x0c, 0x0200, "GenericGUIApplicationControls" }, 994 997 { 0x0c, 0x0201, "ACNew" }, 995 998 { 0x0c, 0x0202, "ACOpen" }, ··· 3378 3375 [KEY_BRIGHTNESS_MIN] = "BrightnessMin", 3379 3376 [KEY_BRIGHTNESS_MAX] = "BrightnessMax", 3380 3377 [KEY_BRIGHTNESS_AUTO] = "BrightnessAuto", 3378 + [KEY_ACTION_ON_SELECTION] = "ActionOnSelection", 3379 + [KEY_CONTEXTUAL_INSERT] = "ContextualInsert", 3380 + [KEY_CONTEXTUAL_QUERY] = "ContextualQuery", 3381 3381 [KEY_KBDINPUTASSIST_PREV] = "KbdInputAssistPrev", 3382 3382 [KEY_KBDINPUTASSIST_NEXT] = "KbdInputAssistNext", 3383 3383 [KEY_KBDINPUTASSIST_PREVGROUP] = "KbdInputAssistPrevGroup",
+7
drivers/hid/hid-ids.h
··· 22 22 #define USB_DEVICE_ID_3M2256 0x0502 23 23 #define USB_DEVICE_ID_3M3266 0x0506 24 24 25 + #define USB_VENDOR_ID_8BITDO 0x2dc8 26 + #define USB_DEVICE_ID_8BITDO_PRO_3 0x6009 27 + 25 28 #define USB_VENDOR_ID_A4TECH 0x09da 26 29 #define USB_DEVICE_ID_A4TECH_WCP32PU 0x0006 27 30 #define USB_DEVICE_ID_A4TECH_X5_005D 0x000a ··· 1473 1470 1474 1471 #define USB_VENDOR_ID_VTL 0x0306 1475 1472 #define USB_DEVICE_ID_VTL_MULTITOUCH_FF3F 0xff3f 1473 + 1474 + #define USB_VENDOR_ID_VXE 0x3554 1475 + #define USB_DEVICE_ID_VXE_DRAGONFLY_R1_PRO_DONGLE 0xf58a 1476 + #define USB_DEVICE_ID_VXE_DRAGONFLY_R1_PRO_WIRED 0xf58c 1476 1477 1477 1478 #define USB_VENDOR_ID_WACOM 0x056a 1478 1479 #define USB_DEVICE_ID_WACOM_GRAPHIRE_BLUETOOTH 0x81
+3
drivers/hid/hid-input.c
··· 1227 1227 case 0x1bc: map_key_clear(KEY_MESSENGER); break; 1228 1228 case 0x1bd: map_key_clear(KEY_INFO); break; 1229 1229 case 0x1cb: map_key_clear(KEY_ASSISTANT); break; 1230 + case 0x1cc: map_key_clear(KEY_ACTION_ON_SELECTION); break; 1231 + case 0x1cd: map_key_clear(KEY_CONTEXTUAL_INSERT); break; 1232 + case 0x1ce: map_key_clear(KEY_CONTEXTUAL_QUERY); break; 1230 1233 case 0x201: map_key_clear(KEY_NEW); break; 1231 1234 case 0x202: map_key_clear(KEY_OPEN); break; 1232 1235 case 0x203: map_key_clear(KEY_CLOSE); break;
+2
drivers/hid/hid-kysona.c
··· 272 272 static const struct hid_device_id kysona_devices[] = { 273 273 { HID_USB_DEVICE(USB_VENDOR_ID_KYSONA, USB_DEVICE_ID_KYSONA_M600_DONGLE) }, 274 274 { HID_USB_DEVICE(USB_VENDOR_ID_KYSONA, USB_DEVICE_ID_KYSONA_M600_WIRED) }, 275 + { HID_USB_DEVICE(USB_VENDOR_ID_VXE, USB_DEVICE_ID_VXE_DRAGONFLY_R1_PRO_DONGLE) }, 276 + { HID_USB_DEVICE(USB_VENDOR_ID_VXE, USB_DEVICE_ID_VXE_DRAGONFLY_R1_PRO_WIRED) }, 275 277 { } 276 278 }; 277 279 MODULE_DEVICE_TABLE(hid, kysona_devices);
+1
drivers/hid/hid-quirks.c
··· 25 25 */ 26 26 27 27 static const struct hid_device_id hid_quirks[] = { 28 + { HID_USB_DEVICE(USB_VENDOR_ID_8BITDO, USB_DEVICE_ID_8BITDO_PRO_3), HID_QUIRK_ALWAYS_POLL }, 28 29 { HID_USB_DEVICE(USB_VENDOR_ID_AASHIMA, USB_DEVICE_ID_AASHIMA_GAMEPAD), HID_QUIRK_BADPAD }, 29 30 { HID_USB_DEVICE(USB_VENDOR_ID_AASHIMA, USB_DEVICE_ID_AASHIMA_PREDATOR), HID_QUIRK_BADPAD }, 30 31 { HID_USB_DEVICE(USB_VENDOR_ID_ADATA_XPG, USB_VENDOR_ID_ADATA_XPG_WL_GAMING_MOUSE), HID_QUIRK_ALWAYS_POLL },
+2
drivers/hid/hid-roccat.c
··· 257 257 if (!new_value) 258 258 return -ENOMEM; 259 259 260 + mutex_lock(&device->readers_lock); 260 261 mutex_lock(&device->cbuf_lock); 261 262 262 263 report = &device->cbuf[device->cbuf_end]; ··· 280 279 } 281 280 282 281 mutex_unlock(&device->cbuf_lock); 282 + mutex_unlock(&device->readers_lock); 283 283 284 284 wake_up_interruptible(&device->wait); 285 285 return 0;
+7
drivers/hid/intel-thc-hid/intel-quicki2c/pci-quicki2c.c
··· 26 26 .max_interrupt_delay = MAX_RX_INTERRUPT_DELAY, 27 27 }; 28 28 29 + static struct quicki2c_ddata nvl_ddata = { 30 + .max_detect_size = MAX_RX_DETECT_SIZE_NVL, 31 + .max_interrupt_delay = MAX_RX_INTERRUPT_DELAY, 32 + }; 33 + 29 34 /* THC QuickI2C ACPI method to get device properties */ 30 35 /* HIDI2C device method */ 31 36 static guid_t i2c_hid_guid = ··· 1037 1032 { PCI_DEVICE_DATA(INTEL, THC_PTL_U_DEVICE_ID_I2C_PORT2, &ptl_ddata) }, 1038 1033 { PCI_DEVICE_DATA(INTEL, THC_WCL_DEVICE_ID_I2C_PORT1, &ptl_ddata) }, 1039 1034 { PCI_DEVICE_DATA(INTEL, THC_WCL_DEVICE_ID_I2C_PORT2, &ptl_ddata) }, 1035 + { PCI_DEVICE_DATA(INTEL, THC_NVL_H_DEVICE_ID_I2C_PORT1, &nvl_ddata) }, 1036 + { PCI_DEVICE_DATA(INTEL, THC_NVL_H_DEVICE_ID_I2C_PORT2, &nvl_ddata) }, 1040 1037 { } 1041 1038 }; 1042 1039 MODULE_DEVICE_TABLE(pci, quicki2c_pci_tbl);
+4
drivers/hid/intel-thc-hid/intel-quicki2c/quicki2c-dev.h
··· 15 15 #define PCI_DEVICE_ID_INTEL_THC_PTL_U_DEVICE_ID_I2C_PORT2 0xE44A 16 16 #define PCI_DEVICE_ID_INTEL_THC_WCL_DEVICE_ID_I2C_PORT1 0x4D48 17 17 #define PCI_DEVICE_ID_INTEL_THC_WCL_DEVICE_ID_I2C_PORT2 0x4D4A 18 + #define PCI_DEVICE_ID_INTEL_THC_NVL_H_DEVICE_ID_I2C_PORT1 0xD348 19 + #define PCI_DEVICE_ID_INTEL_THC_NVL_H_DEVICE_ID_I2C_PORT2 0xD34A 18 20 19 21 /* Packet size value, the unit is 16 bytes */ 20 22 #define MAX_PACKET_SIZE_VALUE_LNL 256 ··· 42 40 43 41 /* PTL Max packet size detection capability is 255 Bytes */ 44 42 #define MAX_RX_DETECT_SIZE_PTL 255 43 + /* NVL Max packet size detection capability is 64K Bytes */ 44 + #define MAX_RX_DETECT_SIZE_NVL 65535 45 45 /* Max interrupt delay capability is 2.56ms */ 46 46 #define MAX_RX_INTERRUPT_DELAY 256 47 47
+6
drivers/hid/intel-thc-hid/intel-quickspi/pci-quickspi.c
··· 37 37 .max_packet_size_value = MAX_PACKET_SIZE_VALUE_MTL, 38 38 }; 39 39 40 + struct quickspi_driver_data nvl = { 41 + .max_packet_size_value = MAX_PACKET_SIZE_VALUE_LNL, 42 + }; 43 + 40 44 /* THC QuickSPI ACPI method to get device properties */ 41 45 /* HIDSPI Method: {6e2ac436-0fcf-41af-a265-b32a220dcfab} */ 42 46 static guid_t hidspi_guid = ··· 986 982 {PCI_DEVICE_DATA(INTEL, THC_WCL_DEVICE_ID_SPI_PORT2, &ptl), }, 987 983 {PCI_DEVICE_DATA(INTEL, THC_ARL_DEVICE_ID_SPI_PORT1, &arl), }, 988 984 {PCI_DEVICE_DATA(INTEL, THC_ARL_DEVICE_ID_SPI_PORT2, &arl), }, 985 + {PCI_DEVICE_DATA(INTEL, THC_NVL_H_DEVICE_ID_SPI_PORT1, &nvl), }, 986 + {PCI_DEVICE_DATA(INTEL, THC_NVL_H_DEVICE_ID_SPI_PORT2, &nvl), }, 989 987 {} 990 988 }; 991 989 MODULE_DEVICE_TABLE(pci, quickspi_pci_tbl);
+2
drivers/hid/intel-thc-hid/intel-quickspi/quickspi-dev.h
··· 23 23 #define PCI_DEVICE_ID_INTEL_THC_WCL_DEVICE_ID_SPI_PORT2 0x4D4B 24 24 #define PCI_DEVICE_ID_INTEL_THC_ARL_DEVICE_ID_SPI_PORT1 0x7749 25 25 #define PCI_DEVICE_ID_INTEL_THC_ARL_DEVICE_ID_SPI_PORT2 0x774B 26 + #define PCI_DEVICE_ID_INTEL_THC_NVL_H_DEVICE_ID_SPI_PORT1 0xD349 27 + #define PCI_DEVICE_ID_INTEL_THC_NVL_H_DEVICE_ID_SPI_PORT2 0xD34B 26 28 27 29 /* HIDSPI special ACPI parameters DSM methods */ 28 30 #define ACPI_QUICKSPI_REVISION_NUM 2
+4
include/uapi/linux/input-event-codes.h
··· 643 643 #define KEY_EPRIVACY_SCREEN_ON 0x252 644 644 #define KEY_EPRIVACY_SCREEN_OFF 0x253 645 645 646 + #define KEY_ACTION_ON_SELECTION 0x254 /* AL Action on Selection (HUTRR119) */ 647 + #define KEY_CONTEXTUAL_INSERT 0x255 /* AL Contextual Insertion (HUTRR119) */ 648 + #define KEY_CONTEXTUAL_QUERY 0x256 /* AL Contextual Query (HUTRR119) */ 649 + 646 650 #define KEY_KBDINPUTASSIST_PREV 0x260 647 651 #define KEY_KBDINPUTASSIST_NEXT 0x261 648 652 #define KEY_KBDINPUTASSIST_PREVGROUP 0x262