[U-Boot] [PATCH] mx6: gpio: read data register if direction is out
Klaus Goger
klaus.goger at theobroma-systems.com
Mon Jun 23 08:35:24 CEST 2014
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 <klaus.goger at theobroma-systems.com>
---
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(®s->gpio_dir) >> gpio & 0x01)
+ val = (readl(®s->gpio_dr) >> gpio & 0x01);
+ else
+ val = (readl(®s->gpio_psr) >> gpio) & 0x01;
+#else
val = (readl(®s->gpio_psr) >> gpio) & 0x01;
+#endif
return val;
}
--
1.9.0
More information about the U-Boot
mailing list