[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(®s->gpio_psr) >> gpio) & 0x01;
> + direction = readl(®s->gpio_dir);
>
> - return val;
> + if ((direction >> gpio) & 0x01)
> + return (readl(®s->gpio_dr) >> gpio) & 0x01; /* output mode */
> + else
> + return (readl(®s->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