blob: 7480cfa7e2d64304c58ff924b05fbfc385ad8bf6 [file] [log] [blame]
Bryan Wu1394f032007-05-06 14:50:22 -07001/*
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#endif
148
149#ifdef BF537_FAMILY
150#define MAX_BLACKFIN_GPIOS 48
Bryan Wu1394f032007-05-06 14:50:22 -0700151
152#define GPIO_PF0 0
153#define GPIO_PF1 1
154#define GPIO_PF2 2
155#define GPIO_PF3 3
156#define GPIO_PF4 4
157#define GPIO_PF5 5
158#define GPIO_PF6 6
159#define GPIO_PF7 7
160#define GPIO_PF8 8
161#define GPIO_PF9 9
162#define GPIO_PF10 10
163#define GPIO_PF11 11
164#define GPIO_PF12 12
165#define GPIO_PF13 13
166#define GPIO_PF14 14
167#define GPIO_PF15 15
168#define GPIO_PG0 16
169#define GPIO_PG1 17
170#define GPIO_PG2 18
171#define GPIO_PG3 19
172#define GPIO_PG4 20
173#define GPIO_PG5 21
174#define GPIO_PG6 22
175#define GPIO_PG7 23
176#define GPIO_PG8 24
177#define GPIO_PG9 25
178#define GPIO_PG10 26
179#define GPIO_PG11 27
180#define GPIO_PG12 28
181#define GPIO_PG13 29
182#define GPIO_PG14 30
183#define GPIO_PG15 31
184#define GPIO_PH0 32
185#define GPIO_PH1 33
186#define GPIO_PH2 34
187#define GPIO_PH3 35
188#define GPIO_PH4 36
189#define GPIO_PH5 37
190#define GPIO_PH6 38
191#define GPIO_PH7 39
192#define GPIO_PH8 40
193#define GPIO_PH9 41
194#define GPIO_PH10 42
195#define GPIO_PH11 43
196#define GPIO_PH12 44
197#define GPIO_PH13 45
198#define GPIO_PH14 46
199#define GPIO_PH15 47
200
Michael Hennerich67840272007-05-21 18:09:18 +0800201#define PORT_F GPIO_PF0
202#define PORT_G GPIO_PG0
203#define PORT_H GPIO_PH0
204
Bryan Wu1394f032007-05-06 14:50:22 -0700205#endif
206
Roy Huang24a07a12007-07-12 22:41:45 +0800207#ifdef BF548_FAMILY
208#include <asm-blackfin/mach-bf548/gpio.h>
209#endif
210
Bryan Wu1394f032007-05-06 14:50:22 -0700211#ifdef BF561_FAMILY
212#define MAX_BLACKFIN_GPIOS 48
Michael Hennerich5610db62007-07-12 12:32:52 +0800213
214#define GPIO_PF0 0
215#define GPIO_PF1 1
216#define GPIO_PF2 2
217#define GPIO_PF3 3
218#define GPIO_PF4 4
219#define GPIO_PF5 5
220#define GPIO_PF6 6
221#define GPIO_PF7 7
222#define GPIO_PF8 8
223#define GPIO_PF9 9
224#define GPIO_PF10 10
225#define GPIO_PF11 11
226#define GPIO_PF12 12
227#define GPIO_PF13 13
228#define GPIO_PF14 14
229#define GPIO_PF15 15
230#define GPIO_PF16 16
231#define GPIO_PF17 17
232#define GPIO_PF18 18
233#define GPIO_PF19 19
234#define GPIO_PF20 20
235#define GPIO_PF21 21
236#define GPIO_PF22 22
237#define GPIO_PF23 23
238#define GPIO_PF24 24
239#define GPIO_PF25 25
240#define GPIO_PF26 26
241#define GPIO_PF27 27
242#define GPIO_PF28 28
243#define GPIO_PF29 29
244#define GPIO_PF30 30
245#define GPIO_PF31 31
246#define GPIO_PF32 32
247#define GPIO_PF33 33
248#define GPIO_PF34 34
249#define GPIO_PF35 35
250#define GPIO_PF36 36
251#define GPIO_PF37 37
252#define GPIO_PF38 38
253#define GPIO_PF39 39
254#define GPIO_PF40 40
255#define GPIO_PF41 41
256#define GPIO_PF42 42
257#define GPIO_PF43 43
258#define GPIO_PF44 44
259#define GPIO_PF45 45
260#define GPIO_PF46 46
261#define GPIO_PF47 47
262
Michael Hennerich67840272007-05-21 18:09:18 +0800263#define PORT_FIO0 GPIO_0
264#define PORT_FIO1 GPIO_16
265#define PORT_FIO2 GPIO_32
Bryan Wu1394f032007-05-06 14:50:22 -0700266#endif
267
268#ifndef __ASSEMBLY__
269
270/***********************************************************
271*
272* FUNCTIONS: Blackfin General Purpose Ports Access Functions
273*
274* INPUTS/OUTPUTS:
275* gpio - GPIO Number between 0 and MAX_BLACKFIN_GPIOS
276*
277*
278* DESCRIPTION: These functions abstract direct register access
279* to Blackfin processor General Purpose
280* Ports Regsiters
281*
282* CAUTION: These functions do not belong to the GPIO Driver API
283*************************************************************
284* MODIFICATION HISTORY :
285**************************************************************/
286
Michael Hennerichcefe6582007-07-02 11:45:50 +0800287#ifndef BF548_FAMILY
Bryan Wu1394f032007-05-06 14:50:22 -0700288void set_gpio_dir(unsigned short, unsigned short);
289void set_gpio_inen(unsigned short, unsigned short);
290void set_gpio_polar(unsigned short, unsigned short);
291void set_gpio_edge(unsigned short, unsigned short);
292void set_gpio_both(unsigned short, unsigned short);
293void set_gpio_data(unsigned short, unsigned short);
294void set_gpio_maska(unsigned short, unsigned short);
295void set_gpio_maskb(unsigned short, unsigned short);
296void set_gpio_toggle(unsigned short);
297void set_gpiop_dir(unsigned short, unsigned short);
298void set_gpiop_inen(unsigned short, unsigned short);
299void set_gpiop_polar(unsigned short, unsigned short);
300void set_gpiop_edge(unsigned short, unsigned short);
301void set_gpiop_both(unsigned short, unsigned short);
302void set_gpiop_data(unsigned short, unsigned short);
303void set_gpiop_maska(unsigned short, unsigned short);
304void set_gpiop_maskb(unsigned short, unsigned short);
305unsigned short get_gpio_dir(unsigned short);
306unsigned short get_gpio_inen(unsigned short);
307unsigned short get_gpio_polar(unsigned short);
308unsigned short get_gpio_edge(unsigned short);
309unsigned short get_gpio_both(unsigned short);
310unsigned short get_gpio_maska(unsigned short);
311unsigned short get_gpio_maskb(unsigned short);
312unsigned short get_gpio_data(unsigned short);
313unsigned short get_gpiop_dir(unsigned short);
314unsigned short get_gpiop_inen(unsigned short);
315unsigned short get_gpiop_polar(unsigned short);
316unsigned short get_gpiop_edge(unsigned short);
317unsigned short get_gpiop_both(unsigned short);
318unsigned short get_gpiop_maska(unsigned short);
319unsigned short get_gpiop_maskb(unsigned short);
320unsigned short get_gpiop_data(unsigned short);
321
322struct gpio_port_t {
323 unsigned short data;
324 unsigned short dummy1;
325 unsigned short data_clear;
326 unsigned short dummy2;
327 unsigned short data_set;
328 unsigned short dummy3;
329 unsigned short toggle;
330 unsigned short dummy4;
331 unsigned short maska;
332 unsigned short dummy5;
333 unsigned short maska_clear;
334 unsigned short dummy6;
335 unsigned short maska_set;
336 unsigned short dummy7;
337 unsigned short maska_toggle;
338 unsigned short dummy8;
339 unsigned short maskb;
340 unsigned short dummy9;
341 unsigned short maskb_clear;
342 unsigned short dummy10;
343 unsigned short maskb_set;
344 unsigned short dummy11;
345 unsigned short maskb_toggle;
346 unsigned short dummy12;
347 unsigned short dir;
348 unsigned short dummy13;
349 unsigned short polar;
350 unsigned short dummy14;
351 unsigned short edge;
352 unsigned short dummy15;
353 unsigned short both;
354 unsigned short dummy16;
355 unsigned short inen;
356};
Roy Huang24a07a12007-07-12 22:41:45 +0800357#endif
Bryan Wu1394f032007-05-06 14:50:22 -0700358
359#ifdef CONFIG_PM
360#define PM_WAKE_RISING 0x1
361#define PM_WAKE_FALLING 0x2
362#define PM_WAKE_HIGH 0x4
363#define PM_WAKE_LOW 0x8
364#define PM_WAKE_BOTH_EDGES (PM_WAKE_RISING | PM_WAKE_FALLING)
365
366int gpio_pm_wakeup_request(unsigned short gpio, unsigned char type);
367void gpio_pm_wakeup_free(unsigned short gpio);
368unsigned int gpio_pm_setup(void);
369void gpio_pm_restore(void);
370
371struct gpio_port_s {
372 unsigned short data;
373 unsigned short data_clear;
374 unsigned short data_set;
375 unsigned short toggle;
376 unsigned short maska;
377 unsigned short maska_clear;
378 unsigned short maska_set;
379 unsigned short maska_toggle;
380 unsigned short maskb;
381 unsigned short maskb_clear;
382 unsigned short maskb_set;
383 unsigned short maskb_toggle;
384 unsigned short dir;
385 unsigned short polar;
386 unsigned short edge;
387 unsigned short both;
388 unsigned short inen;
389
390 unsigned short fer;
Michael Hennerich581d62a2007-06-14 13:30:23 +0800391 unsigned short reserved;
Bryan Wu1394f032007-05-06 14:50:22 -0700392};
393#endif /*CONFIG_PM*/
394
395/***********************************************************
396*
397* FUNCTIONS: Blackfin GPIO Driver
398*
399* INPUTS/OUTPUTS:
400* gpio - GPIO Number between 0 and MAX_BLACKFIN_GPIOS
401*
402*
403* DESCRIPTION: Blackfin GPIO Driver API
404*
405* CAUTION:
406*************************************************************
407* MODIFICATION HISTORY :
408**************************************************************/
409
410int gpio_request(unsigned short, const char *);
411void gpio_free(unsigned short);
412
413void gpio_set_value(unsigned short gpio, unsigned short arg);
414unsigned short gpio_get_value(unsigned short gpio);
415
Michael Hennerichcefe6582007-07-02 11:45:50 +0800416#ifndef BF548_FAMILY
Bryan Wu1394f032007-05-06 14:50:22 -0700417#define gpio_get_value(gpio) get_gpio_data(gpio)
418#define gpio_set_value(gpio, value) set_gpio_data(gpio, value)
Michael Hennerichcefe6582007-07-02 11:45:50 +0800419#endif
Bryan Wu1394f032007-05-06 14:50:22 -0700420
421void gpio_direction_input(unsigned short gpio);
422void gpio_direction_output(unsigned short gpio);
423
424#endif /* __ASSEMBLY__ */
425
426#endif /* __ARCH_BLACKFIN_GPIO_H__ */