Blackfin arch: Allow a gpio pin be requested both as gpio and irq.
[pandora-kernel.git] / arch / blackfin / include / asm / 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-2008 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 *             BF527/5/2
33 *
34 *  GPIO_0       PF0         PF0        PF0
35 *  GPIO_1       PF1         PF1        PF1
36 *  GPIO_2       PF2         PF2        PF2
37 *  GPIO_3       PF3         PF3        PF3
38 *  GPIO_4       PF4         PF4        PF4
39 *  GPIO_5       PF5         PF5        PF5
40 *  GPIO_6       PF6         PF6        PF6
41 *  GPIO_7       PF7         PF7        PF7
42 *  GPIO_8       PF8         PF8        PF8
43 *  GPIO_9       PF9         PF9        PF9
44 *  GPIO_10      PF10        PF10       PF10
45 *  GPIO_11      PF11        PF11       PF11
46 *  GPIO_12      PF12        PF12       PF12
47 *  GPIO_13      PF13        PF13       PF13
48 *  GPIO_14      PF14        PF14       PF14
49 *  GPIO_15      PF15        PF15       PF15
50 *  GPIO_16      PG0         PF16
51 *  GPIO_17      PG1         PF17
52 *  GPIO_18      PG2         PF18
53 *  GPIO_19      PG3         PF19
54 *  GPIO_20      PG4         PF20
55 *  GPIO_21      PG5         PF21
56 *  GPIO_22      PG6         PF22
57 *  GPIO_23      PG7         PF23
58 *  GPIO_24      PG8         PF24
59 *  GPIO_25      PG9         PF25
60 *  GPIO_26      PG10        PF26
61 *  GPIO_27      PG11        PF27
62 *  GPIO_28      PG12        PF28
63 *  GPIO_29      PG13        PF29
64 *  GPIO_30      PG14        PF30
65 *  GPIO_31      PG15        PF31
66 *  GPIO_32      PH0         PF32
67 *  GPIO_33      PH1         PF33
68 *  GPIO_34      PH2         PF34
69 *  GPIO_35      PH3         PF35
70 *  GPIO_36      PH4         PF36
71 *  GPIO_37      PH5         PF37
72 *  GPIO_38      PH6         PF38
73 *  GPIO_39      PH7         PF39
74 *  GPIO_40      PH8         PF40
75 *  GPIO_41      PH9         PF41
76 *  GPIO_42      PH10        PF42
77 *  GPIO_43      PH11        PF43
78 *  GPIO_44      PH12        PF44
79 *  GPIO_45      PH13        PF45
80 *  GPIO_46      PH14        PF46
81 *  GPIO_47      PH15        PF47
82 */
83
84 #ifndef __ARCH_BLACKFIN_GPIO_H__
85 #define __ARCH_BLACKFIN_GPIO_H__
86
87 #define gpio_bank(x)    ((x) >> 4)
88 #define gpio_bit(x)     (1<<((x) & 0xF))
89 #define gpio_sub_n(x)   ((x) & 0xF)
90
91 #define GPIO_BANKSIZE   16
92 #define GPIO_BANK_NUM   DIV_ROUND_UP(MAX_BLACKFIN_GPIOS, GPIO_BANKSIZE)
93
94 #define GPIO_0  0
95 #define GPIO_1  1
96 #define GPIO_2  2
97 #define GPIO_3  3
98 #define GPIO_4  4
99 #define GPIO_5  5
100 #define GPIO_6  6
101 #define GPIO_7  7
102 #define GPIO_8  8
103 #define GPIO_9  9
104 #define GPIO_10 10
105 #define GPIO_11 11
106 #define GPIO_12 12
107 #define GPIO_13 13
108 #define GPIO_14 14
109 #define GPIO_15 15
110 #define GPIO_16 16
111 #define GPIO_17 17
112 #define GPIO_18 18
113 #define GPIO_19 19
114 #define GPIO_20 20
115 #define GPIO_21 21
116 #define GPIO_22 22
117 #define GPIO_23 23
118 #define GPIO_24 24
119 #define GPIO_25 25
120 #define GPIO_26 26
121 #define GPIO_27 27
122 #define GPIO_28 28
123 #define GPIO_29 29
124 #define GPIO_30 30
125 #define GPIO_31 31
126 #define GPIO_32 32
127 #define GPIO_33 33
128 #define GPIO_34 34
129 #define GPIO_35 35
130 #define GPIO_36 36
131 #define GPIO_37 37
132 #define GPIO_38 38
133 #define GPIO_39 39
134 #define GPIO_40 40
135 #define GPIO_41 41
136 #define GPIO_42 42
137 #define GPIO_43 43
138 #define GPIO_44 44
139 #define GPIO_45 45
140 #define GPIO_46 46
141 #define GPIO_47 47
142
143
144 #define PERIPHERAL_USAGE 1
145 #define GPIO_USAGE 0
146
147 #if defined(BF518_FAMILY)
148 #define MAX_BLACKFIN_GPIOS 40
149
150 #define GPIO_PF0        0
151 #define GPIO_PF1        1
152 #define GPIO_PF2        2
153 #define GPIO_PF3        3
154 #define GPIO_PF4        4
155 #define GPIO_PF5        5
156 #define GPIO_PF6        6
157 #define GPIO_PF7        7
158 #define GPIO_PF8        8
159 #define GPIO_PF9        9
160 #define GPIO_PF10       10
161 #define GPIO_PF11       11
162 #define GPIO_PF12       12
163 #define GPIO_PF13       13
164 #define GPIO_PF14       14
165 #define GPIO_PF15       15
166 #define GPIO_PG0        16
167 #define GPIO_PG1        17
168 #define GPIO_PG2        18
169 #define GPIO_PG3        19
170 #define GPIO_PG4        20
171 #define GPIO_PG5        21
172 #define GPIO_PG6        22
173 #define GPIO_PG7        23
174 #define GPIO_PG8        24
175 #define GPIO_PG9        25
176 #define GPIO_PG10       26
177 #define GPIO_PG11       27
178 #define GPIO_PG12       28
179 #define GPIO_PG13       29
180 #define GPIO_PG14       30
181 #define GPIO_PG15       31
182 #define GPIO_PH0        32
183 #define GPIO_PH1        33
184 #define GPIO_PH2        34
185 #define GPIO_PH3        35
186 #define GPIO_PH4        36
187 #define GPIO_PH5        37
188 #define GPIO_PH6        38
189 #define GPIO_PH7        39
190
191 #define PORT_F GPIO_PF0
192 #define PORT_G GPIO_PG0
193 #define PORT_H GPIO_PH0
194
195 #endif
196
197
198 #ifdef BF533_FAMILY
199 #define MAX_BLACKFIN_GPIOS 16
200
201 #define GPIO_PF0        0
202 #define GPIO_PF1        1
203 #define GPIO_PF2        2
204 #define GPIO_PF3        3
205 #define GPIO_PF4        4
206 #define GPIO_PF5        5
207 #define GPIO_PF6        6
208 #define GPIO_PF7        7
209 #define GPIO_PF8        8
210 #define GPIO_PF9        9
211 #define GPIO_PF10       10
212 #define GPIO_PF11       11
213 #define GPIO_PF12       12
214 #define GPIO_PF13       13
215 #define GPIO_PF14       14
216 #define GPIO_PF15       15
217
218 #endif
219
220 #if defined(BF538_FAMILY)
221         /* FIXME:
222          * For now only support PORTF GPIOs.
223          * PORT C,D and E are for peripheral usage only
224          */
225 #define MAX_BLACKFIN_GPIOS 16
226
227 #define GPIO_PF0        0       /* PF */
228 #define GPIO_PF1        1
229 #define GPIO_PF2        2
230 #define GPIO_PF3        3
231 #define GPIO_PF4        4
232 #define GPIO_PF5        5
233 #define GPIO_PF6        6
234 #define GPIO_PF7        7
235 #define GPIO_PF8        8
236 #define GPIO_PF9        9
237 #define GPIO_PF10       10
238 #define GPIO_PF11       11
239 #define GPIO_PF12       12
240 #define GPIO_PF13       13
241 #define GPIO_PF14       14
242 #define GPIO_PF15       15
243 #define GPIO_PC0        16      /* PC */
244 #define GPIO_PC1        17
245 #define GPIO_PC4        20
246 #define GPIO_PC5        21
247 #define GPIO_PC6        22
248 #define GPIO_PC7        23
249 #define GPIO_PC8        24
250 #define GPIO_PC9        25
251 #define GPIO_PD0        32      /* PD */
252 #define GPIO_PD1        33
253 #define GPIO_PD2        34
254 #define GPIO_PD3        35
255 #define GPIO_PD4        36
256 #define GPIO_PD5        37
257 #define GPIO_PD6        38
258 #define GPIO_PD7        39
259 #define GPIO_PD8        40
260 #define GPIO_PD9        41
261 #define GPIO_PD10       42
262 #define GPIO_PD11       43
263 #define GPIO_PD12       44
264 #define GPIO_PD13       45
265 #define GPIO_PE0        48      /* PE */
266 #define GPIO_PE1        49
267 #define GPIO_PE2        50
268 #define GPIO_PE3        51
269 #define GPIO_PE4        52
270 #define GPIO_PE5        53
271 #define GPIO_PE6        54
272 #define GPIO_PE7        55
273 #define GPIO_PE8        56
274 #define GPIO_PE9        57
275 #define GPIO_PE10       58
276 #define GPIO_PE11       59
277 #define GPIO_PE12       60
278 #define GPIO_PE13       61
279 #define GPIO_PE14       62
280 #define GPIO_PE15       63
281
282 #define PORT_F GPIO_PF0
283 #define PORT_C GPIO_PC0
284 #define PORT_D GPIO_PD0
285 #define PORT_E GPIO_PE0
286 #endif
287
288 #if defined(BF527_FAMILY) || defined(BF537_FAMILY)
289 #define MAX_BLACKFIN_GPIOS 48
290
291 #define GPIO_PF0        0
292 #define GPIO_PF1        1
293 #define GPIO_PF2        2
294 #define GPIO_PF3        3
295 #define GPIO_PF4        4
296 #define GPIO_PF5        5
297 #define GPIO_PF6        6
298 #define GPIO_PF7        7
299 #define GPIO_PF8        8
300 #define GPIO_PF9        9
301 #define GPIO_PF10       10
302 #define GPIO_PF11       11
303 #define GPIO_PF12       12
304 #define GPIO_PF13       13
305 #define GPIO_PF14       14
306 #define GPIO_PF15       15
307 #define GPIO_PG0        16
308 #define GPIO_PG1        17
309 #define GPIO_PG2        18
310 #define GPIO_PG3        19
311 #define GPIO_PG4        20
312 #define GPIO_PG5        21
313 #define GPIO_PG6        22
314 #define GPIO_PG7        23
315 #define GPIO_PG8        24
316 #define GPIO_PG9        25
317 #define GPIO_PG10       26
318 #define GPIO_PG11       27
319 #define GPIO_PG12       28
320 #define GPIO_PG13       29
321 #define GPIO_PG14       30
322 #define GPIO_PG15       31
323 #define GPIO_PH0        32
324 #define GPIO_PH1        33
325 #define GPIO_PH2        34
326 #define GPIO_PH3        35
327 #define GPIO_PH4        36
328 #define GPIO_PH5        37
329 #define GPIO_PH6        38
330 #define GPIO_PH7        39
331 #define GPIO_PH8        40
332 #define GPIO_PH9        41
333 #define GPIO_PH10       42
334 #define GPIO_PH11       43
335 #define GPIO_PH12       44
336 #define GPIO_PH13       45
337 #define GPIO_PH14       46
338 #define GPIO_PH15       47
339
340 #define PORT_F GPIO_PF0
341 #define PORT_G GPIO_PG0
342 #define PORT_H GPIO_PH0
343
344 #endif
345
346 #ifdef BF548_FAMILY
347 #include <mach/gpio.h>
348 #endif
349
350 #ifdef BF561_FAMILY
351 #define MAX_BLACKFIN_GPIOS 48
352
353 #define GPIO_PF0        0
354 #define GPIO_PF1        1
355 #define GPIO_PF2        2
356 #define GPIO_PF3        3
357 #define GPIO_PF4        4
358 #define GPIO_PF5        5
359 #define GPIO_PF6        6
360 #define GPIO_PF7        7
361 #define GPIO_PF8        8
362 #define GPIO_PF9        9
363 #define GPIO_PF10       10
364 #define GPIO_PF11       11
365 #define GPIO_PF12       12
366 #define GPIO_PF13       13
367 #define GPIO_PF14       14
368 #define GPIO_PF15       15
369 #define GPIO_PF16       16
370 #define GPIO_PF17       17
371 #define GPIO_PF18       18
372 #define GPIO_PF19       19
373 #define GPIO_PF20       20
374 #define GPIO_PF21       21
375 #define GPIO_PF22       22
376 #define GPIO_PF23       23
377 #define GPIO_PF24       24
378 #define GPIO_PF25       25
379 #define GPIO_PF26       26
380 #define GPIO_PF27       27
381 #define GPIO_PF28       28
382 #define GPIO_PF29       29
383 #define GPIO_PF30       30
384 #define GPIO_PF31       31
385 #define GPIO_PF32       32
386 #define GPIO_PF33       33
387 #define GPIO_PF34       34
388 #define GPIO_PF35       35
389 #define GPIO_PF36       36
390 #define GPIO_PF37       37
391 #define GPIO_PF38       38
392 #define GPIO_PF39       39
393 #define GPIO_PF40       40
394 #define GPIO_PF41       41
395 #define GPIO_PF42       42
396 #define GPIO_PF43       43
397 #define GPIO_PF44       44
398 #define GPIO_PF45       45
399 #define GPIO_PF46       46
400 #define GPIO_PF47       47
401
402 #define PORT_FIO0 GPIO_0
403 #define PORT_FIO1 GPIO_16
404 #define PORT_FIO2 GPIO_32
405 #endif
406
407 #ifndef __ASSEMBLY__
408
409 /***********************************************************
410 *
411 * FUNCTIONS: Blackfin General Purpose Ports Access Functions
412 *
413 * INPUTS/OUTPUTS:
414 * gpio - GPIO Number between 0 and MAX_BLACKFIN_GPIOS
415 *
416 *
417 * DESCRIPTION: These functions abstract direct register access
418 *              to Blackfin processor General Purpose
419 *              Ports Regsiters
420 *
421 * CAUTION: These functions do not belong to the GPIO Driver API
422 *************************************************************
423 * MODIFICATION HISTORY :
424 **************************************************************/
425
426 #ifndef BF548_FAMILY
427 void set_gpio_dir(unsigned, unsigned short);
428 void set_gpio_inen(unsigned, unsigned short);
429 void set_gpio_polar(unsigned, unsigned short);
430 void set_gpio_edge(unsigned, unsigned short);
431 void set_gpio_both(unsigned, unsigned short);
432 void set_gpio_data(unsigned, unsigned short);
433 void set_gpio_maska(unsigned, unsigned short);
434 void set_gpio_maskb(unsigned, unsigned short);
435 void set_gpio_toggle(unsigned);
436 void set_gpiop_dir(unsigned, unsigned short);
437 void set_gpiop_inen(unsigned, unsigned short);
438 void set_gpiop_polar(unsigned, unsigned short);
439 void set_gpiop_edge(unsigned, unsigned short);
440 void set_gpiop_both(unsigned, unsigned short);
441 void set_gpiop_data(unsigned, unsigned short);
442 void set_gpiop_maska(unsigned, unsigned short);
443 void set_gpiop_maskb(unsigned, unsigned short);
444 unsigned short get_gpio_dir(unsigned);
445 unsigned short get_gpio_inen(unsigned);
446 unsigned short get_gpio_polar(unsigned);
447 unsigned short get_gpio_edge(unsigned);
448 unsigned short get_gpio_both(unsigned);
449 unsigned short get_gpio_maska(unsigned);
450 unsigned short get_gpio_maskb(unsigned);
451 unsigned short get_gpio_data(unsigned);
452 unsigned short get_gpiop_dir(unsigned);
453 unsigned short get_gpiop_inen(unsigned);
454 unsigned short get_gpiop_polar(unsigned);
455 unsigned short get_gpiop_edge(unsigned);
456 unsigned short get_gpiop_both(unsigned);
457 unsigned short get_gpiop_maska(unsigned);
458 unsigned short get_gpiop_maskb(unsigned);
459 unsigned short get_gpiop_data(unsigned);
460
461 struct gpio_port_t {
462         unsigned short data;
463         unsigned short dummy1;
464         unsigned short data_clear;
465         unsigned short dummy2;
466         unsigned short data_set;
467         unsigned short dummy3;
468         unsigned short toggle;
469         unsigned short dummy4;
470         unsigned short maska;
471         unsigned short dummy5;
472         unsigned short maska_clear;
473         unsigned short dummy6;
474         unsigned short maska_set;
475         unsigned short dummy7;
476         unsigned short maska_toggle;
477         unsigned short dummy8;
478         unsigned short maskb;
479         unsigned short dummy9;
480         unsigned short maskb_clear;
481         unsigned short dummy10;
482         unsigned short maskb_set;
483         unsigned short dummy11;
484         unsigned short maskb_toggle;
485         unsigned short dummy12;
486         unsigned short dir;
487         unsigned short dummy13;
488         unsigned short polar;
489         unsigned short dummy14;
490         unsigned short edge;
491         unsigned short dummy15;
492         unsigned short both;
493         unsigned short dummy16;
494         unsigned short inen;
495 };
496 #endif
497
498 #ifdef CONFIG_PM
499
500 unsigned int bfin_pm_standby_setup(void);
501 void bfin_pm_standby_restore(void);
502
503 void bfin_gpio_pm_hibernate_restore(void);
504 void bfin_gpio_pm_hibernate_suspend(void);
505
506 #ifndef CONFIG_BF54x
507 #define PM_WAKE_RISING  0x1
508 #define PM_WAKE_FALLING 0x2
509 #define PM_WAKE_HIGH    0x4
510 #define PM_WAKE_LOW     0x8
511 #define PM_WAKE_BOTH_EDGES      (PM_WAKE_RISING | PM_WAKE_FALLING)
512 #define PM_WAKE_IGNORE  0xF0
513
514 int gpio_pm_wakeup_request(unsigned gpio, unsigned char type);
515 void gpio_pm_wakeup_free(unsigned gpio);
516
517 struct gpio_port_s {
518         unsigned short data;
519         unsigned short maska;
520         unsigned short maskb;
521         unsigned short dir;
522         unsigned short polar;
523         unsigned short edge;
524         unsigned short both;
525         unsigned short inen;
526
527         unsigned short fer;
528         unsigned short reserved;
529         unsigned short mux;
530 };
531 #endif /*CONFIG_BF54x*/
532 #endif /*CONFIG_PM*/
533 /***********************************************************
534 *
535 * FUNCTIONS: Blackfin GPIO Driver
536 *
537 * INPUTS/OUTPUTS:
538 * gpio - GPIO Number between 0 and MAX_BLACKFIN_GPIOS
539 *
540 *
541 * DESCRIPTION: Blackfin GPIO Driver API
542 *
543 * CAUTION:
544 *************************************************************
545 * MODIFICATION HISTORY :
546 **************************************************************/
547
548
549 int bfin_gpio_request(unsigned gpio, const char *label);
550 void bfin_gpio_free(unsigned gpio);
551 int bfin_gpio_irq_request(unsigned gpio, const char *label);
552 void bfin_gpio_irq_free(unsigned gpio);
553 int bfin_gpio_direction_input(unsigned gpio);
554 int bfin_gpio_direction_output(unsigned gpio, int value);
555 int bfin_gpio_get_value(unsigned gpio);
556 void bfin_gpio_set_value(unsigned gpio, int value);
557
558 #ifndef BF548_FAMILY
559 #define bfin_gpio_set_value(gpio, value)    set_gpio_data(gpio, value)
560 #endif
561
562 #ifdef CONFIG_GPIOLIB
563 #include <asm-generic/gpio.h>           /* cansleep wrappers */
564
565 static inline int gpio_get_value(unsigned int gpio)
566 {
567         if (gpio < MAX_BLACKFIN_GPIOS)
568                 return bfin_gpio_get_value(gpio);
569         else
570                 return __gpio_get_value(gpio);
571 }
572
573 static inline void gpio_set_value(unsigned int gpio, int value)
574 {
575         if (gpio < MAX_BLACKFIN_GPIOS)
576                 bfin_gpio_set_value(gpio, value);
577         else
578                 __gpio_set_value(gpio, value);
579 }
580
581 static inline int gpio_cansleep(unsigned int gpio)
582 {
583         return __gpio_cansleep(gpio);
584 }
585
586 #else /* !CONFIG_GPIOLIB */
587
588 static inline int gpio_request(unsigned gpio, const char *label)
589 {
590         return bfin_gpio_request(gpio, label);
591 }
592
593 static inline void gpio_free(unsigned gpio)
594 {
595         return bfin_gpio_free(gpio);
596 }
597
598 static inline int gpio_direction_input(unsigned gpio)
599 {
600         return bfin_gpio_direction_input(gpio);
601 }
602
603 static inline int gpio_direction_output(unsigned gpio, int value)
604 {
605         return bfin_gpio_direction_output(gpio, value);
606 }
607
608 static inline int gpio_get_value(unsigned gpio)
609 {
610         return bfin_gpio_get_value(gpio);
611 }
612
613 static inline void gpio_set_value(unsigned gpio, int value)
614 {
615         return bfin_gpio_set_value(gpio, value);
616 }
617
618 #include <asm-generic/gpio.h>           /* cansleep wrappers */
619 #endif  /* !CONFIG_GPIOLIB */
620 #include <asm/irq.h>
621
622 static inline int gpio_to_irq(unsigned gpio)
623 {
624         return (gpio + GPIO_IRQ_BASE);
625 }
626
627 static inline int irq_to_gpio(unsigned irq)
628 {
629         return (irq - GPIO_IRQ_BASE);
630 }
631
632 #endif /* __ASSEMBLY__ */
633
634 #endif /* __ARCH_BLACKFIN_GPIO_H__ */