On Sat, Sep 28, 2013 at 1:35 PM, Fabio Estevam <[email protected]> wrote: > On Sat, Sep 28, 2013 at 10:12 AM, Eric Bénard <[email protected]> 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 [email protected] http://lists.denx.de/mailman/listinfo/u-boot

