Message ID | 20200207155752.40930-2-marex@denx.de |
---|---|
State | Accepted |
Commit | 7231522a5ed1545d3206f5204676897d62a24f5f |
Headers | show |
Series | [1/4] i2c: Make deblock delay and SCL clock configurable | expand |
Hello Marek, Am 07.02.2020 um 16:57 schrieb Marek Vasut: > Export the i2c_deblock_gpio_loop() so it can be used in other places in > U-Boot. In particular, this is useful in the GPIO I2C driver, which claims > the SDA/SCL GPIOs and thus prevents the i2c_deblock() implementation from > claiming the pins as GPIOs again. > > Signed-off-by: Marek Vasut <marex at denx.de> > --- > drivers/i2c/i2c-uclass.c | 8 ++++---- > include/i2c.h | 16 ++++++++++++++++ > 2 files changed, 20 insertions(+), 4 deletions(-) Reviewed-by: Heiko Schocher <hs at denx.de> bye, Heiko
Hello Marek, Am 07.02.2020 um 16:57 schrieb Marek Vasut: > Export the i2c_deblock_gpio_loop() so it can be used in other places in > U-Boot. In particular, this is useful in the GPIO I2C driver, which claims > the SDA/SCL GPIOs and thus prevents the i2c_deblock() implementation from > claiming the pins as GPIOs again. > > Signed-off-by: Marek Vasut <marex at denx.de> > --- > drivers/i2c/i2c-uclass.c | 8 ++++---- > include/i2c.h | 16 ++++++++++++++++ > 2 files changed, 20 insertions(+), 4 deletions(-) Applied to u-boot-i2c next, thanks! bye, Heiko
diff --git a/drivers/i2c/i2c-uclass.c b/drivers/i2c/i2c-uclass.c index 25af1fabdb..86f529241f 100644 --- a/drivers/i2c/i2c-uclass.c +++ b/drivers/i2c/i2c-uclass.c @@ -501,10 +501,10 @@ static int i2c_gpio_get_pin(struct gpio_desc *pin) return dm_gpio_get_value(pin); } -static int i2c_deblock_gpio_loop(struct gpio_desc *sda_pin, - struct gpio_desc *scl_pin, - unsigned int scl_count, - unsigned int delay) +int i2c_deblock_gpio_loop(struct gpio_desc *sda_pin, + struct gpio_desc *scl_pin, + unsigned int scl_count, + unsigned int delay) { int ret = 0; diff --git a/include/i2c.h b/include/i2c.h index 0faf8542e2..7c92042c58 100644 --- a/include/i2c.h +++ b/include/i2c.h @@ -330,6 +330,22 @@ uint i2c_get_chip_addr_offset_mask(struct udevice *dev); */ int i2c_deblock(struct udevice *bus); +/** + * i2c_deblock_gpio_loop() - recover a bus from an unknown state by toggling SDA/SCL + * + * This is the inner logic used for toggling I2C SDA/SCL lines as GPIOs + * for deblocking the I2C bus. + * + * @sda_pin: SDA GPIO + * @scl_pin: SCL GPIO + * @scl_count: Number of SCL clock cycles generated to deblock SDA + * @delay: Delay between SCL clock line changes + * @return 0 if OK, -ve on error + */ +struct gpio_desc; +int i2c_deblock_gpio_loop(struct gpio_desc *sda_pin, struct gpio_desc *scl_pin, + unsigned int scl_count, unsigned int delay); + /** * struct dm_i2c_ops - driver operations for I2C uclass *
Export the i2c_deblock_gpio_loop() so it can be used in other places in U-Boot. In particular, this is useful in the GPIO I2C driver, which claims the SDA/SCL GPIOs and thus prevents the i2c_deblock() implementation from claiming the pins as GPIOs again. Signed-off-by: Marek Vasut <marex at denx.de> --- drivers/i2c/i2c-uclass.c | 8 ++++---- include/i2c.h | 16 ++++++++++++++++ 2 files changed, 20 insertions(+), 4 deletions(-)