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

Pull HID fixes from Benjamin Tissoires:

- fix potential infinite loop with a badly crafted HID device (Xin
Zhao)

- fix regression from 6.1 in USB logitech devices potentially making
their mouse wheel not working (Bastien Nocera)

- clean up in AMD sensors, which fixes a long time resume bug (Mario
Limonciello)

- few device small fixes and quirks

* tag 'for-linus-2023020901' of git://git.kernel.org/pub/scm/linux/kernel/git/hid/hid:
HID: Ignore battery for ELAN touchscreen 29DF on HP
HID: amd_sfh: if no sensors are enabled, clean up
HID: logitech: Disable hi-res scrolling on USB
HID: core: Fix deadloop in hid_apply_multiplier.
HID: Ignore battery for Elan touchscreen on Asus TP420IA
HID: elecom: add support for TrackBall 056E:011C

+41 -7
+11 -2
drivers/hid/amd-sfh-hid/amd_sfh_client.c
··· 227 227 cl_data->num_hid_devices = amd_mp2_get_sensor_num(privdata, &cl_data->sensor_idx[0]); 228 228 if (cl_data->num_hid_devices == 0) 229 229 return -ENODEV; 230 + cl_data->is_any_sensor_enabled = false; 230 231 231 232 INIT_DELAYED_WORK(&cl_data->work, amd_sfh_work); 232 233 INIT_DELAYED_WORK(&cl_data->work_buffer, amd_sfh_work_buffer); ··· 288 287 status = amd_sfh_wait_for_response 289 288 (privdata, cl_data->sensor_idx[i], SENSOR_ENABLED); 290 289 if (status == SENSOR_ENABLED) { 290 + cl_data->is_any_sensor_enabled = true; 291 291 cl_data->sensor_sts[i] = SENSOR_ENABLED; 292 292 rc = amdtp_hid_probe(cl_data->cur_hid_dev, cl_data); 293 293 if (rc) { ··· 303 301 cl_data->sensor_sts[i]); 304 302 goto cleanup; 305 303 } 304 + } else { 305 + cl_data->sensor_sts[i] = SENSOR_DISABLED; 306 + dev_dbg(dev, "sid 0x%x (%s) status 0x%x\n", 307 + cl_data->sensor_idx[i], 308 + get_sensor_name(cl_data->sensor_idx[i]), 309 + cl_data->sensor_sts[i]); 306 310 } 307 311 dev_dbg(dev, "sid 0x%x (%s) status 0x%x\n", 308 312 cl_data->sensor_idx[i], get_sensor_name(cl_data->sensor_idx[i]), 309 313 cl_data->sensor_sts[i]); 310 314 } 311 - if (mp2_ops->discovery_status && mp2_ops->discovery_status(privdata) == 0) { 315 + if (!cl_data->is_any_sensor_enabled || 316 + (mp2_ops->discovery_status && mp2_ops->discovery_status(privdata) == 0)) { 312 317 amd_sfh_hid_client_deinit(privdata); 313 318 for (i = 0; i < cl_data->num_hid_devices; i++) { 314 319 devm_kfree(dev, cl_data->feature_report[i]); 315 320 devm_kfree(dev, in_data->input_report[i]); 316 321 devm_kfree(dev, cl_data->report_descr[i]); 317 322 } 318 - dev_warn(dev, "Failed to discover, sensors not enabled\n"); 323 + dev_warn(dev, "Failed to discover, sensors not enabled is %d\n", cl_data->is_any_sensor_enabled); 319 324 return -EOPNOTSUPP; 320 325 } 321 326 schedule_delayed_work(&cl_data->work_buffer, msecs_to_jiffies(AMD_SFH_IDLE_LOOP));
+1
drivers/hid/amd-sfh-hid/amd_sfh_hid.h
··· 32 32 struct amdtp_cl_data { 33 33 u8 init_done; 34 34 u32 cur_hid_dev; 35 + bool is_any_sensor_enabled; 35 36 u32 hid_dev_count; 36 37 u32 num_hid_devices; 37 38 struct device_info *hid_devices;
+3
drivers/hid/hid-core.c
··· 1202 1202 __u8 *end; 1203 1203 __u8 *next; 1204 1204 int ret; 1205 + int i; 1205 1206 static int (*dispatch_type[])(struct hid_parser *parser, 1206 1207 struct hid_item *item) = { 1207 1208 hid_parser_main, ··· 1253 1252 goto err; 1254 1253 } 1255 1254 device->collection_size = HID_DEFAULT_NUM_COLLECTIONS; 1255 + for (i = 0; i < HID_DEFAULT_NUM_COLLECTIONS; i++) 1256 + device->collection[i].parent_idx = -1; 1256 1257 1257 1258 ret = -EINVAL; 1258 1259 while ((next = fetch_item(start, end, &item)) != NULL) {
+14 -2
drivers/hid/hid-elecom.c
··· 12 12 * Copyright (c) 2017 Alex Manoussakis <amanou@gnu.org> 13 13 * Copyright (c) 2017 Tomasz Kramkowski <tk@the-tk.com> 14 14 * Copyright (c) 2020 YOSHIOKA Takuma <lo48576@hard-wi.red> 15 + * Copyright (c) 2022 Takahiro Fujii <fujii@xaxxi.net> 15 16 */ 16 17 17 18 /* ··· 90 89 case USB_DEVICE_ID_ELECOM_M_DT1URBK: 91 90 case USB_DEVICE_ID_ELECOM_M_DT1DRBK: 92 91 case USB_DEVICE_ID_ELECOM_M_HT1URBK: 93 - case USB_DEVICE_ID_ELECOM_M_HT1DRBK: 92 + case USB_DEVICE_ID_ELECOM_M_HT1DRBK_010D: 94 93 /* 95 94 * Report descriptor format: 96 95 * 12: button bit count ··· 99 98 * 20: button usage maximum 100 99 */ 101 100 mouse_button_fixup(hdev, rdesc, *rsize, 12, 30, 14, 20, 8); 101 + break; 102 + case USB_DEVICE_ID_ELECOM_M_HT1DRBK_011C: 103 + /* 104 + * Report descriptor format: 105 + * 22: button bit count 106 + * 30: padding bit count 107 + * 24: button report size 108 + * 16: button usage maximum 109 + */ 110 + mouse_button_fixup(hdev, rdesc, *rsize, 22, 30, 24, 16, 8); 102 111 break; 103 112 } 104 113 return rdesc; ··· 123 112 { HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_DT1URBK) }, 124 113 { HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_DT1DRBK) }, 125 114 { HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_HT1URBK) }, 126 - { HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_HT1DRBK) }, 115 + { HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_HT1DRBK_010D) }, 116 + { HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_HT1DRBK_011C) }, 127 117 { } 128 118 }; 129 119 MODULE_DEVICE_TABLE(hid, elecom_devices);
+4 -1
drivers/hid/hid-ids.h
··· 413 413 #define I2C_DEVICE_ID_HP_ENVY_X360_15T_DR100 0x29CF 414 414 #define I2C_DEVICE_ID_HP_ENVY_X360_EU0009NV 0x2CF9 415 415 #define I2C_DEVICE_ID_HP_SPECTRE_X360_15 0x2817 416 + #define I2C_DEVICE_ID_HP_SPECTRE_X360_13_AW0020NG 0x29DF 417 + #define I2C_DEVICE_ID_ASUS_TP420IA_TOUCHSCREEN 0x2BC8 416 418 #define USB_DEVICE_ID_ASUS_UX550VE_TOUCHSCREEN 0x2544 417 419 #define USB_DEVICE_ID_ASUS_UX550_TOUCHSCREEN 0x2706 418 420 #define I2C_DEVICE_ID_SURFACE_GO_TOUCHSCREEN 0x261A ··· 430 428 #define USB_DEVICE_ID_ELECOM_M_DT1URBK 0x00fe 431 429 #define USB_DEVICE_ID_ELECOM_M_DT1DRBK 0x00ff 432 430 #define USB_DEVICE_ID_ELECOM_M_HT1URBK 0x010c 433 - #define USB_DEVICE_ID_ELECOM_M_HT1DRBK 0x010d 431 + #define USB_DEVICE_ID_ELECOM_M_HT1DRBK_010D 0x010d 432 + #define USB_DEVICE_ID_ELECOM_M_HT1DRBK_011C 0x011c 434 433 435 434 #define USB_VENDOR_ID_DREAM_CHEEKY 0x1d34 436 435 #define USB_DEVICE_ID_DREAM_CHEEKY_WN 0x0004
+4
drivers/hid/hid-input.c
··· 370 370 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, 371 371 USB_DEVICE_ID_LOGITECH_DINOVO_EDGE_KBD), 372 372 HID_BATTERY_QUIRK_IGNORE }, 373 + { HID_I2C_DEVICE(USB_VENDOR_ID_ELAN, I2C_DEVICE_ID_ASUS_TP420IA_TOUCHSCREEN), 374 + HID_BATTERY_QUIRK_IGNORE }, 373 375 { HID_USB_DEVICE(USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ASUS_UX550_TOUCHSCREEN), 374 376 HID_BATTERY_QUIRK_IGNORE }, 375 377 { HID_USB_DEVICE(USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ASUS_UX550VE_TOUCHSCREEN), ··· 385 383 { HID_I2C_DEVICE(USB_VENDOR_ID_ELAN, I2C_DEVICE_ID_HP_ENVY_X360_EU0009NV), 386 384 HID_BATTERY_QUIRK_IGNORE }, 387 385 { HID_I2C_DEVICE(USB_VENDOR_ID_ELAN, I2C_DEVICE_ID_HP_SPECTRE_X360_15), 386 + HID_BATTERY_QUIRK_IGNORE }, 387 + { HID_I2C_DEVICE(USB_VENDOR_ID_ELAN, I2C_DEVICE_ID_HP_SPECTRE_X360_13_AW0020NG), 388 388 HID_BATTERY_QUIRK_IGNORE }, 389 389 { HID_I2C_DEVICE(USB_VENDOR_ID_ELAN, I2C_DEVICE_ID_SURFACE_GO_TOUCHSCREEN), 390 390 HID_BATTERY_QUIRK_IGNORE },
+2 -1
drivers/hid/hid-logitech-hidpp.c
··· 3978 3978 } 3979 3979 3980 3980 hidpp_initialize_battery(hidpp); 3981 - hidpp_initialize_hires_scroll(hidpp); 3981 + if (!hid_is_usb(hidpp->hid_dev)) 3982 + hidpp_initialize_hires_scroll(hidpp); 3982 3983 3983 3984 /* forward current battery state */ 3984 3985 if (hidpp->capabilities & HIDPP_CAPABILITY_HIDPP10_BATTERY) {
+2 -1
drivers/hid/hid-quirks.c
··· 393 393 { HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_DT1URBK) }, 394 394 { HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_DT1DRBK) }, 395 395 { HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_HT1URBK) }, 396 - { HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_HT1DRBK) }, 396 + { HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_HT1DRBK_010D) }, 397 + { HID_USB_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_M_HT1DRBK_011C) }, 397 398 #endif 398 399 #if IS_ENABLED(CONFIG_HID_ELO) 399 400 { HID_USB_DEVICE(USB_VENDOR_ID_ELO, 0x0009) },