blob: 40ddb02565aa0a463000b7a946fa8dfa4acebcef [file] [log] [blame]
Tom Warrenc5e93132011-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.
Tom Warren52a8b822012-05-22 12:19:25 +00005 * Portions Copyright 2011-2012 NVIDIA Corporation
Tom Warrenc5e93132011-04-14 12:09:40 +00006 *
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
Tom Warren52a8b822012-05-22 12:19:25 +000023#ifndef _TEGRA_GPIO_H_
24#define _TEGRA_GPIO_H_
Tom Warrenc5e93132011-04-14 12:09:40 +000025
26/*
Tom Warren4e5ae092011-06-17 06:27:28 +000027 * The Tegra 2x GPIO controller has 224 GPIOs arranged in 7 banks of 4 ports,
Tom Warrenc5e93132011-04-14 12:09:40 +000028 * each with 8 GPIOs.
29 */
Tom Warren4e5ae092011-06-17 06:27:28 +000030#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 */
Tom Warrenc5e93132011-04-14 12:09:40 +000034
35/* GPIO Controller registers for a single bank */
36struct 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
47struct gpio_ctlr {
48 struct gpio_ctlr_bank gpio_bank[TEGRA_GPIO_BANKS];
49};
50
Tom Warren4e5ae092011-06-17 06:27:28 +000051#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
56enum 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};
Tom Warrenc5e93132011-04-14 12:09:40 +0000282
283/*
Tom Warren4e5ae092011-06-17 06:27:28 +0000284 * Tegra2-specific GPIO API
Tom Warrenc5e93132011-04-14 12:09:40 +0000285 */
Tom Warrenc5e93132011-04-14 12:09:40 +0000286
Tom Warren4e5ae092011-06-17 06:27:28 +0000287void gpio_info(void);
288
289#define gpio_status() gpio_info()
Tom Warren52a8b822012-05-22 12:19:25 +0000290#endif /* TEGRA_GPIO_H_ */