Message ID | 20200207155752.40930-1-marex@denx.de |
---|---|
State | Accepted |
Commit | 1f746a2c82b1b455f7f535412afffd7e4689913d |
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: > Make the delay between SCL line changes and the number of SCL clock > changes configurable as a parameter of the deblock function. No > functional change. > > Signed-off-by: Marek Vasut <marex at denx.de> > --- > drivers/i2c/i2c-uclass.c | 21 +++++++++++---------- > 1 file changed, 11 insertions(+), 10 deletions(-) Reviewed-by: Heiko Schocher <hs at denx.de> bye, Heiko
Hello Marek, Am 07.02.2020 um 16:57 schrieb Marek Vasut: > Make the delay between SCL line changes and the number of SCL clock > changes configurable as a parameter of the deblock function. No > functional change. > > Signed-off-by: Marek Vasut <marex at denx.de> > --- > drivers/i2c/i2c-uclass.c | 21 +++++++++++---------- > 1 file changed, 11 insertions(+), 10 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 2aa3efe8aa..25af1fabdb 100644 --- a/drivers/i2c/i2c-uclass.c +++ b/drivers/i2c/i2c-uclass.c @@ -502,34 +502,35 @@ static int i2c_gpio_get_pin(struct gpio_desc *pin) } static int i2c_deblock_gpio_loop(struct gpio_desc *sda_pin, - struct gpio_desc *scl_pin) + struct gpio_desc *scl_pin, + unsigned int scl_count, + unsigned int delay) { - int counter = 9; int ret = 0; i2c_gpio_set_pin(sda_pin, 1); i2c_gpio_set_pin(scl_pin, 1); - udelay(5); + udelay(delay); /* Toggle SCL until slave release SDA */ - while (counter-- >= 0) { + while (scl_count-- >= 0) { i2c_gpio_set_pin(scl_pin, 1); - udelay(5); + udelay(delay); i2c_gpio_set_pin(scl_pin, 0); - udelay(5); + udelay(delay); if (i2c_gpio_get_pin(sda_pin)) break; } /* Then, send I2C stop */ i2c_gpio_set_pin(sda_pin, 0); - udelay(5); + udelay(delay); i2c_gpio_set_pin(scl_pin, 1); - udelay(5); + udelay(delay); i2c_gpio_set_pin(sda_pin, 1); - udelay(5); + udelay(delay); if (!i2c_gpio_get_pin(sda_pin) || !i2c_gpio_get_pin(scl_pin)) ret = -EREMOTEIO; @@ -561,7 +562,7 @@ static int i2c_deblock_gpio(struct udevice *bus) goto out_no_pinctrl; } - ret0 = i2c_deblock_gpio_loop(&gpios[PIN_SDA], &gpios[PIN_SCL]); + ret0 = i2c_deblock_gpio_loop(&gpios[PIN_SDA], &gpios[PIN_SCL], 9, 5); ret = pinctrl_select_state(bus, "default"); if (ret) {
Make the delay between SCL line changes and the number of SCL clock changes configurable as a parameter of the deblock function. No functional change. Signed-off-by: Marek Vasut <marex at denx.de> --- drivers/i2c/i2c-uclass.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-)