From: Stefano Babic <sbabic@denx.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH] mx6: gpio: read data register if direction is out
Date: Tue, 24 Jun 2014 15:07:59 +0200 [thread overview]
Message-ID: <53A9782F.1060903@denx.de> (raw)
In-Reply-To: <1403505324-32034-1-git-send-email-klaus.goger@theobroma-systems.com>
Hi Klaus,
On 23/06/2014 08:35, Klaus Goger wrote:
> 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.
>
This conflicts with commit :
commit 5dafa4543c399d329c7b01df1afa98437861cac0
Author: Beno?t Th?baudeau <benoit.thebaudeau@advansee.com>
Date: Mon Aug 20 10:55:41 2012 +0000
mxc: Make gpio_get_value() use PSR
> Signed-off-by: Klaus Goger <klaus.goger@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
According to the documentation, I disagree with you. What I read from
the MX6 manual is:
28.4.2.1 GPIO Read Mode
The programming sequence for reading input signals should be as follows:
1. Configure IOMUX to select GPIO mode (Via IOMUX Controller (IOMUXC) ).
2. Configure GPIO direction register to input (GPIO_GDIR[GDIR] set to 0b).
3. Read value from data register/pad status register.
What you are describing looks an issue in your pinmux configuration
because you do not set the SION bit, as requested to read back the value
of the GPIO from the Pad Register.
I assume that if you read the value from the DR register, you do not
read the current value of the pin, but simply you get what you have
programmed, that could be different if you have a conflict on the pin
itself.
Best regards,
Stefano Babic
--
=====================================================================
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de
=====================================================================
next prev parent reply other threads:[~2014-06-24 13:07 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-23 6:35 [U-Boot] [PATCH] mx6: gpio: read data register if direction is out Klaus Goger
2014-06-24 13:07 ` Stefano Babic [this message]
2014-06-24 13:13 ` Fabio Estevam
2014-06-24 14:17 ` Klaus Goger
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=53A9782F.1060903@denx.de \
--to=sbabic@denx.de \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox