diff options
| author | Mike Frysinger <vapier@gentoo.org> | 2011-04-03 04:40:46 -0400 | 
|---|---|---|
| committer | Mike Frysinger <vapier@gentoo.org> | 2011-04-13 15:56:51 -0400 | 
| commit | a972b8d701814317be2b8bcca4103f37bcbb467c (patch) | |
| tree | f4de82746e7225b8c1cf1faf0306b718d5827302 /arch/blackfin/include/asm/gpio.h | |
| parent | c3d2a17c1eba2b4c1621ee7550ae4ea7446bfc39 (diff) | |
| download | olio-uboot-2014.01-a972b8d701814317be2b8bcca4103f37bcbb467c.tar.xz olio-uboot-2014.01-a972b8d701814317be2b8bcca4103f37bcbb467c.zip | |
gpio: generalize for all generic gpio providers
The Blackfin gpio command isn't terribly Blackfin-specific.  So generalize
the few pieces into two new optional helpers:
	name_to_gpio() - turn a string name into a GPIO #
	gpio_status() - display current pin bindings (think /proc/gpio)
Once these pieces are pulled out, we can relocate the cmd_gpio.c into the
common directory.
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Diffstat (limited to 'arch/blackfin/include/asm/gpio.h')
| -rw-r--r-- | arch/blackfin/include/asm/gpio.h | 53 | 
1 files changed, 53 insertions, 0 deletions
| diff --git a/arch/blackfin/include/asm/gpio.h b/arch/blackfin/include/asm/gpio.h index b650ef080..9c0e5d195 100644 --- a/arch/blackfin/include/asm/gpio.h +++ b/arch/blackfin/include/asm/gpio.h @@ -196,6 +196,59 @@ static inline int gpio_is_valid(int number)  	return number >= 0 && number < MAX_BLACKFIN_GPIOS;  } +#include <linux/ctype.h> + +static inline int name_to_gpio(const char *name) +{ +	int port_base; + +	if (tolower(*name) == 'p') { +		++name; + +		switch (tolower(*name)) { +#ifdef GPIO_PA0 +		case 'a': port_base = GPIO_PA0; break; +#endif +#ifdef GPIO_PB0 +		case 'b': port_base = GPIO_PB0; break; +#endif +#ifdef GPIO_PC0 +		case 'c': port_base = GPIO_PC0; break; +#endif +#ifdef GPIO_PD0 +		case 'd': port_base = GPIO_PD0; break; +#endif +#ifdef GPIO_PE0 +		case 'e': port_base = GPIO_PE0; break; +#endif +#ifdef GPIO_PF0 +		case 'f': port_base = GPIO_PF0; break; +#endif +#ifdef GPIO_PG0 +		case 'g': port_base = GPIO_PG0; break; +#endif +#ifdef GPIO_PH0 +		case 'h': port_base = GPIO_PH0; break; +#endif +#ifdef GPIO_PI0 +		case 'i': port_base = GPIO_PI0; break; +#endif +#ifdef GPIO_PJ +		case 'j': port_base = GPIO_PJ0; break; +#endif +		default:  return -1; +		} + +		++name; +	} else +		port_base = 0; + +	return port_base + simple_strtoul(name, NULL, 10); +} +#define name_to_gpio(n) name_to_gpio(n) + +#define gpio_status() bfin_gpio_labels() +  #endif /* __ASSEMBLY__ */  #endif /* __ARCH_BLACKFIN_GPIO_H__ */ |