[U-Boot] [PATCH 5/7] gpio-led: Fix __led_toggle support to first set GPIO as input
Fabio Estevam
festevam at gmail.com
Sat Sep 28 18:35:24 CEST 2013
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 */
}
More information about the U-Boot
mailing list