2 * Copyright 2006-2009 Analog Devices Inc.
4 * Licensed under the GPL-2 or later.
7 #ifndef __ARCH_BLACKFIN_GPIO_H__
8 #define __ARCH_BLACKFIN_GPIO_H__
10 #define gpio_bank(x) ((x) >> 4)
11 #define gpio_bit(x) (1<<((x) & 0xF))
12 #define gpio_sub_n(x) ((x) & 0xF)
14 #define GPIO_BANKSIZE 16
15 #define GPIO_BANK_NUM DIV_ROUND_UP(MAX_BLACKFIN_GPIOS, GPIO_BANKSIZE)
66 #define PERIPHERAL_USAGE 1
71 #if !defined(CONFIG_BF54x) && !defined(CONFIG_BF60x)
72 void set_gpio_dir(unsigned, unsigned short);
73 void set_gpio_inen(unsigned, unsigned short);
74 void set_gpio_polar(unsigned, unsigned short);
75 void set_gpio_edge(unsigned, unsigned short);
76 void set_gpio_both(unsigned, unsigned short);
77 void set_gpio_data(unsigned, unsigned short);
78 void set_gpio_maska(unsigned, unsigned short);
79 void set_gpio_maskb(unsigned, unsigned short);
80 void set_gpio_toggle(unsigned);
81 void set_gpiop_dir(unsigned, unsigned short);
82 void set_gpiop_inen(unsigned, unsigned short);
83 void set_gpiop_polar(unsigned, unsigned short);
84 void set_gpiop_edge(unsigned, unsigned short);
85 void set_gpiop_both(unsigned, unsigned short);
86 void set_gpiop_data(unsigned, unsigned short);
87 void set_gpiop_maska(unsigned, unsigned short);
88 void set_gpiop_maskb(unsigned, unsigned short);
89 unsigned short get_gpio_dir(unsigned);
90 unsigned short get_gpio_inen(unsigned);
91 unsigned short get_gpio_polar(unsigned);
92 unsigned short get_gpio_edge(unsigned);
93 unsigned short get_gpio_both(unsigned);
94 unsigned short get_gpio_maska(unsigned);
95 unsigned short get_gpio_maskb(unsigned);
96 unsigned short get_gpio_data(unsigned);
97 unsigned short get_gpiop_dir(unsigned);
98 unsigned short get_gpiop_inen(unsigned);
99 unsigned short get_gpiop_polar(unsigned);
100 unsigned short get_gpiop_edge(unsigned);
101 unsigned short get_gpiop_both(unsigned);
102 unsigned short get_gpiop_maska(unsigned);
103 unsigned short get_gpiop_maskb(unsigned);
104 unsigned short get_gpiop_data(unsigned);
108 unsigned short dummy1;
109 unsigned short data_clear;
110 unsigned short dummy2;
111 unsigned short data_set;
112 unsigned short dummy3;
113 unsigned short toggle;
114 unsigned short dummy4;
115 unsigned short maska;
116 unsigned short dummy5;
117 unsigned short maska_clear;
118 unsigned short dummy6;
119 unsigned short maska_set;
120 unsigned short dummy7;
121 unsigned short maska_toggle;
122 unsigned short dummy8;
123 unsigned short maskb;
124 unsigned short dummy9;
125 unsigned short maskb_clear;
126 unsigned short dummy10;
127 unsigned short maskb_set;
128 unsigned short dummy11;
129 unsigned short maskb_toggle;
130 unsigned short dummy12;
132 unsigned short dummy13;
133 unsigned short polar;
134 unsigned short dummy14;
136 unsigned short dummy15;
138 unsigned short dummy16;
143 #ifdef CONFIG_BFIN_GPIO_TRACK
144 void bfin_gpio_labels(void);
145 void bfin_gpio_free(unsigned gpio);
147 #define bfin_gpio_labels()
148 #define bfin_gpio_free(gpio)
149 #define bfin_gpio_request(gpio, label) bfin_gpio_request(gpio)
150 #define bfin_special_gpio_request(gpio, label) bfin_special_gpio_request(gpio)
153 #ifdef BFIN_SPECIAL_GPIO_BANKS
154 void bfin_special_gpio_free(unsigned gpio);
155 int bfin_special_gpio_request(unsigned gpio, const char *label);
158 int bfin_gpio_request(unsigned gpio, const char *label);
159 int bfin_gpio_direction_input(unsigned gpio);
160 int bfin_gpio_direction_output(unsigned gpio, int value);
161 int bfin_gpio_get_value(unsigned gpio);
162 void bfin_gpio_set_value(unsigned gpio, int value);
163 void bfin_gpio_toggle_value(unsigned gpio);
165 static inline int gpio_request(unsigned gpio, const char *label)
167 return bfin_gpio_request(gpio, label);
170 static inline void gpio_free(unsigned gpio)
172 return bfin_gpio_free(gpio);
175 static inline int gpio_direction_input(unsigned gpio)
177 return bfin_gpio_direction_input(gpio);
180 static inline int gpio_direction_output(unsigned gpio, int value)
182 return bfin_gpio_direction_output(gpio, value);
185 static inline int gpio_get_value(unsigned gpio)
187 return bfin_gpio_get_value(gpio);
190 static inline void gpio_set_value(unsigned gpio, int value)
192 return bfin_gpio_set_value(gpio, value);
195 static inline int gpio_is_valid(int number)
197 return number >= 0 && number < MAX_BLACKFIN_GPIOS;
200 #include <linux/ctype.h>
202 static inline int name_to_gpio(const char *name)
206 if (tolower(*name) == 'p') {
209 switch (tolower(*name)) {
211 case 'a': port_base = GPIO_PA0; break;
214 case 'b': port_base = GPIO_PB0; break;
217 case 'c': port_base = GPIO_PC0; break;
220 case 'd': port_base = GPIO_PD0; break;
223 case 'e': port_base = GPIO_PE0; break;
226 case 'f': port_base = GPIO_PF0; break;
229 case 'g': port_base = GPIO_PG0; break;
232 case 'h': port_base = GPIO_PH0; break;
235 case 'i': port_base = GPIO_PI0; break;
238 case 'j': port_base = GPIO_PJ0; break;
247 return port_base + simple_strtoul(name, NULL, 10);
249 #define name_to_gpio(n) name_to_gpio(n)
251 #define gpio_status() bfin_gpio_labels()
253 #endif /* __ASSEMBLY__ */
255 #endif /* __ARCH_BLACKFIN_GPIO_H__ */