gpio: i2c-gpio: Drop use of dm_gpio_set_dir()

This is the only driver that uses this function. Update it to use the
alternative which is dm_gpio_clrset_flags().

Signed-off-by: Simon Glass <sjg@chromium.org>
Tested-by: Harm Berntsen <harm.berntsen@nedap.com>
This commit is contained in:
Simon Glass 2021-03-23 14:52:06 +13:00 committed by Tom Rini
parent 0219279381
commit a12aa7995f
1 changed files with 9 additions and 10 deletions

View File

@ -48,12 +48,13 @@ static int i2c_gpio_sda_get(struct i2c_gpio_bus *bus)
static void i2c_gpio_sda_set(struct i2c_gpio_bus *bus, int bit) static void i2c_gpio_sda_set(struct i2c_gpio_bus *bus, int bit)
{ {
struct gpio_desc *sda = &bus->gpios[PIN_SDA]; struct gpio_desc *sda = &bus->gpios[PIN_SDA];
ulong flags;
if (bit) if (bit)
sda->flags = (sda->flags & ~GPIOD_IS_OUT) | GPIOD_IS_IN; flags = GPIOD_IS_IN;
else else
sda->flags = (sda->flags & (~GPIOD_IS_IN & ~GPIOD_IS_OUT_ACTIVE)) | GPIOD_IS_OUT; flags = GPIOD_IS_OUT;
dm_gpio_set_dir(sda); dm_gpio_clrset_flags(sda, GPIOD_MASK_DIR, flags);
} }
static void i2c_gpio_scl_set(struct i2c_gpio_bus *bus, int bit) static void i2c_gpio_scl_set(struct i2c_gpio_bus *bus, int bit)
@ -62,16 +63,14 @@ static void i2c_gpio_scl_set(struct i2c_gpio_bus *bus, int bit)
int count = 0; int count = 0;
if (bit) { if (bit) {
scl->flags = (scl->flags & ~GPIOD_IS_OUT) | GPIOD_IS_IN; dm_gpio_clrset_flags(scl, GPIOD_MASK_DIR, GPIOD_IS_IN);
dm_gpio_set_dir(scl);
while (!dm_gpio_get_value(scl) && count++ < 100000) while (!dm_gpio_get_value(scl) && count++ < 100000)
udelay(1); udelay(1);
if (!dm_gpio_get_value(scl)) if (!dm_gpio_get_value(scl))
pr_err("timeout waiting on slave to release scl\n"); pr_err("timeout waiting on slave to release scl\n");
} else { } else {
scl->flags = (scl->flags & (~GPIOD_IS_IN & ~GPIOD_IS_OUT_ACTIVE)) | GPIOD_IS_OUT; dm_gpio_clrset_flags(scl, GPIOD_MASK_DIR, GPIOD_IS_OUT);
dm_gpio_set_dir(scl);
} }
} }
@ -79,11 +78,11 @@ static void i2c_gpio_scl_set(struct i2c_gpio_bus *bus, int bit)
static void i2c_gpio_scl_set_output_only(struct i2c_gpio_bus *bus, int bit) static void i2c_gpio_scl_set_output_only(struct i2c_gpio_bus *bus, int bit)
{ {
struct gpio_desc *scl = &bus->gpios[PIN_SCL]; struct gpio_desc *scl = &bus->gpios[PIN_SCL];
scl->flags = (scl->flags & (~GPIOD_IS_IN & ~GPIOD_IS_OUT_ACTIVE)) | GPIOD_IS_OUT; ulong flags = GPIOD_IS_OUT;
if (bit) if (bit)
scl->flags |= GPIOD_IS_OUT_ACTIVE; flags |= GPIOD_IS_OUT_ACTIVE;
dm_gpio_set_dir(scl); dm_gpio_clrset_flags(scl, GPIOD_MASK_DIR, flags);
} }
static void i2c_gpio_write_bit(struct i2c_gpio_bus *bus, int delay, uchar bit) static void i2c_gpio_write_bit(struct i2c_gpio_bus *bus, int delay, uchar bit)