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 'input-for-v6.1-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input

Pull input fixes from Dmitry Torokhov:

- a fix for 8042 to stop leaking platform device on unload

- a fix for Goodix touchscreens on devices like Nanote UMPC-01 where we
need to reset controller to load config from firmware

- a workaround for Acer Switch to avoid interrupt storm from home and
power buttons

- a workaround for more ASUS ZenBook models to detect keyboard
controller

- a fix for iforce driver to properly handle communication errors

- touchpad on HP Laptop 15-da3001TU switched to RMI mode

* tag 'input-for-v6.1-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input:
Input: i8042 - fix leaking of platform device on module removal
Input: i8042 - apply probe defer to more ASUS ZenBook models
Input: soc_button_array - add Acer Switch V 10 to dmi_use_low_level_irq[]
Input: soc_button_array - add use_low_level_irq module parameter
Input: iforce - invert valid length check when fetching device IDs
Input: goodix - try resetting the controller when no config is set
dt-bindings: input: touchscreen: Add compatible for Goodix GT7986U chip
Input: synaptics - switch touchpad on HP Laptop 15-da3001TU to RMI mode

+37 -14
+4 -1
Documentation/devicetree/bindings/input/goodix,gt7375p.yaml
··· 16 16 17 17 properties: 18 18 compatible: 19 - items: 19 + oneOf: 20 20 - const: goodix,gt7375p 21 + - items: 22 + - const: goodix,gt7986u 23 + - const: goodix,gt7375p 21 24 22 25 reg: 23 26 enum:
+4 -4
drivers/input/joystick/iforce/iforce-main.c
··· 273 273 * Get device info. 274 274 */ 275 275 276 - if (!iforce_get_id_packet(iforce, 'M', buf, &len) || len < 3) 276 + if (!iforce_get_id_packet(iforce, 'M', buf, &len) && len >= 3) 277 277 input_dev->id.vendor = get_unaligned_le16(buf + 1); 278 278 else 279 279 dev_warn(&iforce->dev->dev, "Device does not respond to id packet M\n"); 280 280 281 - if (!iforce_get_id_packet(iforce, 'P', buf, &len) || len < 3) 281 + if (!iforce_get_id_packet(iforce, 'P', buf, &len) && len >= 3) 282 282 input_dev->id.product = get_unaligned_le16(buf + 1); 283 283 else 284 284 dev_warn(&iforce->dev->dev, "Device does not respond to id packet P\n"); 285 285 286 - if (!iforce_get_id_packet(iforce, 'B', buf, &len) || len < 3) 286 + if (!iforce_get_id_packet(iforce, 'B', buf, &len) && len >= 3) 287 287 iforce->device_memory.end = get_unaligned_le16(buf + 1); 288 288 else 289 289 dev_warn(&iforce->dev->dev, "Device does not respond to id packet B\n"); 290 290 291 - if (!iforce_get_id_packet(iforce, 'N', buf, &len) || len < 2) 291 + if (!iforce_get_id_packet(iforce, 'N', buf, &len) && len >= 2) 292 292 ff_effects = buf[1]; 293 293 else 294 294 dev_warn(&iforce->dev->dev, "Device does not respond to id packet N\n");
+13 -1
drivers/input/misc/soc_button_array.c
··· 18 18 #include <linux/gpio.h> 19 19 #include <linux/platform_device.h> 20 20 21 + static bool use_low_level_irq; 22 + module_param(use_low_level_irq, bool, 0444); 23 + MODULE_PARM_DESC(use_low_level_irq, "Use low-level triggered IRQ instead of edge triggered"); 24 + 21 25 struct soc_button_info { 22 26 const char *name; 23 27 int acpi_index; ··· 75 71 .matches = { 76 72 DMI_MATCH(DMI_SYS_VENDOR, "Acer"), 77 73 DMI_MATCH(DMI_PRODUCT_NAME, "Aspire SW5-012"), 74 + }, 75 + }, 76 + { 77 + /* Acer Switch V 10 SW5-017, same issue as Acer Switch 10 SW5-012. */ 78 + .matches = { 79 + DMI_MATCH(DMI_SYS_VENDOR, "Acer"), 80 + DMI_MATCH(DMI_PRODUCT_NAME, "SW5-017"), 78 81 }, 79 82 }, 80 83 { ··· 175 164 } 176 165 177 166 /* See dmi_use_low_level_irq[] comment */ 178 - if (!autorepeat && dmi_check_system(dmi_use_low_level_irq)) { 167 + if (!autorepeat && (use_low_level_irq || 168 + dmi_check_system(dmi_use_low_level_irq))) { 179 169 irq_set_irq_type(irq, IRQ_TYPE_LEVEL_LOW); 180 170 gpio_keys[n_buttons].irq = irq; 181 171 gpio_keys[n_buttons].gpio = -ENOENT;
+1
drivers/input/mouse/synaptics.c
··· 192 192 "SYN3221", /* HP 15-ay000 */ 193 193 "SYN323d", /* HP Spectre X360 13-w013dx */ 194 194 "SYN3257", /* HP Envy 13-ad105ng */ 195 + "SYN3286", /* HP Laptop 15-da3001TU */ 195 196 NULL 196 197 }; 197 198
+4 -4
drivers/input/serio/i8042-acpipnpio.h
··· 115 115 .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_NEVER) 116 116 }, 117 117 { 118 - /* ASUS ZenBook UX425UA */ 118 + /* ASUS ZenBook UX425UA/QA */ 119 119 .matches = { 120 120 DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), 121 - DMI_MATCH(DMI_PRODUCT_NAME, "ZenBook UX425UA"), 121 + DMI_MATCH(DMI_PRODUCT_NAME, "ZenBook UX425"), 122 122 }, 123 123 .driver_data = (void *)(SERIO_QUIRK_PROBE_DEFER | SERIO_QUIRK_RESET_NEVER) 124 124 }, 125 125 { 126 - /* ASUS ZenBook UM325UA */ 126 + /* ASUS ZenBook UM325UA/QA */ 127 127 .matches = { 128 128 DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), 129 - DMI_MATCH(DMI_PRODUCT_NAME, "ZenBook UX325UA_UM325UA"), 129 + DMI_MATCH(DMI_PRODUCT_NAME, "ZenBook UX325"), 130 130 }, 131 131 .driver_data = (void *)(SERIO_QUIRK_PROBE_DEFER | SERIO_QUIRK_RESET_NEVER) 132 132 },
-4
drivers/input/serio/i8042.c
··· 1543 1543 { 1544 1544 int error; 1545 1545 1546 - i8042_platform_device = dev; 1547 - 1548 1546 if (i8042_reset == I8042_RESET_ALWAYS) { 1549 1547 error = i8042_controller_selftest(); 1550 1548 if (error) ··· 1580 1582 i8042_free_aux_ports(); /* in case KBD failed but AUX not */ 1581 1583 i8042_free_irqs(); 1582 1584 i8042_controller_reset(false); 1583 - i8042_platform_device = NULL; 1584 1585 1585 1586 return error; 1586 1587 } ··· 1589 1592 i8042_unregister_ports(); 1590 1593 i8042_free_irqs(); 1591 1594 i8042_controller_reset(false); 1592 - i8042_platform_device = NULL; 1593 1595 1594 1596 return 0; 1595 1597 }
+11
drivers/input/touchscreen/goodix.c
··· 1158 1158 input_set_abs_params(ts->input_dev, ABS_MT_WIDTH_MAJOR, 0, 255, 0, 0); 1159 1159 input_set_abs_params(ts->input_dev, ABS_MT_TOUCH_MAJOR, 0, 255, 0, 0); 1160 1160 1161 + retry_read_config: 1161 1162 /* Read configuration and apply touchscreen parameters */ 1162 1163 goodix_read_config(ts); 1163 1164 ··· 1166 1165 touchscreen_parse_properties(ts->input_dev, true, &ts->prop); 1167 1166 1168 1167 if (!ts->prop.max_x || !ts->prop.max_y || !ts->max_touch_num) { 1168 + if (!ts->reset_controller_at_probe && 1169 + ts->irq_pin_access_method != IRQ_PIN_ACCESS_NONE) { 1170 + dev_info(&ts->client->dev, "Config not set, resetting controller\n"); 1171 + /* Retry after a controller reset */ 1172 + ts->reset_controller_at_probe = true; 1173 + error = goodix_reset(ts); 1174 + if (error) 1175 + return error; 1176 + goto retry_read_config; 1177 + } 1169 1178 dev_err(&ts->client->dev, 1170 1179 "Invalid config (%d, %d, %d), using defaults\n", 1171 1180 ts->prop.max_x, ts->prop.max_y, ts->max_touch_num);