i2c: Export i2c_deblock_gpio_loop()
authorMarek Vasut <marex@denx.de>
Fri, 7 Feb 2020 15:57:50 +0000 (16:57 +0100)
committerHeiko Schocher <hs@denx.de>
Mon, 16 Mar 2020 06:46:04 +0000 (07:46 +0100)
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@denx.de>
Reviewed-by: Heiko Schocher <hs@denx.de>
drivers/i2c/i2c-uclass.c
include/i2c.h

index 25af1fabdbcbed8d422fd5aa1886bdd5e39dd84e..86f529241f4a89d03125a3754ad9e480bf7a9adf 100644 (file)
@@ -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;
 
index 0faf8542e283ac97007adeb6566d12dd5f8c8399..7c92042c5840fca5f67a7607aefdfbc74057dc71 100644 (file)
@@ -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
  *