diff mbox series

[2/4] i2c: Export i2c_deblock_gpio_loop()

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

Commit Message

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

Comments

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

Patch

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
  *