On i.MX6 GPIOx_PSR does not reflect the current output value if the
direction is set to output. Instead we should read GPIOx_DR.

Signed-off-by: Klaus Goger <[email protected]>
---
 drivers/gpio/mxc_gpio.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/drivers/gpio/mxc_gpio.c b/drivers/gpio/mxc_gpio.c
index 6a572d5..5838fc2 100644
--- a/drivers/gpio/mxc_gpio.c
+++ b/drivers/gpio/mxc_gpio.c
@@ -101,8 +101,16 @@ int gpio_get_value(unsigned gpio)
        gpio &= 0x1f;
 
        regs = (struct gpio_regs *)gpio_ports[port];
-
+#if defined(CONFIG_MX6)
+       /* if the direction is set to output we will always read 0 as pad 
status.
+        * so we have to read the data register to get the current output state 
*/
+       if (readl(&regs->gpio_dir) >> gpio & 0x01)
+               val = (readl(&regs->gpio_dr) >> gpio & 0x01);
+       else
+               val = (readl(&regs->gpio_psr) >> gpio) & 0x01;
+#else
        val = (readl(&regs->gpio_psr) >> gpio) & 0x01;
+#endif
 
        return val;
 }
-- 
1.9.0

_______________________________________________
U-Boot mailing list
[email protected]
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to