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

Otavio Salvador otavio at ossystems.com.br
Sat Sep 28 21:05:44 CEST 2013


On Sat, Sep 28, 2013 at 1:35 PM, Fabio Estevam <festevam at gmail.com> wrote:
> 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 */
>  }

This did the trick!

I dropped this patch.

-- 
Otavio Salvador                             O.S. Systems
http://www.ossystems.com.br        http://code.ossystems.com.br
Mobile: +55 (53) 9981-7854            Mobile: +1 (347) 903-9750


More information about the U-Boot mailing list