X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=arch%2Fblackfin%2Finclude%2Fasm%2Fgpio.h;h=376ec02b650897fa8a52b15ff38f8cc8abf1a48d;hb=d44a5f51288aec60c6bdb4ac939d75c24e5bf9c2;hp=b650ef080000ffbcb169c47a6d37eedf379d4a81;hpb=93502a5e0adcfc0ce6cf8e3daa7eb9a4f4e53658;p=oweals%2Fu-boot.git diff --git a/arch/blackfin/include/asm/gpio.h b/arch/blackfin/include/asm/gpio.h index b650ef0800..376ec02b65 100644 --- a/arch/blackfin/include/asm/gpio.h +++ b/arch/blackfin/include/asm/gpio.h @@ -7,6 +7,9 @@ #ifndef __ARCH_BLACKFIN_GPIO_H__ #define __ARCH_BLACKFIN_GPIO_H__ +#include +#include + #define gpio_bank(x) ((x) >> 4) #define gpio_bit(x) (1<<((x) & 0xF)) #define gpio_sub_n(x) ((x) & 0xF) @@ -65,10 +68,11 @@ #define PERIPHERAL_USAGE 1 #define GPIO_USAGE 0 +#define MAX_GPIOS MAX_BLACKFIN_GPIOS #ifndef __ASSEMBLY__ -#ifndef CONFIG_BF54x +#ifdef CONFIG_ADI_GPIO1 void set_gpio_dir(unsigned, unsigned short); void set_gpio_inen(unsigned, unsigned short); void set_gpio_polar(unsigned, unsigned short); @@ -138,63 +142,74 @@ struct gpio_port_t { unsigned short dummy16; unsigned short inen; }; -#endif - -#ifdef CONFIG_BFIN_GPIO_TRACK -void bfin_gpio_labels(void); #else -#define bfin_gpio_labels() -#define bfin_gpio_request(gpio, label) bfin_gpio_request(gpio) -#define bfin_special_gpio_request(gpio, label) bfin_special_gpio_request(gpio) +extern struct gpio_port_t * const gpio_array[]; #endif -#ifdef BFIN_SPECIAL_GPIO_BANKS -void bfin_special_gpio_free(unsigned gpio); -int bfin_special_gpio_request(unsigned gpio, const char *label); +#ifdef ADI_SPECIAL_GPIO_BANKS +void special_gpio_free(unsigned gpio); +int special_gpio_request(unsigned gpio, const char *label); #endif -int bfin_gpio_request(unsigned gpio, const char *label); -void bfin_gpio_free(unsigned gpio); -int bfin_gpio_direction_input(unsigned gpio); -int bfin_gpio_direction_output(unsigned gpio, int value); -int bfin_gpio_get_value(unsigned gpio); -void bfin_gpio_set_value(unsigned gpio, int value); -void bfin_gpio_toggle_value(unsigned gpio); +void gpio_labels(void); -static inline int gpio_request(unsigned gpio, const char *label) +static inline int gpio_is_valid(int number) { - return bfin_gpio_request(gpio, label); + return number >= 0 && number < MAX_GPIOS; } -static inline void gpio_free(unsigned gpio) -{ - return bfin_gpio_free(gpio); -} +#include -static inline int gpio_direction_input(unsigned gpio) +static inline int name_to_gpio(const char *name) { - return bfin_gpio_direction_input(gpio); -} + int port_base; -static inline int gpio_direction_output(unsigned gpio, int value) -{ - return bfin_gpio_direction_output(gpio, value); -} + if (tolower(*name) == 'p') { + ++name; -static inline int gpio_get_value(unsigned gpio) -{ - return bfin_gpio_get_value(gpio); -} + 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; + } -static inline void gpio_set_value(unsigned gpio, int value) -{ - return bfin_gpio_set_value(gpio, value); -} + ++name; + } else + port_base = 0; -static inline int gpio_is_valid(int number) -{ - return number >= 0 && number < MAX_BLACKFIN_GPIOS; + return port_base + simple_strtoul(name, NULL, 10); } +#define name_to_gpio(n) name_to_gpio(n) + +#define gpio_status() gpio_labels() #endif /* __ASSEMBLY__ */