Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wirel...
[pandora-kernel.git] / arch / blackfin / include / asm / gpio.h
1 /*
2  * Copyright 2006-2009 Analog Devices Inc.
3  *
4  * Licensed under the GPL-2 or later.
5  */
6
7 #ifndef __ARCH_BLACKFIN_GPIO_H__
8 #define __ARCH_BLACKFIN_GPIO_H__
9
10 #define gpio_bank(x)    ((x) >> 4)
11 #define gpio_bit(x)     (1<<((x) & 0xF))
12 #define gpio_sub_n(x)   ((x) & 0xF)
13
14 #define GPIO_BANKSIZE   16
15 #define GPIO_BANK_NUM   DIV_ROUND_UP(MAX_BLACKFIN_GPIOS, GPIO_BANKSIZE)
16
17 #include <mach/gpio.h>
18
19 #define GPIO_0  0
20 #define GPIO_1  1
21 #define GPIO_2  2
22 #define GPIO_3  3
23 #define GPIO_4  4
24 #define GPIO_5  5
25 #define GPIO_6  6
26 #define GPIO_7  7
27 #define GPIO_8  8
28 #define GPIO_9  9
29 #define GPIO_10 10
30 #define GPIO_11 11
31 #define GPIO_12 12
32 #define GPIO_13 13
33 #define GPIO_14 14
34 #define GPIO_15 15
35 #define GPIO_16 16
36 #define GPIO_17 17
37 #define GPIO_18 18
38 #define GPIO_19 19
39 #define GPIO_20 20
40 #define GPIO_21 21
41 #define GPIO_22 22
42 #define GPIO_23 23
43 #define GPIO_24 24
44 #define GPIO_25 25
45 #define GPIO_26 26
46 #define GPIO_27 27
47 #define GPIO_28 28
48 #define GPIO_29 29
49 #define GPIO_30 30
50 #define GPIO_31 31
51 #define GPIO_32 32
52 #define GPIO_33 33
53 #define GPIO_34 34
54 #define GPIO_35 35
55 #define GPIO_36 36
56 #define GPIO_37 37
57 #define GPIO_38 38
58 #define GPIO_39 39
59 #define GPIO_40 40
60 #define GPIO_41 41
61 #define GPIO_42 42
62 #define GPIO_43 43
63 #define GPIO_44 44
64 #define GPIO_45 45
65 #define GPIO_46 46
66 #define GPIO_47 47
67
68 #define PERIPHERAL_USAGE 1
69 #define GPIO_USAGE 0
70
71 #ifndef __ASSEMBLY__
72
73 /***********************************************************
74 *
75 * FUNCTIONS: Blackfin General Purpose Ports Access Functions
76 *
77 * INPUTS/OUTPUTS:
78 * gpio - GPIO Number between 0 and MAX_BLACKFIN_GPIOS
79 *
80 *
81 * DESCRIPTION: These functions abstract direct register access
82 *              to Blackfin processor General Purpose
83 *              Ports Regsiters
84 *
85 * CAUTION: These functions do not belong to the GPIO Driver API
86 *************************************************************
87 * MODIFICATION HISTORY :
88 **************************************************************/
89
90 #ifndef CONFIG_BF54x
91 void set_gpio_dir(unsigned, unsigned short);
92 void set_gpio_inen(unsigned, unsigned short);
93 void set_gpio_polar(unsigned, unsigned short);
94 void set_gpio_edge(unsigned, unsigned short);
95 void set_gpio_both(unsigned, unsigned short);
96 void set_gpio_data(unsigned, unsigned short);
97 void set_gpio_maska(unsigned, unsigned short);
98 void set_gpio_maskb(unsigned, unsigned short);
99 void set_gpio_toggle(unsigned);
100 void set_gpiop_dir(unsigned, unsigned short);
101 void set_gpiop_inen(unsigned, unsigned short);
102 void set_gpiop_polar(unsigned, unsigned short);
103 void set_gpiop_edge(unsigned, unsigned short);
104 void set_gpiop_both(unsigned, unsigned short);
105 void set_gpiop_data(unsigned, unsigned short);
106 void set_gpiop_maska(unsigned, unsigned short);
107 void set_gpiop_maskb(unsigned, unsigned short);
108 unsigned short get_gpio_dir(unsigned);
109 unsigned short get_gpio_inen(unsigned);
110 unsigned short get_gpio_polar(unsigned);
111 unsigned short get_gpio_edge(unsigned);
112 unsigned short get_gpio_both(unsigned);
113 unsigned short get_gpio_maska(unsigned);
114 unsigned short get_gpio_maskb(unsigned);
115 unsigned short get_gpio_data(unsigned);
116 unsigned short get_gpiop_dir(unsigned);
117 unsigned short get_gpiop_inen(unsigned);
118 unsigned short get_gpiop_polar(unsigned);
119 unsigned short get_gpiop_edge(unsigned);
120 unsigned short get_gpiop_both(unsigned);
121 unsigned short get_gpiop_maska(unsigned);
122 unsigned short get_gpiop_maskb(unsigned);
123 unsigned short get_gpiop_data(unsigned);
124
125 struct gpio_port_t {
126         unsigned short data;
127         unsigned short dummy1;
128         unsigned short data_clear;
129         unsigned short dummy2;
130         unsigned short data_set;
131         unsigned short dummy3;
132         unsigned short toggle;
133         unsigned short dummy4;
134         unsigned short maska;
135         unsigned short dummy5;
136         unsigned short maska_clear;
137         unsigned short dummy6;
138         unsigned short maska_set;
139         unsigned short dummy7;
140         unsigned short maska_toggle;
141         unsigned short dummy8;
142         unsigned short maskb;
143         unsigned short dummy9;
144         unsigned short maskb_clear;
145         unsigned short dummy10;
146         unsigned short maskb_set;
147         unsigned short dummy11;
148         unsigned short maskb_toggle;
149         unsigned short dummy12;
150         unsigned short dir;
151         unsigned short dummy13;
152         unsigned short polar;
153         unsigned short dummy14;
154         unsigned short edge;
155         unsigned short dummy15;
156         unsigned short both;
157         unsigned short dummy16;
158         unsigned short inen;
159 };
160 #endif
161
162 #ifdef BFIN_SPECIAL_GPIO_BANKS
163 void bfin_special_gpio_free(unsigned gpio);
164 int bfin_special_gpio_request(unsigned gpio, const char *label);
165 #endif
166
167 #ifdef CONFIG_PM
168
169 unsigned int bfin_pm_standby_setup(void);
170 void bfin_pm_standby_restore(void);
171
172 void bfin_gpio_pm_hibernate_restore(void);
173 void bfin_gpio_pm_hibernate_suspend(void);
174
175 #ifndef CONFIG_BF54x
176 #define PM_WAKE_RISING  0x1
177 #define PM_WAKE_FALLING 0x2
178 #define PM_WAKE_HIGH    0x4
179 #define PM_WAKE_LOW     0x8
180 #define PM_WAKE_BOTH_EDGES      (PM_WAKE_RISING | PM_WAKE_FALLING)
181 #define PM_WAKE_IGNORE  0xF0
182
183 int gpio_pm_wakeup_request(unsigned gpio, unsigned char type);
184 void gpio_pm_wakeup_free(unsigned gpio);
185
186 struct gpio_port_s {
187         unsigned short data;
188         unsigned short maska;
189         unsigned short maskb;
190         unsigned short dir;
191         unsigned short polar;
192         unsigned short edge;
193         unsigned short both;
194         unsigned short inen;
195
196         unsigned short fer;
197         unsigned short reserved;
198         unsigned short mux;
199 };
200 #endif /*CONFIG_BF54x*/
201 #endif /*CONFIG_PM*/
202 /***********************************************************
203 *
204 * FUNCTIONS: Blackfin GPIO Driver
205 *
206 * INPUTS/OUTPUTS:
207 * gpio - GPIO Number between 0 and MAX_BLACKFIN_GPIOS
208 *
209 *
210 * DESCRIPTION: Blackfin GPIO Driver API
211 *
212 * CAUTION:
213 *************************************************************
214 * MODIFICATION HISTORY :
215 **************************************************************/
216
217 int bfin_gpio_request(unsigned gpio, const char *label);
218 void bfin_gpio_free(unsigned gpio);
219 int bfin_gpio_irq_request(unsigned gpio, const char *label);
220 void bfin_gpio_irq_free(unsigned gpio);
221 int bfin_gpio_direction_input(unsigned gpio);
222 int bfin_gpio_direction_output(unsigned gpio, int value);
223 int bfin_gpio_get_value(unsigned gpio);
224 void bfin_gpio_set_value(unsigned gpio, int value);
225
226 #ifdef CONFIG_GPIOLIB
227 #include <asm-generic/gpio.h>           /* cansleep wrappers */
228
229 static inline int gpio_get_value(unsigned int gpio)
230 {
231         if (gpio < MAX_BLACKFIN_GPIOS)
232                 return bfin_gpio_get_value(gpio);
233         else
234                 return __gpio_get_value(gpio);
235 }
236
237 static inline void gpio_set_value(unsigned int gpio, int value)
238 {
239         if (gpio < MAX_BLACKFIN_GPIOS)
240                 bfin_gpio_set_value(gpio, value);
241         else
242                 __gpio_set_value(gpio, value);
243 }
244
245 static inline int gpio_cansleep(unsigned int gpio)
246 {
247         return __gpio_cansleep(gpio);
248 }
249
250 #else /* !CONFIG_GPIOLIB */
251
252 static inline int gpio_request(unsigned gpio, const char *label)
253 {
254         return bfin_gpio_request(gpio, label);
255 }
256
257 static inline void gpio_free(unsigned gpio)
258 {
259         return bfin_gpio_free(gpio);
260 }
261
262 static inline int gpio_direction_input(unsigned gpio)
263 {
264         return bfin_gpio_direction_input(gpio);
265 }
266
267 static inline int gpio_direction_output(unsigned gpio, int value)
268 {
269         return bfin_gpio_direction_output(gpio, value);
270 }
271
272 static inline int gpio_get_value(unsigned gpio)
273 {
274         return bfin_gpio_get_value(gpio);
275 }
276
277 static inline void gpio_set_value(unsigned gpio, int value)
278 {
279         return bfin_gpio_set_value(gpio, value);
280 }
281
282 #include <asm-generic/gpio.h>           /* cansleep wrappers */
283 #endif  /* !CONFIG_GPIOLIB */
284 #include <asm/irq.h>
285
286 static inline int gpio_to_irq(unsigned gpio)
287 {
288         if (likely(gpio < MAX_BLACKFIN_GPIOS))
289                 return gpio + GPIO_IRQ_BASE;
290
291         return -EINVAL;
292 }
293
294 static inline int irq_to_gpio(unsigned irq)
295 {
296         return (irq - GPIO_IRQ_BASE);
297 }
298
299 #endif /* __ASSEMBLY__ */
300
301 #endif /* __ARCH_BLACKFIN_GPIO_H__ */