On Sat, Sep 28, 2013 at 1:35 PM, Fabio Estevam <feste...@gmail.com> wrote:
> On Sat, Sep 28, 2013 at 10:12 AM, Eric Bénard <e...@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
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to