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(®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 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot