[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(&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



More information about the U-Boot mailing list