kirkwood: add save functionality kirkwood_mpp_conf function
[oweals/u-boot.git] / arch / arm / include / asm / arch-tegra2 / gpio.h
1 /*
2  * Copyright (c) 2011, Google Inc. All rights reserved.
3  * See file CREDITS for list of people who contributed to this
4  * project.
5  * Portions Copyright 2011-2012 NVIDIA Corporation
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License as
9  * published by the Free Software Foundation; either version 2 of
10  * the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
20  * MA 02111-1307 USA
21  */
22
23 #ifndef _TEGRA_GPIO_H_
24 #define _TEGRA_GPIO_H_
25
26 /*
27  * The Tegra 2x GPIO controller has 224 GPIOs arranged in 7 banks of 4 ports,
28  * each with 8 GPIOs.
29  */
30 #define TEGRA_GPIO_PORTS        4       /* number of ports per bank */
31 #define TEGRA_GPIO_BANKS        7       /* number of banks */
32 #define MAX_NUM_GPIOS           (TEGRA_GPIO_PORTS * TEGRA_GPIO_BANKS * 8)
33 #define GPIO_NAME_SIZE          20      /* gpio_request max label len */
34
35 /* GPIO Controller registers for a single bank */
36 struct gpio_ctlr_bank {
37         uint gpio_config[TEGRA_GPIO_PORTS];
38         uint gpio_dir_out[TEGRA_GPIO_PORTS];
39         uint gpio_out[TEGRA_GPIO_PORTS];
40         uint gpio_in[TEGRA_GPIO_PORTS];
41         uint gpio_int_status[TEGRA_GPIO_PORTS];
42         uint gpio_int_enable[TEGRA_GPIO_PORTS];
43         uint gpio_int_level[TEGRA_GPIO_PORTS];
44         uint gpio_int_clear[TEGRA_GPIO_PORTS];
45 };
46
47 struct gpio_ctlr {
48         struct gpio_ctlr_bank gpio_bank[TEGRA_GPIO_BANKS];
49 };
50
51 #define GPIO_BANK(x)            ((x) >> 5)
52 #define GPIO_PORT(x)            (((x) >> 3) & 0x3)
53 #define GPIO_FULLPORT(x)        ((x) >> 3)
54 #define GPIO_BIT(x)             ((x) & 0x7)
55
56 enum gpio_pin {
57         GPIO_PA0 = 0,   /* pin 0 */
58         GPIO_PA1,
59         GPIO_PA2,
60         GPIO_PA3,
61         GPIO_PA4,
62         GPIO_PA5,
63         GPIO_PA6,
64         GPIO_PA7,
65         GPIO_PB0,       /* pin 8 */
66         GPIO_PB1,
67         GPIO_PB2,
68         GPIO_PB3,
69         GPIO_PB4,
70         GPIO_PB5,
71         GPIO_PB6,
72         GPIO_PB7,
73         GPIO_PC0,       /* pin 16 */
74         GPIO_PC1,
75         GPIO_PC2,
76         GPIO_PC3,
77         GPIO_PC4,
78         GPIO_PC5,
79         GPIO_PC6,
80         GPIO_PC7,
81         GPIO_PD0,       /* pin 24 */
82         GPIO_PD1,
83         GPIO_PD2,
84         GPIO_PD3,
85         GPIO_PD4,
86         GPIO_PD5,
87         GPIO_PD6,
88         GPIO_PD7,
89         GPIO_PE0,       /* pin 32 */
90         GPIO_PE1,
91         GPIO_PE2,
92         GPIO_PE3,
93         GPIO_PE4,
94         GPIO_PE5,
95         GPIO_PE6,
96         GPIO_PE7,
97         GPIO_PF0,       /* pin 40 */
98         GPIO_PF1,
99         GPIO_PF2,
100         GPIO_PF3,
101         GPIO_PF4,
102         GPIO_PF5,
103         GPIO_PF6,
104         GPIO_PF7,
105         GPIO_PG0,       /* pin 48 */
106         GPIO_PG1,
107         GPIO_PG2,
108         GPIO_PG3,
109         GPIO_PG4,
110         GPIO_PG5,
111         GPIO_PG6,
112         GPIO_PG7,
113         GPIO_PH0,       /* pin 56 */
114         GPIO_PH1,
115         GPIO_PH2,
116         GPIO_PH3,
117         GPIO_PH4,
118         GPIO_PH5,
119         GPIO_PH6,
120         GPIO_PH7,
121         GPIO_PI0,       /* pin 64 */
122         GPIO_PI1,
123         GPIO_PI2,
124         GPIO_PI3,
125         GPIO_PI4,
126         GPIO_PI5,
127         GPIO_PI6,
128         GPIO_PI7,
129         GPIO_PJ0,       /* pin 72 */
130         GPIO_PJ1,
131         GPIO_PJ2,
132         GPIO_PJ3,
133         GPIO_PJ4,
134         GPIO_PJ5,
135         GPIO_PJ6,
136         GPIO_PJ7,
137         GPIO_PK0,       /* pin 80 */
138         GPIO_PK1,
139         GPIO_PK2,
140         GPIO_PK3,
141         GPIO_PK4,
142         GPIO_PK5,
143         GPIO_PK6,
144         GPIO_PK7,
145         GPIO_PL0,       /* pin 88 */
146         GPIO_PL1,
147         GPIO_PL2,
148         GPIO_PL3,
149         GPIO_PL4,
150         GPIO_PL5,
151         GPIO_PL6,
152         GPIO_PL7,
153         GPIO_PM0,       /* pin 96 */
154         GPIO_PM1,
155         GPIO_PM2,
156         GPIO_PM3,
157         GPIO_PM4,
158         GPIO_PM5,
159         GPIO_PM6,
160         GPIO_PM7,
161         GPIO_PN0,       /* pin 104 */
162         GPIO_PN1,
163         GPIO_PN2,
164         GPIO_PN3,
165         GPIO_PN4,
166         GPIO_PN5,
167         GPIO_PN6,
168         GPIO_PN7,
169         GPIO_PO0,       /* pin 112 */
170         GPIO_PO1,
171         GPIO_PO2,
172         GPIO_PO3,
173         GPIO_PO4,
174         GPIO_PO5,
175         GPIO_PO6,
176         GPIO_PO7,
177         GPIO_PP0,       /* pin 120 */
178         GPIO_PP1,
179         GPIO_PP2,
180         GPIO_PP3,
181         GPIO_PP4,
182         GPIO_PP5,
183         GPIO_PP6,
184         GPIO_PP7,
185         GPIO_PQ0,       /* pin 128 */
186         GPIO_PQ1,
187         GPIO_PQ2,
188         GPIO_PQ3,
189         GPIO_PQ4,
190         GPIO_PQ5,
191         GPIO_PQ6,
192         GPIO_PQ7,
193         GPIO_PR0,       /* pin 136 */
194         GPIO_PR1,
195         GPIO_PR2,
196         GPIO_PR3,
197         GPIO_PR4,
198         GPIO_PR5,
199         GPIO_PR6,
200         GPIO_PR7,
201         GPIO_PS0,       /* pin 144 */
202         GPIO_PS1,
203         GPIO_PS2,
204         GPIO_PS3,
205         GPIO_PS4,
206         GPIO_PS5,
207         GPIO_PS6,
208         GPIO_PS7,
209         GPIO_PT0,       /* pin 152 */
210         GPIO_PT1,
211         GPIO_PT2,
212         GPIO_PT3,
213         GPIO_PT4,
214         GPIO_PT5,
215         GPIO_PT6,
216         GPIO_PT7,
217         GPIO_PU0,       /* pin 160 */
218         GPIO_PU1,
219         GPIO_PU2,
220         GPIO_PU3,
221         GPIO_PU4,
222         GPIO_PU5,
223         GPIO_PU6,
224         GPIO_PU7,
225         GPIO_PV0,       /* pin 168 */
226         GPIO_PV1,
227         GPIO_PV2,
228         GPIO_PV3,
229         GPIO_PV4,
230         GPIO_PV5,
231         GPIO_PV6,
232         GPIO_PV7,
233         GPIO_PW0,       /* pin 176 */
234         GPIO_PW1,
235         GPIO_PW2,
236         GPIO_PW3,
237         GPIO_PW4,
238         GPIO_PW5,
239         GPIO_PW6,
240         GPIO_PW7,
241         GPIO_PX0,       /* pin 184 */
242         GPIO_PX1,
243         GPIO_PX2,
244         GPIO_PX3,
245         GPIO_PX4,
246         GPIO_PX5,
247         GPIO_PX6,
248         GPIO_PX7,
249         GPIO_PY0,       /* pin 192 */
250         GPIO_PY1,
251         GPIO_PY2,
252         GPIO_PY3,
253         GPIO_PY4,
254         GPIO_PY5,
255         GPIO_PY6,
256         GPIO_PY7,
257         GPIO_PZ0,       /* pin 200 */
258         GPIO_PZ1,
259         GPIO_PZ2,
260         GPIO_PZ3,
261         GPIO_PZ4,
262         GPIO_PZ5,
263         GPIO_PZ6,
264         GPIO_PZ7,
265         GPIO_PAA0,      /* pin 208 */
266         GPIO_PAA1,
267         GPIO_PAA2,
268         GPIO_PAA3,
269         GPIO_PAA4,
270         GPIO_PAA5,
271         GPIO_PAA6,
272         GPIO_PAA7,
273         GPIO_PBB0,      /* pin 216 */
274         GPIO_PBB1,
275         GPIO_PBB2,
276         GPIO_PBB3,
277         GPIO_PBB4,
278         GPIO_PBB5,
279         GPIO_PBB6,
280         GPIO_PBB7,      /* pin 223 */
281 };
282
283 /*
284  * Tegra2-specific GPIO API
285  */
286
287 void gpio_info(void);
288
289 #define gpio_status()   gpio_info()
290 #endif  /* TEGRA_GPIO_H_ */