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