Commit fe24a97c authored by Linus Torvalds's avatar Linus Torvalds
Browse files
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
parents bf5003a0 81cd7e84
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -16,7 +16,10 @@ description:

properties:
  compatible:
    items:
    oneOf:
      - const: goodix,gt7375p
      - items:
          - const: goodix,gt7986u
          - const: goodix,gt7375p

  reg:
+4 −4
Original line number Diff line number Diff line
@@ -273,22 +273,22 @@ int iforce_init_device(struct device *parent, u16 bustype,
 * Get device info.
 */

	if (!iforce_get_id_packet(iforce, 'M', buf, &len) || len < 3)
	if (!iforce_get_id_packet(iforce, 'M', buf, &len) && len >= 3)
		input_dev->id.vendor = get_unaligned_le16(buf + 1);
	else
		dev_warn(&iforce->dev->dev, "Device does not respond to id packet M\n");

	if (!iforce_get_id_packet(iforce, 'P', buf, &len) || len < 3)
	if (!iforce_get_id_packet(iforce, 'P', buf, &len) && len >= 3)
		input_dev->id.product = get_unaligned_le16(buf + 1);
	else
		dev_warn(&iforce->dev->dev, "Device does not respond to id packet P\n");

	if (!iforce_get_id_packet(iforce, 'B', buf, &len) || len < 3)
	if (!iforce_get_id_packet(iforce, 'B', buf, &len) && len >= 3)
		iforce->device_memory.end = get_unaligned_le16(buf + 1);
	else
		dev_warn(&iforce->dev->dev, "Device does not respond to id packet B\n");

	if (!iforce_get_id_packet(iforce, 'N', buf, &len) || len < 2)
	if (!iforce_get_id_packet(iforce, 'N', buf, &len) && len >= 2)
		ff_effects = buf[1];
	else
		dev_warn(&iforce->dev->dev, "Device does not respond to id packet N\n");
+13 −1
Original line number Diff line number Diff line
@@ -18,6 +18,10 @@
#include <linux/gpio.h>
#include <linux/platform_device.h>

static bool use_low_level_irq;
module_param(use_low_level_irq, bool, 0444);
MODULE_PARM_DESC(use_low_level_irq, "Use low-level triggered IRQ instead of edge triggered");

struct soc_button_info {
	const char *name;
	int acpi_index;
@@ -73,6 +77,13 @@ static const struct dmi_system_id dmi_use_low_level_irq[] = {
			DMI_MATCH(DMI_PRODUCT_NAME, "Aspire SW5-012"),
		},
	},
	{
		/* Acer Switch V 10 SW5-017, same issue as Acer Switch 10 SW5-012. */
		.matches = {
			DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
			DMI_MATCH(DMI_PRODUCT_NAME, "SW5-017"),
		},
	},
	{
		/*
		 * Acer One S1003. _LID method messes with power-button GPIO
@@ -164,7 +175,8 @@ soc_button_device_create(struct platform_device *pdev,
		}

		/* See dmi_use_low_level_irq[] comment */
		if (!autorepeat && dmi_check_system(dmi_use_low_level_irq)) {
		if (!autorepeat && (use_low_level_irq ||
				    dmi_check_system(dmi_use_low_level_irq))) {
			irq_set_irq_type(irq, IRQ_TYPE_LEVEL_LOW);
			gpio_keys[n_buttons].irq = irq;
			gpio_keys[n_buttons].gpio = -ENOENT;
+1 −0
Original line number Diff line number Diff line
@@ -192,6 +192,7 @@ static const char * const smbus_pnp_ids[] = {
	"SYN3221", /* HP 15-ay000 */
	"SYN323d", /* HP Spectre X360 13-w013dx */
	"SYN3257", /* HP Envy 13-ad105ng */
	"SYN3286", /* HP Laptop 15-da3001TU */
	NULL
};

+4 −4
Original line number Diff line number Diff line
@@ -115,18 +115,18 @@ static const struct dmi_system_id i8042_dmi_quirk_table[] __initconst = {
		.driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_NEVER)
	},
	{
		/* ASUS ZenBook UX425UA */
		/* ASUS ZenBook UX425UA/QA */
		.matches = {
			DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
			DMI_MATCH(DMI_PRODUCT_NAME, "ZenBook UX425UA"),
			DMI_MATCH(DMI_PRODUCT_NAME, "ZenBook UX425"),
		},
		.driver_data = (void *)(SERIO_QUIRK_PROBE_DEFER | SERIO_QUIRK_RESET_NEVER)
	},
	{
		/* ASUS ZenBook UM325UA */
		/* ASUS ZenBook UM325UA/QA */
		.matches = {
			DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
			DMI_MATCH(DMI_PRODUCT_NAME, "ZenBook UX325UA_UM325UA"),
			DMI_MATCH(DMI_PRODUCT_NAME, "ZenBook UX325"),
		},
		.driver_data = (void *)(SERIO_QUIRK_PROBE_DEFER | SERIO_QUIRK_RESET_NEVER)
	},
Loading