Skip to content
  • Codrin Ciubotariu's avatar
    i2c: core: add generic I2C GPIO recovery · 75820314
    Codrin Ciubotariu authored
    
    
    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: default avatarCodrin Ciubotariu <codrin.ciubotariu@microchip.com>
    [wsa: inverted one logic for better readability, minor update to kdoc]
    Signed-off-by: default avatarWolfram Sang <wsa@kernel.org>
    75820314