i2c: core: add generic I2C GPIO recovery
authorCodrin Ciubotariu <codrin.ciubotariu@microchip.com>
Tue, 4 Aug 2020 09:59:24 +0000 (12:59 +0300)
committerWolfram Sang <wsa@kernel.org>
Wed, 5 Aug 2020 09:52:27 +0000 (11:52 +0200)
commit75820314de26b00aaea0d0e79269c0d17914c5c4
tree95465e05785b86ace95b5dc94cec2c43ee92db24
parentdb36e827d8762eaa6aacd2c918a55ac487aa2501
i2c: core: add generic I2C GPIO recovery

Multiple I2C bus drivers use similar bindings to obtain information needed
for I2C recovery. For example, for platforms using device-tree, the
properties look something like this:

&i2c {
...
pinctrl-names = "default", "gpio";
pinctrl-0 = <&pinctrl_i2c_default>;
pinctrl-1 = <&pinctrl_i2c_gpio>;
sda-gpios = <&pio 0 GPIO_ACTIVE_HIGH>;
scl-gpios = <&pio 1 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
...
}

For this reason, we can add this common initialization in the core. This
way, other I2C bus drivers will be able to support GPIO recovery just by
providing a pointer to platform's pinctrl and calling i2c_recover_bus()
when SDA is stuck low.

Signed-off-by: Codrin Ciubotariu <codrin.ciubotariu@microchip.com>
[wsa: inverted one logic for better readability, minor update to kdoc]
Signed-off-by: Wolfram Sang <wsa@kernel.org>
drivers/i2c/i2c-core-base.c
include/linux/i2c.h