* i2c_hid_acpi: ELAN2514 touchscreen causes IRQ flood on HP Omnibook X 14 (Lunar Lake)
@ 2026-05-17 4:33 Dennis Foster
2026-05-17 23:49 ` Dennis Foster
0 siblings, 1 reply; 3+ messages in thread
From: Dennis Foster @ 2026-05-17 4:33 UTC (permalink / raw)
To: linux-input; +Cc: linux-i2c, benjamintissoires, jikos
Hi,
I'm seeing a continuous IRQ flood from the ELAN2514 touchscreen on an HP Omnibook X 14 (Intel Core Ultra 5 226V, Lunar Lake). With the driver bound, IRQ 20 fires non-stop and keeps one CPU core at ~30% load with the machine otherwise idle.
Kernel: 7.0.8-arch1-1
Machine: HP Omnibook X 14, Intel Core Ultra 5 226V
Touchscreen: ELAN2514, 04F3:43F4, ACPI \_SB_.PC00.I2C4.TPL1
Controller: i2c_designware.2 on IRQ 20 (IR-IO-APIC 20-fasteoi)
At boot, i2c_hid_acpi logs this once during probe (rate-limited):
[ 5.042325] i2c_hid_acpi i2c-ELAN2514:00: i2c_hid_get_input: IRQ triggered but there's no data
The device registers successfully after that, but the interrupt line never deasserts. The counter on CPU5 climbs without bound:
20: 0 0 0 0 0 19537 0 0 IR-IO-APIC 20-fasteoi i2c_designware.2
Also worth noting - the device registers an unusual set of input nodes, including several labeled UNKNOWN:
ELAN2514:00 04F3:43F4 Touchscreen
ELAN2514:00 04F3:43F4 Stylus
ELAN2514:00 04F3:43F4 Keyboard
ELAN2514:00 04F3:43F4 Mouse
ELAN2514:00 04F3:43F4 UNKNOWN (x5)
As a workaround I'm unbinding the driver via udev immediately after probe completes:
ACTION=="bind", DRIVER=="i2c_hid_acpi", KERNEL=="i2c-ELAN2514:00", \
RUN+="/bin/sh -c 'echo i2c-ELAN2514:00 > /sys/bus/i2c/drivers/i2c_hid_acpi/unbind'"
This stops the flood but obviously leaves the touchscreen non-functional.
--
Dennis
^ permalink raw reply [flat|nested] 3+ messages in thread* Re:i2c_hid_acpi: ELAN2514 touchscreen causes IRQ flood on HP Omnibook X 14 (Lunar Lake) 2026-05-17 4:33 i2c_hid_acpi: ELAN2514 touchscreen causes IRQ flood on HP Omnibook X 14 (Lunar Lake) Dennis Foster @ 2026-05-17 23:49 ` Dennis Foster 2026-09-16 7:00 ` i2c_hid_acpi: " Strider Jones 0 siblings, 1 reply; 3+ messages in thread From: Dennis Foster @ 2026-05-17 23:49 UTC (permalink / raw) To: linux-input; +Cc: linux-i2c, benjamintissoires, jikos Couple of corrections. The machine is actually an HP OmniBook X Flip 16, not the "Omnibook X 14" I wrote in the original - my mistake. Also bumped to kernel 7.0.9 today; same behavior. BIOS is HP F.11 (03/04/2026), board 8DA1. I disabled the udev workaround briefly to get an actual rate. With the driver bound for ~40 seconds, /proc/interrupts went from 18,811 to 1,778,374 on IRQ 20, i.e. roughly 42,900/s pinned on CPU5. Kernel never marks the line bad - no "nobody cared", no "disabling IRQ", it just keeps fasteoi'ing. One thing I missed in the DSDT that might be relevant: TPL1's interrupt isn't a GpioInt() resource, it's a regular Interrupt() template with the vector patched in at _INI: Name (SBFI, ResourceTemplate () { Interrupt (ResourceConsumer, Level, ActiveLow, Exclusive, ,, _Y4F) { 0x00000000, } }) Method (_INI, ...) { ... INT2 = INUM (GPLI) ... } That's why it surfaces as IR-IO-APIC 20-fasteoi rather than something gpiolib-backed. _CRS picks between this template and a G_IN()/GpioInt template based on the BIOS variable TPLM, and this firmware ships with TPLM != 0 so we end up on the APIC path. I don't see a setup option to flip it. Probably unrelated but in the same area of the DSDT - this prints once at boot: ACPI BIOS Error (bug): Could not resolve symbol [\_SB.PC00.I2C5.TPL1], AE_NOT_FOUND I2C5 has no TPL1 in this firmware (the touchscreen is on I2C4). Happy to send the full decompiled DSDT/SSDTs, a fuller dmesg with i2c_hid dyndbg enabled, or test patches. -- Dennis ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: i2c_hid_acpi: ELAN2514 touchscreen causes IRQ flood on HP Omnibook X 14 (Lunar Lake) 2026-05-17 23:49 ` Dennis Foster @ 2026-09-16 7:00 ` Strider Jones 0 siblings, 0 replies; 3+ messages in thread From: Strider Jones @ 2026-09-16 7:00 UTC (permalink / raw) To: mail; +Cc: benjamin.tissoires, jikos, linux-i2c, linux-input, Strider Jones Adding a second machine with the same failure, in case it helps get this looked at. Happy to test patches or collect more data. Hardware HP OmniBook 7 Flip Laptop 16-au0xxx (SKU B88B1UA#ABA), board 8DA0 Intel Core Ultra 7 258V (Lunar Lake), Insyde BIOS F.10 (2025-10-22), latest available on LVFS as of 2026-09-15 Touchscreen: ELAN2514:00, 04F3:43F0 (yours is 43F4) ACPI path \_SB.PC00.I2C4.TPL1 on I2C #4, PCI 00:19.0 (8086 Core Ultra 200V I2C #4), i2c_designware.2, IRQ 20 Ubuntu 26.10 development branch, kernels 7.0.0-30 and 7.2.0-5 both affected; first seen 2026-08-09. Symptoms match your report exactly. At probe: i2c_hid_acpi i2c-ELAN2514:00: i2c_hid_get_input: IRQ triggered but there's no data and then IRQ 20 (the i2c-designware controller line, IR-IO-APIC level) never stops. Measured today by binding the driver by hand with my udev workaround disabled: - ~49,500 interrupts on IRQ 20 within 2 s of the bind - steady state ~21,500/s, all on one CPU - the irq/108-ELAN2514:00 thread sits in D state; on an earlier occurrence (2026-09-03) its kernel stack was inside i2c_dw_xfer and the log had repeated i2c_hid_get_input: incomplete report (67/65280) i.e. reads returning 0xff filler. - echo i2c-ELAN2514:00 > /sys/bus/i2c/drivers/i2c_hid_acpi/unbind drops IRQ 20 to 0/s immediately. The device's own interrupt is IRQ 108 (IR-IO-APIC, level). The touchpad (SYNA3503:00 on I2C #5 / i2c_designware.3) on the same platform is fine. DSDT details, consistent with your Interrupt()-vs-GpioInt() finding: TPL1 carries two resource buffers; SBFI is an Extended Interrupt descriptor with flags 0x05 (level, active-low, exclusive) and its vector is patched at _INI with INT2 = INUM(GPLI). _CRS returns the GpioInt() variant (G_IN(GPLI,...)) only when TPLM == 0; this firmware has TPLM != 0, so we get the APIC path. _HID is rewritten to "ELAN2514" at _INI when TPLT == 7. Storm frequency is intermittent on my box rather than every boot: some boots ran for days without it, others hit it at probe. When it happens it takes the desktop down (compositor waits on the stuck I2C bus), so I'm running the same unbind-at-probe udev rule you described: ACTION=="add|bind", SUBSYSTEM=="i2c", KERNEL=="i2c-ELAN2514:00", \ RUN+="/bin/sh -c 'echo i2c-ELAN2514:00 > /sys/bus/i2c/drivers/i2c_hid_acpi/unbind'" Interesting aside: when hid-multitouch binds it registers the usual touchscreen/stylus nodes plus five "UNKNOWN" input nodes and a "Keyboard" node, same odd set you saw. When it probed via hid-generic on one boot the primary node was reported as "I2C HID v1.00 Keyboard". I can provide the decompiled DSDT, an acpidump, dmesg with i2c-designware/i2c-hid dynamic debug, or test a quirk against 04F3:43F0 on request. Strider Jones ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-09-16 7:00 UTC | newest] Thread overview: 3+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-05-17 4:33 i2c_hid_acpi: ELAN2514 touchscreen causes IRQ flood on HP Omnibook X 14 (Lunar Lake) Dennis Foster 2026-05-17 23:49 ` Dennis Foster 2026-09-16 7:00 ` i2c_hid_acpi: " Strider Jones
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox