diff mbox series

[1/4] i2c: Make deblock delay and SCL clock configurable

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

Commit Message

Marek Vasut Feb. 7, 2020, 3:57 p.m. UTC
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(-)

Comments

Heiko Schocher Feb. 18, 2020, 7:04 a.m. UTC | #1
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
Heiko Schocher March 17, 2020, 5:10 a.m. UTC | #2
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 mbox series

Patch

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) {