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