
On Sat, Sep 28, 2013 at 10:12 AM, Eric Bénard eric@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 */ }