summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarek Vasut <marex@denx.de>2020-02-07 16:57:50 +0100
committerHeiko Schocher <hs@denx.de>2020-03-16 07:46:04 +0100
commit7231522a5ed1545d3206f5204676897d62a24f5f (patch)
treec1d050c01fe09c0f6ffa1cd8a70fc92f893ca9da
parent1f746a2c82b1b455f7f535412afffd7e4689913d (diff)
downloadu-boot-7231522a5ed1545d3206f5204676897d62a24f5f.tar.gz
u-boot-7231522a5ed1545d3206f5204676897d62a24f5f.tar.xz
u-boot-7231522a5ed1545d3206f5204676897d62a24f5f.zip
i2c: Export i2c_deblock_gpio_loop()
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>
-rw-r--r--drivers/i2c/i2c-uclass.c8
-rw-r--r--include/i2c.h16
2 files changed, 20 insertions, 4 deletions
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
@@ -331,6 +331,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
*
* Drivers should support these operations unless otherwise noted. These