]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - arch/blackfin/include/asm/gpio.h
Merge branch 'u-boot-samsung/master' into 'u-boot-arm/master'
[karo-tx-uboot.git] / arch / blackfin / include / asm / gpio.h
index b650ef080000ffbcb169c47a6d37eedf379d4a81..58a619110779ed628e51248defb7ae58b02cbfb1 100644 (file)
@@ -7,6 +7,8 @@
 #ifndef __ARCH_BLACKFIN_GPIO_H__
 #define __ARCH_BLACKFIN_GPIO_H__
 
+#include <asm-generic/gpio.h>
+
 #define gpio_bank(x)   ((x) >> 4)
 #define gpio_bit(x)    (1<<((x) & 0xF))
 #define gpio_sub_n(x)  ((x) & 0xF)
 
 #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);
@@ -140,61 +143,70 @@ struct gpio_port_t {
 };
 #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)
-#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 <linux/ctype.h>
 
-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__ */