Merge branch 'nfs-server-stable' of git://linux-nfs.org/~bfields/linux
[linux-2.6] / include / asm-blackfin / gpio.h
1 /*
2  * File:         arch/blackfin/kernel/bfin_gpio.h
3  * Based on:
4  * Author:       Michael Hennerich (hennerich@blackfin.uclinux.org)
5  *
6  * Created:
7  * Description:
8  *
9  * Modified:
10  *               Copyright 2004-2006 Analog Devices Inc.
11  *
12  * Bugs:         Enter bugs at http://blackfin.uclinux.org/
13  *
14  * This program is free software; you can redistribute it and/or modify
15  * it under the terms of the GNU General Public License as published by
16  * the Free Software Foundation; either version 2 of the License, or
17  * (at your option) any later version.
18  *
19  * This program is distributed in the hope that it will be useful,
20  * but WITHOUT ANY WARRANTY; without even the implied warranty of
21  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22  * GNU General Public License for more details.
23  *
24  * You should have received a copy of the GNU General Public License
25  * along with this program; if not, see the file COPYING, or write
26  * to the Free Software Foundation, Inc.,
27  * 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
28  */
29
30 /*
31 *  Number     BF537/6/4    BF561    BF533/2/1
32 *
33 *  GPIO_0       PF0         PF0        PF0
34 *  GPIO_1       PF1         PF1        PF1
35 *  GPIO_2       PF2         PF2        PF2
36 *  GPIO_3       PF3         PF3        PF3
37 *  GPIO_4       PF4         PF4        PF4
38 *  GPIO_5       PF5         PF5        PF5
39 *  GPIO_6       PF6         PF6        PF6
40 *  GPIO_7       PF7         PF7        PF7
41 *  GPIO_8       PF8         PF8        PF8
42 *  GPIO_9       PF9         PF9        PF9
43 *  GPIO_10      PF10        PF10       PF10
44 *  GPIO_11      PF11        PF11       PF11
45 *  GPIO_12      PF12        PF12       PF12
46 *  GPIO_13      PF13        PF13       PF13
47 *  GPIO_14      PF14        PF14       PF14
48 *  GPIO_15      PF15        PF15       PF15
49 *  GPIO_16      PG0         PF16
50 *  GPIO_17      PG1         PF17
51 *  GPIO_18      PG2         PF18
52 *  GPIO_19      PG3         PF19
53 *  GPIO_20      PG4         PF20
54 *  GPIO_21      PG5         PF21
55 *  GPIO_22      PG6         PF22
56 *  GPIO_23      PG7         PF23
57 *  GPIO_24      PG8         PF24
58 *  GPIO_25      PG9         PF25
59 *  GPIO_26      PG10        PF26
60 *  GPIO_27      PG11        PF27
61 *  GPIO_28      PG12        PF28
62 *  GPIO_29      PG13        PF29
63 *  GPIO_30      PG14        PF30
64 *  GPIO_31      PG15        PF31
65 *  GPIO_32      PH0         PF32
66 *  GPIO_33      PH1         PF33
67 *  GPIO_34      PH2         PF34
68 *  GPIO_35      PH3         PF35
69 *  GPIO_36      PH4         PF36
70 *  GPIO_37      PH5         PF37
71 *  GPIO_38      PH6         PF38
72 *  GPIO_39      PH7         PF39
73 *  GPIO_40      PH8         PF40
74 *  GPIO_41      PH9         PF41
75 *  GPIO_42      PH10        PF42
76 *  GPIO_43      PH11        PF43
77 *  GPIO_44      PH12        PF44
78 *  GPIO_45      PH13        PF45
79 *  GPIO_46      PH14        PF46
80 *  GPIO_47      PH15        PF47
81 */
82
83 #ifndef __ARCH_BLACKFIN_GPIO_H__
84 #define __ARCH_BLACKFIN_GPIO_H__
85
86 #define gpio_bank(x) ((x) >> 4)
87 #define gpio_bit(x)  (1<<((x) & 0xF))
88 #define gpio_sub_n(x) ((x) & 0xF)
89
90 #define GPIO_BANKSIZE 16
91
92 #define GPIO_0  0
93 #define GPIO_1  1
94 #define GPIO_2  2
95 #define GPIO_3  3
96 #define GPIO_4  4
97 #define GPIO_5  5
98 #define GPIO_6  6
99 #define GPIO_7  7
100 #define GPIO_8  8
101 #define GPIO_9  9
102 #define GPIO_10 10
103 #define GPIO_11 11
104 #define GPIO_12 12
105 #define GPIO_13 13
106 #define GPIO_14 14
107 #define GPIO_15 15
108 #define GPIO_16 16
109 #define GPIO_17 17
110 #define GPIO_18 18
111 #define GPIO_19 19
112 #define GPIO_20 20
113 #define GPIO_21 21
114 #define GPIO_22 22
115 #define GPIO_23 23
116 #define GPIO_24 24
117 #define GPIO_25 25
118 #define GPIO_26 26
119 #define GPIO_27 27
120 #define GPIO_28 28
121 #define GPIO_29 29
122 #define GPIO_30 30
123 #define GPIO_31 31
124 #define GPIO_32 32
125 #define GPIO_33 33
126 #define GPIO_34 34
127 #define GPIO_35 35
128 #define GPIO_36 36
129 #define GPIO_37 37
130 #define GPIO_38 38
131 #define GPIO_39 39
132 #define GPIO_40 40
133 #define GPIO_41 41
134 #define GPIO_42 42
135 #define GPIO_43 43
136 #define GPIO_44 44
137 #define GPIO_45 45
138 #define GPIO_46 46
139 #define GPIO_47 47
140
141
142 #define PERIPHERAL_USAGE 1
143 #define GPIO_USAGE 0
144
145 #ifdef BF533_FAMILY
146 #define MAX_BLACKFIN_GPIOS 16
147
148 #define GPIO_PF0        0
149 #define GPIO_PF1        1
150 #define GPIO_PF2        2
151 #define GPIO_PF3        3
152 #define GPIO_PF4        4
153 #define GPIO_PF5        5
154 #define GPIO_PF6        6
155 #define GPIO_PF7        7
156 #define GPIO_PF8        8
157 #define GPIO_PF9        9
158 #define GPIO_PF10       10
159 #define GPIO_PF11       11
160 #define GPIO_PF12       12
161 #define GPIO_PF13       13
162 #define GPIO_PF14       14
163 #define GPIO_PF15       15
164
165 #endif
166
167 #ifdef BF537_FAMILY
168 #define MAX_BLACKFIN_GPIOS 48
169
170 #define GPIO_PF0        0
171 #define GPIO_PF1        1
172 #define GPIO_PF2        2
173 #define GPIO_PF3        3
174 #define GPIO_PF4        4
175 #define GPIO_PF5        5
176 #define GPIO_PF6        6
177 #define GPIO_PF7        7
178 #define GPIO_PF8        8
179 #define GPIO_PF9        9
180 #define GPIO_PF10       10
181 #define GPIO_PF11       11
182 #define GPIO_PF12       12
183 #define GPIO_PF13       13
184 #define GPIO_PF14       14
185 #define GPIO_PF15       15
186 #define GPIO_PG0        16
187 #define GPIO_PG1        17
188 #define GPIO_PG2        18
189 #define GPIO_PG3        19
190 #define GPIO_PG4        20
191 #define GPIO_PG5        21
192 #define GPIO_PG6        22
193 #define GPIO_PG7        23
194 #define GPIO_PG8        24
195 #define GPIO_PG9        25
196 #define GPIO_PG10       26
197 #define GPIO_PG11       27
198 #define GPIO_PG12       28
199 #define GPIO_PG13       29
200 #define GPIO_PG14       30
201 #define GPIO_PG15       31
202 #define GPIO_PH0        32
203 #define GPIO_PH1        33
204 #define GPIO_PH2        34
205 #define GPIO_PH3        35
206 #define GPIO_PH4        36
207 #define GPIO_PH5        37
208 #define GPIO_PH6        38
209 #define GPIO_PH7        39
210 #define GPIO_PH8        40
211 #define GPIO_PH9        41
212 #define GPIO_PH10       42
213 #define GPIO_PH11       43
214 #define GPIO_PH12       44
215 #define GPIO_PH13       45
216 #define GPIO_PH14       46
217 #define GPIO_PH15       47
218
219 #define PORT_F GPIO_PF0
220 #define PORT_G GPIO_PG0
221 #define PORT_H GPIO_PH0
222
223 #endif
224
225 #ifdef BF548_FAMILY
226 #include <asm-blackfin/mach-bf548/gpio.h>
227 #endif
228
229 #ifdef BF561_FAMILY
230 #define MAX_BLACKFIN_GPIOS 48
231
232 #define GPIO_PF0        0
233 #define GPIO_PF1        1
234 #define GPIO_PF2        2
235 #define GPIO_PF3        3
236 #define GPIO_PF4        4
237 #define GPIO_PF5        5
238 #define GPIO_PF6        6
239 #define GPIO_PF7        7
240 #define GPIO_PF8        8
241 #define GPIO_PF9        9
242 #define GPIO_PF10       10
243 #define GPIO_PF11       11
244 #define GPIO_PF12       12
245 #define GPIO_PF13       13
246 #define GPIO_PF14       14
247 #define GPIO_PF15       15
248 #define GPIO_PF16       16
249 #define GPIO_PF17       17
250 #define GPIO_PF18       18
251 #define GPIO_PF19       19
252 #define GPIO_PF20       20
253 #define GPIO_PF21       21
254 #define GPIO_PF22       22
255 #define GPIO_PF23       23
256 #define GPIO_PF24       24
257 #define GPIO_PF25       25
258 #define GPIO_PF26       26
259 #define GPIO_PF27       27
260 #define GPIO_PF28       28
261 #define GPIO_PF29       29
262 #define GPIO_PF30       30
263 #define GPIO_PF31       31
264 #define GPIO_PF32       32
265 #define GPIO_PF33       33
266 #define GPIO_PF34       34
267 #define GPIO_PF35       35
268 #define GPIO_PF36       36
269 #define GPIO_PF37       37
270 #define GPIO_PF38       38
271 #define GPIO_PF39       39
272 #define GPIO_PF40       40
273 #define GPIO_PF41       41
274 #define GPIO_PF42       42
275 #define GPIO_PF43       43
276 #define GPIO_PF44       44
277 #define GPIO_PF45       45
278 #define GPIO_PF46       46
279 #define GPIO_PF47       47
280
281 #define PORT_FIO0 GPIO_0
282 #define PORT_FIO1 GPIO_16
283 #define PORT_FIO2 GPIO_32
284 #endif
285
286 #ifndef __ASSEMBLY__
287
288 /***********************************************************
289 *
290 * FUNCTIONS: Blackfin General Purpose Ports Access Functions
291 *
292 * INPUTS/OUTPUTS:
293 * gpio - GPIO Number between 0 and MAX_BLACKFIN_GPIOS
294 *
295 *
296 * DESCRIPTION: These functions abstract direct register access
297 *              to Blackfin processor General Purpose
298 *              Ports Regsiters
299 *
300 * CAUTION: These functions do not belong to the GPIO Driver API
301 *************************************************************
302 * MODIFICATION HISTORY :
303 **************************************************************/
304
305 #ifndef BF548_FAMILY
306 void set_gpio_dir(unsigned short, unsigned short);
307 void set_gpio_inen(unsigned short, unsigned short);
308 void set_gpio_polar(unsigned short, unsigned short);
309 void set_gpio_edge(unsigned short, unsigned short);
310 void set_gpio_both(unsigned short, unsigned short);
311 void set_gpio_data(unsigned short, unsigned short);
312 void set_gpio_maska(unsigned short, unsigned short);
313 void set_gpio_maskb(unsigned short, unsigned short);
314 void set_gpio_toggle(unsigned short);
315 void set_gpiop_dir(unsigned short, unsigned short);
316 void set_gpiop_inen(unsigned short, unsigned short);
317 void set_gpiop_polar(unsigned short, unsigned short);
318 void set_gpiop_edge(unsigned short, unsigned short);
319 void set_gpiop_both(unsigned short, unsigned short);
320 void set_gpiop_data(unsigned short, unsigned short);
321 void set_gpiop_maska(unsigned short, unsigned short);
322 void set_gpiop_maskb(unsigned short, unsigned short);
323 unsigned short get_gpio_dir(unsigned short);
324 unsigned short get_gpio_inen(unsigned short);
325 unsigned short get_gpio_polar(unsigned short);
326 unsigned short get_gpio_edge(unsigned short);
327 unsigned short get_gpio_both(unsigned short);
328 unsigned short get_gpio_maska(unsigned short);
329 unsigned short get_gpio_maskb(unsigned short);
330 unsigned short get_gpio_data(unsigned short);
331 unsigned short get_gpiop_dir(unsigned short);
332 unsigned short get_gpiop_inen(unsigned short);
333 unsigned short get_gpiop_polar(unsigned short);
334 unsigned short get_gpiop_edge(unsigned short);
335 unsigned short get_gpiop_both(unsigned short);
336 unsigned short get_gpiop_maska(unsigned short);
337 unsigned short get_gpiop_maskb(unsigned short);
338 unsigned short get_gpiop_data(unsigned short);
339
340 struct gpio_port_t {
341         unsigned short data;
342         unsigned short dummy1;
343         unsigned short data_clear;
344         unsigned short dummy2;
345         unsigned short data_set;
346         unsigned short dummy3;
347         unsigned short toggle;
348         unsigned short dummy4;
349         unsigned short maska;
350         unsigned short dummy5;
351         unsigned short maska_clear;
352         unsigned short dummy6;
353         unsigned short maska_set;
354         unsigned short dummy7;
355         unsigned short maska_toggle;
356         unsigned short dummy8;
357         unsigned short maskb;
358         unsigned short dummy9;
359         unsigned short maskb_clear;
360         unsigned short dummy10;
361         unsigned short maskb_set;
362         unsigned short dummy11;
363         unsigned short maskb_toggle;
364         unsigned short dummy12;
365         unsigned short dir;
366         unsigned short dummy13;
367         unsigned short polar;
368         unsigned short dummy14;
369         unsigned short edge;
370         unsigned short dummy15;
371         unsigned short both;
372         unsigned short dummy16;
373         unsigned short inen;
374 };
375 #endif
376
377 #ifdef CONFIG_PM
378 #define PM_WAKE_RISING  0x1
379 #define PM_WAKE_FALLING 0x2
380 #define PM_WAKE_HIGH    0x4
381 #define PM_WAKE_LOW     0x8
382 #define PM_WAKE_BOTH_EDGES      (PM_WAKE_RISING | PM_WAKE_FALLING)
383
384 int gpio_pm_wakeup_request(unsigned short gpio, unsigned char type);
385 void gpio_pm_wakeup_free(unsigned short gpio);
386 unsigned int gpio_pm_setup(void);
387 void gpio_pm_restore(void);
388
389 struct gpio_port_s {
390         unsigned short data;
391         unsigned short data_clear;
392         unsigned short data_set;
393         unsigned short toggle;
394         unsigned short maska;
395         unsigned short maska_clear;
396         unsigned short maska_set;
397         unsigned short maska_toggle;
398         unsigned short maskb;
399         unsigned short maskb_clear;
400         unsigned short maskb_set;
401         unsigned short maskb_toggle;
402         unsigned short dir;
403         unsigned short polar;
404         unsigned short edge;
405         unsigned short both;
406         unsigned short inen;
407
408         unsigned short fer;
409         unsigned short reserved;
410 };
411 #endif /*CONFIG_PM*/
412
413 /***********************************************************
414 *
415 * FUNCTIONS: Blackfin GPIO Driver
416 *
417 * INPUTS/OUTPUTS:
418 * gpio - GPIO Number between 0 and MAX_BLACKFIN_GPIOS
419 *
420 *
421 * DESCRIPTION: Blackfin GPIO Driver API
422 *
423 * CAUTION:
424 *************************************************************
425 * MODIFICATION HISTORY :
426 **************************************************************/
427
428 int gpio_request(unsigned short, const char *);
429 void gpio_free(unsigned short);
430
431 void gpio_set_value(unsigned short gpio, unsigned short arg);
432 unsigned short gpio_get_value(unsigned short gpio);
433
434 #ifndef BF548_FAMILY
435 #define gpio_get_value(gpio)            get_gpio_data(gpio)
436 #define gpio_set_value(gpio, value)     set_gpio_data(gpio, value)
437 #endif
438
439 void gpio_direction_input(unsigned short gpio);
440 void gpio_direction_output(unsigned short gpio);
441
442 #include <asm-generic/gpio.h>           /* cansleep wrappers */
443 #include <asm/irq.h>
444
445 static inline int gpio_to_irq(unsigned gpio)
446 {
447         return (gpio + GPIO_IRQ_BASE);
448 }
449
450 static inline int irq_to_gpio(unsigned irq)
451 {
452         return (irq - GPIO_IRQ_BASE);
453 }
454
455 #endif /* __ASSEMBLY__ */
456
457 #endif /* __ARCH_BLACKFIN_GPIO_H__ */