[PATCH 0/1] Force I2C bus freq to 100KHz for ELAN06FA touchpad

Randolph Ha
2025-01-03T05:20:06Z

In my device (Lenovo V15 G4 IRU) it appears that, even with the latest
BIOS update, the ACPI tables do not specify that the ELAN06FA touchpad
only works properly at a 100KHz I2C frequency, with other frequencies
causing excessive smoothing to be applied intermittently. On some
busses (designware-i2c), the default frequency is 400KHz.

This smoothing causes the touchpad to be unusable under Linux, and the
support request I filed with Lenovo was ignored. After adding a device
ID check to force the frequency to 100KHz for this touchpad, the
excessive smoothing disappears. As a similar patch was previously
accepted for the Silead MSSL1680 touchscreen in [1], I hope this patch
can be added into the kernel as well.

Additional Notes:
1. I speculate that this issue was caused by the touchpad firmware
interpreting the higher clock frequency as noise, since the smoothing
effect is similar to that caused by using a noisy third-party charger.
2. Based on the coil whine emitted by my laptop, it appears as though
the driver is ran at 100KHz under Windows by default as well, so I
believe this is the fix, not a workaround.
3. This fix should also apply to the Lenovo V15 G4 AMN and the Ideapad
Slim 3 15IAH8, but I do not have the devices to confirm.

[1]: Commit 7574c0db2e68c ("i2c: acpi: Force bus speed to 400KHz if a
Silead touchscreen is present")

Randolph Ha (1):
Force ELAN06FA touchpad I2C bus freq to 100KHz

drivers/i2c/i2c-core-acpi.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)

--
2.47.1