From: Albert ARIBAUD <albert.u.boot@aribaud.net>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH RESEND] gpio: spear_gpio: Fix gpio_set_value() implementation
Date: Sat, 14 Sep 2013 11:10:38 +0200 [thread overview]
Message-ID: <20130914111038.45ac0047@lilith> (raw)
In-Reply-To: <1378448560.23408.2.camel@phoenix>
Hi Axel,
On Fri, 06 Sep 2013 14:22:40 +0800, Axel Lin <axel.lin@ingics.com>
wrote:
> 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.lin@ingics.com>
> Acked-by: Stefan Roese <sr@denx.de>
> Reviewed-by: Vipin Kumar <vipin.kumar@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;
> }
Despite discussions in the previous thread and the confirmations that
this code is functionally equivalent to the Linux code, I still believe
this code is incorrect for both writing and reading.
From the doc, writing to GPIODATA will obviously copy each of bits 7
to 0 of the written value into the actuals GPIO mapped to bits 7 to
0 of this register (assuming they are configured as outputs, of course).
Based on this, the code above:
- when setting a single GPIO, sets *but clears up to seven other GPIOs*;
- when clearing a single GPIO, clears it *and up to seven other GPIOs*.
This code may have been tested only for a single active GPIO at a time,
for which this code would behave correctly; but as soon as two GPIOs
from the same bank must be set at the same time, it fails.
Please fix this code so that setting or clearing a GPIO does not set or
clear any other GPIO, and perform an actual test to confirm this works
before submitting V2.
BTW: if (as the previous thread seemed to imply) no one around has the
hardware to test this change, then why exactly is it needed?
Amicalement,
--
Albert.
next prev parent reply other threads:[~2013-09-14 9:10 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-09-06 6:22 [U-Boot] [PATCH RESEND] gpio: spear_gpio: Fix gpio_set_value() implementation Axel Lin
2013-09-14 9:10 ` Albert ARIBAUD [this message]
2013-09-14 9:34 ` Michael Trimarchi
2013-09-14 9:34 ` Axel Lin
2013-09-14 9:38 ` Michael Trimarchi
2013-09-15 15:20 ` Albert ARIBAUD
2013-09-15 17:00 ` Michael Trimarchi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20130914111038.45ac0047@lilith \
--to=albert.u.boot@aribaud.net \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.