diff options
| author | Reinhard Meyer <u-boot@emk-elektronik.de> | 2010-11-03 15:47:20 +0100 | 
|---|---|---|
| committer | Albert ARIBAUD <albert.u.boot@aribaud.net> | 2011-05-18 07:56:51 +0200 | 
| commit | 372f2783a7b111f567ca541194bc7a75a3d5d64a (patch) | |
| tree | fba8b955db18ef99b22427e8a27a3647907c444c /drivers/gpio/at91_gpio.c | |
| parent | 9f3fe90f094d4ad6309b5222196d0f8c783784b0 (diff) | |
| download | olio-uboot-2014.01-372f2783a7b111f567ca541194bc7a75a3d5d64a.tar.xz olio-uboot-2014.01-372f2783a7b111f567ca541194bc7a75a3d5d64a.zip | |
AT91: fix related at91 driver files
Signed-off-by: Reinhard Meyer <u-boot@emk-elektronik.de>
Diffstat (limited to 'drivers/gpio/at91_gpio.c')
| -rw-r--r-- | drivers/gpio/at91_gpio.c | 52 | 
1 files changed, 31 insertions, 21 deletions
| diff --git a/drivers/gpio/at91_gpio.c b/drivers/gpio/at91_gpio.c index c0a97bc5d..163168718 100644 --- a/drivers/gpio/at91_gpio.c +++ b/drivers/gpio/at91_gpio.c @@ -24,6 +24,16 @@   * MA 02111-1307 USA   */ +/* + * WARNING: + * + * As the code is right now, it expects all PIO ports A,B,C,... + * to be evenly spaced in the memory map: + * ATMEL_BASE_PIOA + port * sizeof at91pio_t + * This might not necessaryly be true in future Atmel SoCs. + * This code should be fixed to use a pointer array to the ports. + */ +  #include <config.h>  #include <common.h>  #include <asm/sizes.h> @@ -33,10 +43,10 @@  int at91_set_pio_pullup(unsigned port, unsigned pin, int use_pullup)  { -	at91_pio_t	*pio 	= (at91_pio_t *) AT91_PIO_BASE; +	at91_pio_t	*pio = (at91_pio_t *) ATMEL_BASE_PIOA;  	u32		mask; -	if ((port < AT91_PIO_PORTS) && (pin < 32)) { +	if ((port < ATMEL_PIO_PORTS) && (pin < 32)) {  		mask = 1 << pin;  		if (use_pullup)  			writel(1 << pin, &pio->port[port].puer); @@ -52,10 +62,10 @@ int at91_set_pio_pullup(unsigned port, unsigned pin, int use_pullup)   */  int at91_set_pio_periph(unsigned port, unsigned pin, int use_pullup)  { -	at91_pio_t	*pio 	= (at91_pio_t *) AT91_PIO_BASE; +	at91_pio_t	*pio = (at91_pio_t *) ATMEL_BASE_PIOA;  	u32		mask; -	if ((port < AT91_PIO_PORTS) && (pin < 32)) { +	if ((port < ATMEL_PIO_PORTS) && (pin < 32)) {  		mask = 1 << pin;  		writel(mask, &pio->port[port].idr);  		at91_set_pio_pullup(port, pin, use_pullup); @@ -69,10 +79,10 @@ int at91_set_pio_periph(unsigned port, unsigned pin, int use_pullup)   */  int at91_set_a_periph(unsigned port, unsigned pin, int use_pullup)  { -	at91_pio_t	*pio 	= (at91_pio_t *) AT91_PIO_BASE; +	at91_pio_t	*pio = (at91_pio_t *) ATMEL_BASE_PIOA;  	u32		mask; -	if ((port < AT91_PIO_PORTS) && (pin < 32)) { +	if ((port < ATMEL_PIO_PORTS) && (pin < 32)) {  		mask = 1 << pin;  		writel(mask, &pio->port[port].idr);  		at91_set_pio_pullup(port, pin, use_pullup); @@ -87,10 +97,10 @@ int at91_set_a_periph(unsigned port, unsigned pin, int use_pullup)   */  int at91_set_b_periph(unsigned port, unsigned pin, int use_pullup)  { -	at91_pio_t	*pio 	= (at91_pio_t *) AT91_PIO_BASE; +	at91_pio_t	*pio = (at91_pio_t *) ATMEL_BASE_PIOA;  	u32		mask; -	if ((port < AT91_PIO_PORTS) && (pin < 32)) { +	if ((port < ATMEL_PIO_PORTS) && (pin < 32)) {  		mask = 1 << pin;  		writel(mask, &pio->port[port].idr);  		at91_set_pio_pullup(port, pin, use_pullup); @@ -106,10 +116,10 @@ int at91_set_b_periph(unsigned port, unsigned pin, int use_pullup)   */  int at91_set_pio_input(unsigned port, u32 pin, int use_pullup)  { -	at91_pio_t	*pio 	= (at91_pio_t *) AT91_PIO_BASE; +	at91_pio_t	*pio = (at91_pio_t *) ATMEL_BASE_PIOA;  	u32		mask; -	if ((port < AT91_PIO_PORTS) && (pin < 32)) { +	if ((port < ATMEL_PIO_PORTS) && (pin < 32)) {  		mask = 1 << pin;  		writel(mask, &pio->port[port].idr);  		at91_set_pio_pullup(port, pin, use_pullup); @@ -125,10 +135,10 @@ int at91_set_pio_input(unsigned port, u32 pin, int use_pullup)   */  int at91_set_pio_output(unsigned port, u32 pin, int value)  { -	at91_pio_t	*pio 	= (at91_pio_t *) AT91_PIO_BASE; +	at91_pio_t	*pio = (at91_pio_t *) ATMEL_BASE_PIOA;  	u32		mask; -	if ((port < AT91_PIO_PORTS) && (pin < 32)) { +	if ((port < ATMEL_PIO_PORTS) && (pin < 32)) {  		mask = 1 << pin;  		writel(mask, &pio->port[port].idr);  		writel(mask, &pio->port[port].pudr); @@ -147,10 +157,10 @@ int at91_set_pio_output(unsigned port, u32 pin, int value)   */  int at91_set_pio_deglitch(unsigned port, unsigned pin, int is_on)  { -	at91_pio_t	*pio 	= (at91_pio_t *) AT91_PIO_BASE; +	at91_pio_t	*pio = (at91_pio_t *) ATMEL_BASE_PIOA;  	u32		mask; -	if ((port < AT91_PIO_PORTS) && (pin < 32)) { +	if ((port < ATMEL_PIO_PORTS) && (pin < 32)) {  		mask = 1 << pin;  		if (is_on)  			writel(mask, &pio->port[port].ifer); @@ -166,10 +176,10 @@ int at91_set_pio_deglitch(unsigned port, unsigned pin, int is_on)   */  int at91_set_pio_multi_drive(unsigned port, unsigned pin, int is_on)  { -	at91_pio_t	*pio 	= (at91_pio_t *) AT91_PIO_BASE; +	at91_pio_t	*pio = (at91_pio_t *) ATMEL_BASE_PIOA;  	u32		mask; -	if ((port < AT91_PIO_PORTS) && (pin < 32)) { +	if ((port < ATMEL_PIO_PORTS) && (pin < 32)) {  		mask = 1 << pin;  		if (is_on)  			writel(mask, &pio->port[port].mder); @@ -184,10 +194,10 @@ int at91_set_pio_multi_drive(unsigned port, unsigned pin, int is_on)   */  int at91_set_pio_value(unsigned port, unsigned pin, int value)  { -	at91_pio_t	*pio 	= (at91_pio_t *) AT91_PIO_BASE; +	at91_pio_t	*pio = (at91_pio_t *) ATMEL_BASE_PIOA;  	u32		mask; -	if ((port < AT91_PIO_PORTS) && (pin < 32)) { +	if ((port < ATMEL_PIO_PORTS) && (pin < 32)) {  		mask = 1 << pin;  		if (value)  			writel(mask, &pio->port[port].sodr); @@ -202,11 +212,11 @@ int at91_set_pio_value(unsigned port, unsigned pin, int value)   */  int at91_get_pio_value(unsigned port, unsigned pin)  { -	u32		pdsr	= 0; -	at91_pio_t	*pio 	= (at91_pio_t *) AT91_PIO_BASE; +	u32		pdsr = 0; +	at91_pio_t	*pio = (at91_pio_t *) ATMEL_BASE_PIOA;  	u32		mask; -	if ((port < AT91_PIO_PORTS) && (pin < 32)) { +	if ((port < ATMEL_PIO_PORTS) && (pin < 32)) {  		mask = 1 << pin;  		pdsr = readl(&pio->port[port].pdsr) & mask;  	} |