Re: [PATCH] i2c: acpi: Add ELAN0662 to i2c_acpi_force_100khz_device_ids

From: Yuqi Xu

Date: Sun Oct 04 2026 - 23:27:50 EST


Hi Andi, Mika,

Please don't apply this patch. I was wrong about the fix, and I'm
sorry for the time already spent on it.

I treated this as the same 100 kHz quirk as the other ELAN touchpads.
That was a mistake. On this machine, forcing ELAN0662 to 100 kHz does
not stop the touch jumps.

The firmware already asks for 400 kHz. \_SB.I2CA (_HID AMDI0010)
publishes the timings through _DSM. iasl marks the UUID unknown, and
I could not find a public AMD specification for it:

Method (_DSM, 4, Serialized)
{
If ((Arg0 == ToUUID ("d93e4d1c-58bb-493c-a06a-605a717f9e2e")))
{
Switch (ToInteger (Arg2))
{
Case (Zero)
{
Return (Buffer (One) { 0x03 })
}
Case (One)
{
Return (Buffer (0x04) { 0xE5, 0x00, 0x6A, 0x00 })
}
}
}
}

The same UUID is present on other Lenovo AMD platforms. AMD's
amdi2c.sys 1.2.0.126 reads function 1 as two little-endian words,
LCNT 0x00E5 (229) and HCNT 0x006A (106), and programs IC_SDA_HOLD
with 0x48. I could not find that layout written down anywhere else.

i2c-designware does not evaluate this _DSM. It derives HCNT/LCNT from
the 150 MHz input clock and leaves SDA hold at the reset value of 1.
The comment above i2c_acpi_force_100khz_device_ids already suspects
those default counters, and notes that Windows works at 400 kHz.
Forcing 100 kHz only avoids the bad fast-mode counters.

Programming the values from the _DSM changed the result:

100 kHz, SDA hold 45: touch jumps within about a minute
400 kHz, FS HCNT/LCNT 106/229, SDA hold 0x48:

i2c_designware AMDI0010:00: SDA Hold Time TX:RX = 72:1
i2c_designware AMDI0010:00: Fast Mode HCNT:LCNT = 106:229
i2c_designware AMDI0010:00: Bus speed: Fast Mode (400 kHz)

the same use no longer logged "Touch jump detected".

So this entry does not belong in
i2c_acpi_force_100khz_device_ids. The follow-up will be a separate
i2c-designware patch: in i2c_dw_acpi_configure(), when SSCN/FMCN are
absent, take fast-mode HCNT/LCNT from that _DSM and set SDA hold to
0x48, and leave the bus at the firmware speed. Please drop this one.

Thank you for the Ack, Mika, and sorry again.

Yuqi