From: "Andreas Bießmann" <andreas.devel@googlemail.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [RFC PATCH 1/3] at91: add new gpio pin macros
Date: Wed, 30 Oct 2013 11:39:42 +0100 [thread overview]
Message-ID: <5270E1EE.1050503@gmail.com> (raw)
In-Reply-To: <5270D7D4.1060205@atmel.com>
Hi Bo,
+Jens, he did the rewrite of the at91 gpio driver.
On 10/30/2013 10:56 AM, Bo Shen wrote:
> On 10/29/2013 20:53, Andreas Bie?mann wrote:
>> Signed-off-by: Andreas Bie?mann <andreas.devel@googlemail.com>
>> ---
>> arch/arm/include/asm/arch-at91/gpio.h | 34
>> ++++++++++++++++++++++++++++-----
>> 1 file changed, 29 insertions(+), 5 deletions(-)
>>
>> diff --git a/arch/arm/include/asm/arch-at91/gpio.h
>> b/arch/arm/include/asm/arch-at91/gpio.h
>> index 0700427..f9ca11e 100644
>> --- a/arch/arm/include/asm/arch-at91/gpio.h
>> +++ b/arch/arm/include/asm/arch-at91/gpio.h
>> @@ -227,8 +227,32 @@ static inline unsigned pin_to_mask(unsigned pin)
>> at91_set_pio_value((x - PIN_BASE) / 32,(x % 32), y)
>> #define at91_get_gpio_value(x) \
>> at91_get_pio_value((x - PIN_BASE) / 32,(x % 32))
>> -#else
>> -#define at91_set_gpio_value(x, y) at91_set_pio_value(x, y)
>> -#define at91_get_gpio_value(x) at91_get_pio_value(x)
>> -#endif
>> -#endif
>> +#else /* CONFIG_ATMEL_LEGACY */
>> +
>> +#define GPIO_PIOA_BASE (0)
>> +#define GPIO_PIOB_BASE (GPIO_PIOA_BASE + 32)
>> +#define GPIO_PIOC_BASE (GPIO_PIOB_BASE + 32)
>> +#define GPIO_PIOD_BASE (GPIO_PIOC_BASE + 32)
>> +#define GPIO_PIOE_BASE (GPIO_PIOD_BASE + 32)
>> +#define GPIO_PIN_PA(x) (GPIO_PIOA_BASE + (x))
>> +#define GPIO_PIN_PB(x) (GPIO_PIOB_BASE + (x))
>> +#define GPIO_PIN_PC(x) (GPIO_PIOC_BASE + (x))
>> +#define GPIO_PIN_PD(x) (GPIO_PIOD_BASE + (x))
>> +#define GPIO_PIN_PE(x) (GPIO_PIOE_BASE + (x))
>> +
>> +#define at91_gpio_to_port(gpio) (gpio / 32)
>> +#define at91_gpio_to_pin(gpio) (gpio % 32)
>
> This is an exception for at91sam9x5 and at91sam9n12 SoCs, which PIOB and
> PIOD are not 32 pins. PIOB only has 19 pins, while PIOD only has 22 pins.
I think this is a job for gpio_is_valid() then. How is this case handled
in kernel?
Here are a few things to discuss. First of all I'd like to get some
insights why the at91 gpio API was changed back in 2010. It was a plain
number before and was changed to PORT + PIN as two separate parameters.
Jens, could you please shed some light on this?
The second thing is this specific RFC implementation. It contains again
different points.
a) it defines another way to get a plain number for a GPIO
(GPIO_PIN_Px())
I know that the kernel uses AT91_PIN_Pxy notation for defining a GPIO
number. The above approach is copied from AVR32 which I think is a bit
better cause of smaller include file. This change however should be
discussed here.
b) the fact that we shift back to a plain number for defining a GPIO
I'd like to have a plain number defining a GPIO (which doesn't need to
correlate to a number in SoC spec's). It is just a plain number for
feeding generic gpio API. Which I'd like to use in the drivers to be
able to share with AVR32 or other generic stuff like status led API.
Currently some drivers do not define the CONFIG_ATMEL_LEGACY (to hide
the old defines) but use the PORT + PIN pair for example in pm9g45:
#define CONFIG_RED_LED AT91_PIO_PORTD, 31
and this is ugly!
Just to mention, I'd like to hide the current API of PORT + PIN as
separate parameters but not delete it. It is Ok in at91 specific
surrounding but where we share code with others we need to use that
single number that represents a GPIO. Especially is it misleading
approach in board headers to define the PORT + PIN tuple as an single
parameter to be placed in by preprocessor.
Any comments?
Best regards
Andreas Bie?mann
next prev parent reply other threads:[~2013-10-30 10:39 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-29 12:53 [U-Boot] [RFC PATCH 0/3] at91: remove legacy gpio API Andreas Bießmann
2013-10-29 12:53 ` [U-Boot] [RFC PATCH 1/3] at91: add new gpio pin macros Andreas Bießmann
2013-10-30 9:56 ` Bo Shen
2013-10-30 10:39 ` Andreas Bießmann [this message]
2013-10-30 17:19 ` Jens Scharsig
2013-10-30 18:59 ` Andreas Bießmann
2013-10-31 5:04 ` Heiko Schocher
2013-10-29 12:53 ` [U-Boot] [RFC PATCH 2/3] at91sam9263ek: remove ATMEL_LEGACY Andreas Bießmann
2013-10-29 12:53 ` [U-Boot] [RFC PATCH 3/3] at91: use generic gpio API for AT91_LED Andreas Bießmann
2013-11-29 11:13 ` [U-Boot] [PATCH 0/4] at91: remove legacy GPIO API (part 1) Andreas Bießmann
2013-11-29 11:13 ` [U-Boot] [PATCH 1/4] at91: add new gpio pin definitions Andreas Bießmann
2013-12-02 5:27 ` Bo Shen
2013-12-09 12:35 ` [U-Boot] [U-Boot,1/4] " Andreas Bießmann
2013-11-29 11:13 ` [U-Boot] [PATCH 2/4] at91: redefine legacy GPIO PIN_BASE Andreas Bießmann
2013-12-09 12:36 ` [U-Boot] [U-Boot,2/4] " Andreas Bießmann
2013-11-29 11:13 ` [U-Boot] [PATCH 3/4] at91: nand: switch atmel_nand to generic GPIO API Andreas Bießmann
2013-12-02 7:01 ` esw at bus-elektronik.de
2013-12-06 19:16 ` Scott Wood
2013-12-09 12:38 ` [U-Boot] [U-Boot,3/4] " Andreas Bießmann
2013-11-29 11:13 ` [U-Boot] [PATCH 4/4] at91: switch coloured LED to gpio API Andreas Bießmann
2013-12-09 12:38 ` [U-Boot] [U-Boot,4/4] " Andreas Bießmann
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=5270E1EE.1050503@gmail.com \
--to=andreas.devel@googlemail.com \
--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