In current gpio_set_value() implementation, it always sets the gpio control bit no matter the value argument is 0 or 1. Thus the GPIOs never set to low. This patch fixes this bug.
Signed-off-by: Axel Lin <axel....@ingics.com> Acked-by: Stefan Roese <s...@denx.de> Reviewed-by: Vipin Kumar <vipin.ku...@st.com> --- This patch was sent on http://lists.denx.de/pipermail/u-boot/2013-June/156861.html Has Stefan's Ack: http://lists.denx.de/pipermail/u-boot/2013-June/156864.html Vipin says the code is fine, so I add Vipin's review-by. http://lists.denx.de/pipermail/u-boot/2013-June/156966.html Michael confirms it works: http://lists.denx.de/pipermail/u-boot/2013-August/160652.html No body picks up this patch, so here is a resend. Although I think this is a bug fix, but I'll let maintainers to determinate if this is the material for v2013.10. Anyway, can someone at least let me know if this patch is ok for apply at some point? I have no idea who is maintaining this file. Regards, Axel drivers/gpio/spear_gpio.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/gpio/spear_gpio.c b/drivers/gpio/spear_gpio.c index 367b670..6fb4117 100644 --- a/drivers/gpio/spear_gpio.c +++ b/drivers/gpio/spear_gpio.c @@ -36,7 +36,10 @@ int gpio_set_value(unsigned gpio, int value) { struct gpio_regs *regs = (struct gpio_regs *)CONFIG_GPIO_BASE; - writel(1 << gpio, ®s->gpiodata[DATA_REG_ADDR(gpio)]); + if (value) + writel(1 << gpio, ®s->gpiodata[DATA_REG_ADDR(gpio)]); + else + writel(0, ®s->gpiodata[DATA_REG_ADDR(gpio)]); return 0; } -- 1.8.1.2 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot