
28 Sep
2013
28 Sep
'13
9:05 p.m.
On Sat, Sep 28, 2013 at 1:35 PM, Fabio Estevam festevam@gmail.com wrote:
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 */
}
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