[U-Boot] [PATCH 5/7] gpio-led: Fix __led_toggle support to first set GPIO as input

Fabio Estevam festevam at gmail.com
Sat Sep 28 18:35:24 CEST 2013


On Sat, Sep 28, 2013 at 10:12 AM, Eric Bénard <eric at eukrea.com> wrote:

> Maybe the real fix would be to check why gpio_get_value doesn't return
> the level of the gpio when it's configured as an output.

I agree with Eric.

Could you please test the patch below?

--- a/drivers/gpio/mxc_gpio.c
+++ b/drivers/gpio/mxc_gpio.c
@@ -93,7 +93,7 @@ int gpio_get_value(unsigned gpio)
 {
        unsigned int port = GPIO_TO_PORT(gpio);
        struct gpio_regs *regs;
-       u32 val;
+       u32 direction;

        if (port >= ARRAY_SIZE(gpio_ports))
                return -1;
@@ -102,9 +102,12 @@ int gpio_get_value(unsigned gpio)

        regs = (struct gpio_regs *)gpio_ports[port];

-       val = (readl(&regs->gpio_psr) >> gpio) & 0x01;
+       direction = readl(&regs->gpio_dir);

-       return val;
+       if ((direction >> gpio) & 0x01)
+               return (readl(&regs->gpio_dr) >> gpio) & 0x01; /* output mode */
+       else
+               return (readl(&regs->gpio_psr) >> gpio) & 0x01; /* input mode */
 }


More information about the U-Boot mailing list