linux/drivers/i2c
Hans de Goede 3a4991a986 i2c: acpi: Do not create i2c-clients for LNXVIDEO ACPI devices
ACPI video devices get tagged by the kernel with the custom LNXVIDEO
HID so that normal pnp-id matching can be used and are handled by the
acpi-video driver.

Sometimes the ACPI nodes describing these contain a SERIAL_TYPE_I2C ACPI
resource. Before this commit the presence of this resource would cause the
i2c-core to create a /sys/bus/i2c/devices/i2c-LNXVIDEO:00 device for this
with a modalias of: "i2c:LNXVIDEO:00".

There is no i2c driver for this custom HID, the acpi-video driver binds
directly to the ACPI device /sys/bus/acpi/devices/LNXVIDEO\:00 which has
a modalias of "acpi:LNXVIDEO:" .

Not only is the creation of an i2c-client for this undesirable, it is
actually causing problems. This weird pseudo-resource claims an i2c
speed of 100KHz and typically points to the i2c bus which is used by the
touchscreen controller. Some touchscreen controllers only work properly at
400KHz, at 100KHz they cause errors like these:

i2c_designware 80860F41:03: i2c_dw_handle_tx_abort: lost arbitration
i2c_designware 80860F41:03: i2c_dw_handle_tx_abort: lost arbitration
i2c_designware 80860F41:03: i2c_dw_handle_tx_abort: lost arbitration
i2c_designware 80860F41:03: i2c_dw_handle_tx_abort: lost arbitration
silead_ts i2c-MSSL1680:00: Registers clear error -11

This commit makes the i2c-core ignore LNXVIDEO compatible ACPI devices
which has 2 positive results:

1) The bogus i2c-client for these is no longer created.
2) i2c_acpi_lookup_speed now ignores the 100KHz speed from the pseudo
i2c-resouce and properly returns 400KHz as speed for the touchscreen
i2c bus, fixing the touchscreen not working on various devies.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
2017-07-04 15:57:34 +02:00
..
algos i2c: algo-bit: add support for I2C_M_STOP 2017-06-23 20:45:43 +02:00
busses i2c: designware: enable SLAVE in platform module 2017-06-27 23:37:07 +02:00
muxes i2c: mux: reg: rename label to indicate what it does 2017-05-15 18:49:10 +02:00
i2c-boardinfo.c i2c: allow attaching IRQ resources to i2c_board_info 2017-04-01 09:36:19 -07:00
i2c-core-acpi.c i2c: acpi: Do not create i2c-clients for LNXVIDEO ACPI devices 2017-07-04 15:57:34 +02:00
i2c-core-base.c i2c: reformat core-base file header 2017-05-31 21:01:06 +02:00
i2c-core-of.c i2c: break out OF support into separate file 2017-05-31 21:01:04 +02:00
i2c-core-slave.c i2c: break out slave support into separate file 2017-05-31 21:01:03 +02:00
i2c-core-smbus.c i2c: break out smbus support into separate file 2017-05-31 21:01:03 +02:00
i2c-core.h i2c: break out ACPI support into separate file 2017-05-31 21:01:04 +02:00
i2c-dev.c i2c: fix kernel memory disclosure in dev interface 2017-01-12 20:06:10 +01:00
i2c-mux.c i2c: mux: only print failure message on error 2017-05-15 18:49:11 +02:00
i2c-slave-eeprom.c i2c: Drop owner assignment from i2c_driver 2015-08-10 08:37:35 +02:00
i2c-smbus.c i2c: use an IRQ to report Host Notify events, not alert 2016-11-24 16:22:06 +01:00
i2c-stub.c i2c: stub: fix build warning regression 2017-06-15 23:22:11 +02:00
Kconfig Merge branch 'i2c/for-4.10' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux 2016-12-15 12:56:35 -08:00
Makefile i2c: break out ACPI support into separate file 2017-05-31 21:01:04 +02:00