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-2025092201' of git://git.kernel.org/pub/scm/linux/kernel/git/hid/hid

Pull HID fixes from Jiri Kosina:

- work data memory corruption fix in amd_sfh (Basavaraj Natikar)

- fix for regression in cp2112 where setting a GPIO value would always
fail (Sébastien Szymanski)

- fix for regression in hid-lenovo causing driver to fail on non-ACPI
systems (Janne Grunau)

- a couple device ID additions and tiny device-specific quirks

* tag 'hid-for-linus-2025092201' of git://git.kernel.org/pub/scm/linux/kernel/git/hid/hid:
HID: amd_sfh: Add sync across amd sfh work functions
HID: asus: add support for missing PX series fn keys
HID: cp2112: fix setter callbacks return value
HID: lenovo: Use KEY_PERFORMANCE instead of ACPI's platform_profile
HID: intel-thc-hid: intel-quickspi: Add WCL Device IDs
HID: intel-thc-hid: intel-quicki2c: Add WCL Device IDs

+34 -12
-2
drivers/hid/Kconfig
··· 597 597 598 598 config HID_LENOVO 599 599 tristate "Lenovo / Thinkpad devices" 600 - depends on ACPI 601 - select ACPI_PLATFORM_PROFILE 602 600 select NEW_LEDS 603 601 select LEDS_CLASS 604 602 help
+10 -2
drivers/hid/amd-sfh-hid/amd_sfh_client.c
··· 39 39 struct amdtp_hid_data *hid_data = hid->driver_data; 40 40 struct amdtp_cl_data *cli_data = hid_data->cli_data; 41 41 struct request_list *req_list = &cli_data->req_list; 42 + struct amd_input_data *in_data = cli_data->in_data; 43 + struct amd_mp2_dev *mp2; 42 44 int i; 43 45 46 + mp2 = container_of(in_data, struct amd_mp2_dev, in_data); 47 + guard(mutex)(&mp2->lock); 44 48 for (i = 0; i < cli_data->num_hid_devices; i++) { 45 49 if (cli_data->hid_sensor_hubs[i] == hid) { 46 50 struct request_list *new = kzalloc(sizeof(*new), GFP_KERNEL); ··· 79 75 u8 report_id, node_type; 80 76 u8 report_size = 0; 81 77 78 + mp2 = container_of(in_data, struct amd_mp2_dev, in_data); 79 + guard(mutex)(&mp2->lock); 82 80 req_node = list_last_entry(&req_list->list, struct request_list, list); 83 81 list_del(&req_node->list); 84 82 current_index = req_node->current_index; ··· 89 83 node_type = req_node->report_type; 90 84 kfree(req_node); 91 85 92 - mp2 = container_of(in_data, struct amd_mp2_dev, in_data); 93 86 mp2_ops = mp2->mp2_ops; 94 87 if (node_type == HID_FEATURE_REPORT) { 95 88 report_size = mp2_ops->get_feat_rep(sensor_index, report_id, ··· 112 107 cli_data->cur_hid_dev = current_index; 113 108 cli_data->sensor_requested_cnt[current_index] = 0; 114 109 amdtp_hid_wakeup(cli_data->hid_sensor_hubs[current_index]); 110 + if (!list_empty(&req_list->list)) 111 + schedule_delayed_work(&cli_data->work, 0); 115 112 } 116 113 117 114 void amd_sfh_work_buffer(struct work_struct *work) ··· 124 117 u8 report_size; 125 118 int i; 126 119 120 + mp2 = container_of(in_data, struct amd_mp2_dev, in_data); 121 + guard(mutex)(&mp2->lock); 127 122 for (i = 0; i < cli_data->num_hid_devices; i++) { 128 123 if (cli_data->sensor_sts[i] == SENSOR_ENABLED) { 129 - mp2 = container_of(in_data, struct amd_mp2_dev, in_data); 130 124 report_size = mp2->mp2_ops->get_in_rep(i, cli_data->sensor_idx[i], 131 125 cli_data->report_id[i], in_data); 132 126 hid_input_report(cli_data->hid_sensor_hubs[i], HID_INPUT_REPORT,
+3
drivers/hid/amd-sfh-hid/amd_sfh_common.h
··· 10 10 #ifndef AMD_SFH_COMMON_H 11 11 #define AMD_SFH_COMMON_H 12 12 13 + #include <linux/mutex.h> 13 14 #include <linux/pci.h> 14 15 #include "amd_sfh_hid.h" 15 16 ··· 60 59 u32 mp2_acs; 61 60 struct sfh_dev_status dev_en; 62 61 struct work_struct work; 62 + /* mp2 to protect data */ 63 + struct mutex lock; 63 64 u8 init_done; 64 65 u8 rver; 65 66 };
+4
drivers/hid/amd-sfh-hid/amd_sfh_pcie.c
··· 466 466 if (!privdata->cl_data) 467 467 return -ENOMEM; 468 468 469 + rc = devm_mutex_init(&pdev->dev, &privdata->lock); 470 + if (rc) 471 + return rc; 472 + 469 473 privdata->sfh1_1_ops = (const struct amd_sfh1_1_ops *)id->driver_data; 470 474 if (privdata->sfh1_1_ops) { 471 475 if (boot_cpu_data.x86 >= 0x1A)
+3
drivers/hid/hid-asus.c
··· 974 974 case 0xc4: asus_map_key_clear(KEY_KBDILLUMUP); break; 975 975 case 0xc5: asus_map_key_clear(KEY_KBDILLUMDOWN); break; 976 976 case 0xc7: asus_map_key_clear(KEY_KBDILLUMTOGGLE); break; 977 + case 0x4e: asus_map_key_clear(KEY_FN_ESC); break; 978 + case 0x7e: asus_map_key_clear(KEY_EMOJI_PICKER); break; 977 979 980 + case 0x8b: asus_map_key_clear(KEY_PROG1); break; /* ProArt Creator Hub key */ 978 981 case 0x6b: asus_map_key_clear(KEY_F21); break; /* ASUS touchpad toggle */ 979 982 case 0x38: asus_map_key_clear(KEY_PROG1); break; /* ROG key */ 980 983 case 0xba: asus_map_key_clear(KEY_PROG2); break; /* Fn+C ASUS Splendid */
+5 -5
drivers/hid/hid-cp2112.c
··· 229 229 ret = hid_hw_raw_request(hdev, CP2112_GPIO_SET, buf, 230 230 CP2112_GPIO_SET_LENGTH, HID_FEATURE_REPORT, 231 231 HID_REQ_SET_REPORT); 232 - if (ret < 0) 232 + if (ret != CP2112_GPIO_SET_LENGTH) { 233 233 hid_err(hdev, "error setting GPIO values: %d\n", ret); 234 + return ret < 0 ? ret : -EIO; 235 + } 234 236 235 - return ret; 237 + return 0; 236 238 } 237 239 238 240 static int cp2112_gpio_set(struct gpio_chip *chip, unsigned int offset, ··· 311 309 * Set gpio value when output direction is already set, 312 310 * as specified in AN495, Rev. 0.2, cpt. 4.4 313 311 */ 314 - cp2112_gpio_set_unlocked(dev, offset, value); 315 - 316 - return 0; 312 + return cp2112_gpio_set_unlocked(dev, offset, value); 317 313 } 318 314 319 315 static int cp2112_hid_get(struct hid_device *hdev, unsigned char report_number,
+1 -3
drivers/hid/hid-lenovo.c
··· 32 32 #include <linux/leds.h> 33 33 #include <linux/workqueue.h> 34 34 35 - #include <linux/platform_profile.h> 36 - 37 35 #include "hid-ids.h" 38 36 39 37 /* Userspace expects F20 for mic-mute KEY_MICMUTE does not work */ ··· 732 734 report_key_event(input, KEY_RFKILL); 733 735 return 1; 734 736 } 735 - platform_profile_cycle(); 737 + report_key_event(input, KEY_PERFORMANCE); 736 738 return 1; 737 739 case TP_X12_RAW_HOTKEY_FN_F10: 738 740 /* TAB1 has PICKUP Phone and TAB2 use Snipping tool*/
+2
drivers/hid/intel-thc-hid/intel-quicki2c/pci-quicki2c.c
··· 997 997 { PCI_DEVICE_DATA(INTEL, THC_PTL_H_DEVICE_ID_I2C_PORT2, &ptl_ddata) }, 998 998 { PCI_DEVICE_DATA(INTEL, THC_PTL_U_DEVICE_ID_I2C_PORT1, &ptl_ddata) }, 999 999 { PCI_DEVICE_DATA(INTEL, THC_PTL_U_DEVICE_ID_I2C_PORT2, &ptl_ddata) }, 1000 + { PCI_DEVICE_DATA(INTEL, THC_WCL_DEVICE_ID_I2C_PORT1, &ptl_ddata) }, 1001 + { PCI_DEVICE_DATA(INTEL, THC_WCL_DEVICE_ID_I2C_PORT2, &ptl_ddata) }, 1000 1002 { } 1001 1003 }; 1002 1004 MODULE_DEVICE_TABLE(pci, quicki2c_pci_tbl);
+2
drivers/hid/intel-thc-hid/intel-quicki2c/quicki2c-dev.h
··· 13 13 #define PCI_DEVICE_ID_INTEL_THC_PTL_H_DEVICE_ID_I2C_PORT2 0xE34A 14 14 #define PCI_DEVICE_ID_INTEL_THC_PTL_U_DEVICE_ID_I2C_PORT1 0xE448 15 15 #define PCI_DEVICE_ID_INTEL_THC_PTL_U_DEVICE_ID_I2C_PORT2 0xE44A 16 + #define PCI_DEVICE_ID_INTEL_THC_WCL_DEVICE_ID_I2C_PORT1 0x4D48 17 + #define PCI_DEVICE_ID_INTEL_THC_WCL_DEVICE_ID_I2C_PORT2 0x4D4A 16 18 17 19 /* Packet size value, the unit is 16 bytes */ 18 20 #define MAX_PACKET_SIZE_VALUE_LNL 256
+2
drivers/hid/intel-thc-hid/intel-quickspi/pci-quickspi.c
··· 976 976 {PCI_DEVICE_DATA(INTEL, THC_PTL_H_DEVICE_ID_SPI_PORT2, &ptl), }, 977 977 {PCI_DEVICE_DATA(INTEL, THC_PTL_U_DEVICE_ID_SPI_PORT1, &ptl), }, 978 978 {PCI_DEVICE_DATA(INTEL, THC_PTL_U_DEVICE_ID_SPI_PORT2, &ptl), }, 979 + {PCI_DEVICE_DATA(INTEL, THC_WCL_DEVICE_ID_SPI_PORT1, &ptl), }, 980 + {PCI_DEVICE_DATA(INTEL, THC_WCL_DEVICE_ID_SPI_PORT2, &ptl), }, 979 981 {} 980 982 }; 981 983 MODULE_DEVICE_TABLE(pci, quickspi_pci_tbl);
+2
drivers/hid/intel-thc-hid/intel-quickspi/quickspi-dev.h
··· 19 19 #define PCI_DEVICE_ID_INTEL_THC_PTL_H_DEVICE_ID_SPI_PORT2 0xE34B 20 20 #define PCI_DEVICE_ID_INTEL_THC_PTL_U_DEVICE_ID_SPI_PORT1 0xE449 21 21 #define PCI_DEVICE_ID_INTEL_THC_PTL_U_DEVICE_ID_SPI_PORT2 0xE44B 22 + #define PCI_DEVICE_ID_INTEL_THC_WCL_DEVICE_ID_SPI_PORT1 0x4D49 23 + #define PCI_DEVICE_ID_INTEL_THC_WCL_DEVICE_ID_SPI_PORT2 0x4D4B 22 24 23 25 /* HIDSPI special ACPI parameters DSM methods */ 24 26 #define ACPI_QUICKSPI_REVISION_NUM 2