]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
gpio: sandbox: Make sandbox_gpio_set_flags() set all flags
authorSimon Glass <sjg@chromium.org>
Fri, 5 Feb 2021 04:22:02 +0000 (21:22 -0700)
committerTom Rini <trini@konsulko.com>
Wed, 3 Mar 2021 20:38:58 +0000 (15:38 -0500)
Allow this function to see all flags, including the internal sandbox ones.
This allows the tests to fully control the behaviour of the driver.

To make this work, move the setting of GPIOD_EXT_HIGH -to where the flags
are updated via driver model, rather than the sandbox 'back door'.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Patrick Delaunay <patrick.delaunay@foss.st.com>
drivers/gpio/sandbox.c

index 912c333e560c1b85719db0d051e3280c1b588707..d1e561ab5e6878c6bc82f03fc58c19fa971f5223 100644 (file)
@@ -114,13 +114,7 @@ int sandbox_gpio_set_flags(struct udevice *dev, uint offset, ulong flags)
 {
        struct gpio_state *state = get_gpio_state(dev, offset);
 
-       /*
-        * We don't need to clear GPIOD_EXT_HIGH here to make the tests pass,
-        * but this is handled in a future patch.
-        */
-       if (flags & GPIOD_IS_OUT_ACTIVE)
-               flags |= GPIOD_EXT_HIGH;
-       state->flags = (state->flags & GPIOD_SANDBOX_MASK) | flags;
+       state->flags = flags;
 
        return 0;
 }
@@ -221,14 +215,23 @@ static int sb_gpio_set_flags(struct udevice *dev, unsigned int offset,
                             ulong flags)
 {
        debug("%s: offset:%u, flags = %lx\n", __func__, offset, flags);
+       struct gpio_state *state = get_gpio_state(dev, offset);
 
-       return sandbox_gpio_set_flags(dev, offset, flags);
+       if (flags & GPIOD_IS_OUT) {
+               if (flags & GPIOD_IS_OUT_ACTIVE)
+                       flags |= GPIOD_EXT_HIGH;
+               else
+                       flags &= ~GPIOD_EXT_HIGH;
+       }
+       state->flags = flags;
+
+       return 0;
 }
 
 static int sb_gpio_get_flags(struct udevice *dev, uint offset, ulong *flagsp)
 {
        debug("%s: offset:%u\n", __func__, offset);
-       *flagsp = *get_gpio_flags(dev, offset);
+       *flagsp = *get_gpio_flags(dev, offset) & ~GPIOD_SANDBOX_MASK;
 
        return 0;
 }