[PATCH v6 1/2] gpio: i2c-gpio: Drop use of dm_gpio_set_dir()

Harm Berntsen harm.berntsen at nedap.com
Mon Mar 22 11:32:54 CET 2021


Nice work, pactch works on my board!

Note that your commit message still mentions dm_gpio_set_dir_flags
instead of dm_gpio_clrset_flags

Tested-by: Harm Berntsen <harm.berntsen at nedap.com>
-----Original Message-----
From: Simon Glass <sjg at chromium.org>
To: U-Boot Mailing List <u-boot at lists.denx.de>
Cc: Tom Rini <trini at konsulko.com>, Patrick Delaunay
<patrick.delaunay at st.com>, Harm Berntsen <harm.berntsen at nedap.com>,
Simon Glass <sjg at chromium.org>, Heiko Schocher <hs at denx.de>
Subject: [PATCH v6 1/2] gpio: i2c-gpio: Drop use of dm_gpio_set_dir()
Date: Sun, 21 Mar 2021 17:29:31 +1300

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

Signed-off-by: Simon Glass <sjg at chromium.org>
---

Changes in v6:
- Use dm_gpio_clrset_flags() so that direction can be changed
- Simplify the code since masking is not needed

 drivers/i2c/i2c-gpio.c | 19 +++++++++----------
 1 file changed, 9 insertions(+), 10 deletions(-)

diff --git a/drivers/i2c/i2c-gpio.c b/drivers/i2c/i2c-gpio.c
index a301a4460b3..cf8f8f40359 100644
--- a/drivers/i2c/i2c-gpio.c
+++ b/drivers/i2c/i2c-gpio.c
@@ -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)
 {
        struct gpio_desc *sda = &bus->gpios[PIN_SDA];
+       ulong flags;
 
        if (bit)
-               sda->flags = (sda->flags & ~GPIOD_IS_OUT) |
GPIOD_IS_IN;
+               flags = GPIOD_IS_IN;
        else
-               sda->flags = (sda->flags & (~GPIOD_IS_IN &
~GPIOD_IS_OUT_ACTIVE)) | GPIOD_IS_OUT;
-       dm_gpio_set_dir(sda);
+               flags = GPIOD_IS_OUT;
+       dm_gpio_clrset_flags(sda, GPIOD_MASK_DIR, flags);
 }
 
 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;
 
        if (bit) {
-               scl->flags = (scl->flags & ~GPIOD_IS_OUT) |
GPIOD_IS_IN;
-               dm_gpio_set_dir(scl);
+               dm_gpio_clrset_flags(scl, GPIOD_MASK_DIR, GPIOD_IS_IN);
                while (!dm_gpio_get_value(scl) && count++ < 100000)
                        udelay(1);
 
                if (!dm_gpio_get_value(scl))
                        pr_err("timeout waiting on slave to release
scl\n");
        } else {
-               scl->flags = (scl->flags & (~GPIOD_IS_IN &
~GPIOD_IS_OUT_ACTIVE)) | GPIOD_IS_OUT;
-               dm_gpio_set_dir(scl);
+               dm_gpio_clrset_flags(scl, GPIOD_MASK_DIR,
GPIOD_IS_OUT);
        }
 }
 
@@ -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)
 {
        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)
-               scl->flags |= GPIOD_IS_OUT_ACTIVE;
-       dm_gpio_set_dir(scl);
+               flags |= GPIOD_IS_OUT_ACTIVE;
+       dm_gpio_clrset_flags(scl, GPIOD_MASK_DIR, flags);
 }
 
 static void i2c_gpio_write_bit(struct i2c_gpio_bus *bus, int delay,
uchar bit)



More information about the U-Boot mailing list