Linux Input/HID development
 help / color / mirror / Atom feed
* [PATCH] HID: i2c-hid: reset Synaptics SYNA32A4 on resume
@ 2026-10-10 21:17 Matt Ervin
  0 siblings, 0 replies; only message in thread
From: Matt Ervin @ 2026-10-10 21:17 UTC (permalink / raw)
  To: linux-input; +Cc: Jiri Kosina, Benjamin Tissoires

On the HP OMEN Laptop 15-ek0xxx (board 878B), the Synaptics SYNA32A4
touchpad (06CB:CE17, hid-multitouch via i2c_hid_acpi) is quiet before
suspend but starts asserting its interrupt continuously within a few
seconds of resuming, at a steady ~590 interrupts/s, while producing no
input events. The storm does not stop on its own; it persists until the
device is reset.

The pad sits behind i2c_designware.1, which shares its IRQ with idma64
and snd_hda_intel, so each spurious report also costs ~58 interrupts on
the shared line:

  irq17 (i2c_designware.1): 33968/s   irq63 (SYNA32A4:00): 588/s
  irq17 (i2c_designware.1): 34116/s   irq63 (SYNA32A4:00): 588/s

That keeps CPU0 at ~40% hardirq and denies it deep C-states, measured
as 3.5x less C3 residency than a sibling core. Unbinding and rebinding
the i2c_hid_acpi driver, which resets the device, takes both rates to
zero and the touchpad keeps working normally afterwards.

This is the same failure mode that I2C_HID_QUIRK_RESET_ON_RESUME was
added for in commit 538f67407e2c ("HID: i2c-hid: reset Synaptics
SYNA2393 on resume"): spurious interrupts after resume until the device
is reset. Add the SYNA32A4 to the quirk table so it is reset on resume.

Tested on a 7.2.8 kernel with this change applied to the i2c-hid module:
with the stock module a suspend/resume cycle brought the touchpad IRQ to
585/s within ten seconds of resume; with the quirk, two consecutive
suspend/resume cycles stayed at 0/s and the touchpad kept working.

Signed-off-by: Matt Ervin <matt@impsoftware.org>
---
 drivers/hid/hid-ids.h              | 1 +
 drivers/hid/i2c-hid/i2c-hid-core.c | 2 ++
 2 files changed, 3 insertions(+)

diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
index a9537b7..10e694f 100644
--- a/drivers/hid/hid-ids.h
+++ b/drivers/hid/hid-ids.h
@@ -1444,6 +1444,7 @@
 
 #define I2C_VENDOR_ID_SYNAPTICS     0x06cb
 #define I2C_PRODUCT_ID_SYNAPTICS_SYNA2393   0x7a13
+#define I2C_PRODUCT_ID_SYNAPTICS_SYNA32A4   0xce17
 
 #define USB_VENDOR_ID_SYNAPTICS		0x06cb
 #define USB_DEVICE_ID_SYNAPTICS_TP	0x0001
diff --git a/drivers/hid/i2c-hid/i2c-hid-core.c b/drivers/hid/i2c-hid/i2c-hid-core.c
index a8a9854..8ab7677 100644
--- a/drivers/hid/i2c-hid/i2c-hid-core.c
+++ b/drivers/hid/i2c-hid/i2c-hid-core.c
@@ -134,6 +134,8 @@ static const struct i2c_hid_quirks {
 		 I2C_HID_QUIRK_RESET_ON_RESUME },
 	{ I2C_VENDOR_ID_SYNAPTICS, I2C_PRODUCT_ID_SYNAPTICS_SYNA2393,
 		 I2C_HID_QUIRK_RESET_ON_RESUME },
+	{ I2C_VENDOR_ID_SYNAPTICS, I2C_PRODUCT_ID_SYNAPTICS_SYNA32A4,
+		 I2C_HID_QUIRK_RESET_ON_RESUME },
 	{ USB_VENDOR_ID_ITE, I2C_DEVICE_ID_ITE_LENOVO_LEGION_Y720,
 		I2C_HID_QUIRK_BAD_INPUT_SIZE },
 	{ I2C_VENDOR_ID_CIRQUE, I2C_PRODUCT_ID_CIRQUE_1063,

base-commit: 145c2b2e9a5c0f794fb4009bcb072ab19f8ccfcd
-- 
2.56.0


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2026-10-10 21:45 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-10 21:17 [PATCH] HID: i2c-hid: reset Synaptics SYNA32A4 on resume Matt Ervin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox