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