Hi
On 11/13/19 8:29 PM, Hans de Goede wrote:
Many cheap devices use Silead touchscreen controllers. Testing has shown
repeatedly that these touchscreen controllers work fine at 400KHz, but for
unknown reasons do not work properly at 100KHz. This has been seen on
both ARM and x86 devices using totally different i2c controllers.
On some devices the ACPI tables list another device at the same I2C-bus
as only being capable of 100KHz, testing has shown that these other
devices work fine at 400KHz (as can be expected of any recent I2C hw).
This commit makes i2c_acpi_find_bus_speed() always return 400KHz if a
Silead touchscreen controller is present, fixing the touchscreen not
working on devices which ACPI tables' wrongly list another device on the
same bus as only being capable of 100KHz.
Specifically this fixes the touchscreen on the Jumper EZpad 6 m4 not
working.
Reported-and-tested-by: youling 257 <youling257@xxxxxxxxx>
Signed-off-by: Hans de Goede <hdegoede@xxxxxxxxxx>
---
Changes in v2:
-Print a warning when we are forcing the bus to another speed then the
lowest speed of all devices the DSTD lists on the bus
---
drivers/i2c/i2c-core-acpi.c | 28 +++++++++++++++++++++++++++-
1 file changed, 27 insertions(+), 1 deletion(-)
I think this is the only sane way to go forward, i.e. kernel figures it
out not the user needing to have a custom DSDT.
Of course there is a small risk some device on the same bus cease
working but benefit of this patch is worth of it. Otherwise these
touchscreen devices keep not working and getting possible regression
increases also knowledge.
Reviewed-by: Jarkko Nikula <jarkko.nikula@xxxxxxxxxxxxxxx>