2 * Copyright (C) 2010 NVIDIA Corporation
4 * This software is licensed under the terms of the GNU General Public
5 * License version 2, as published by the Free Software Foundation, and
6 * may be copied, distributed, and modified under those terms.
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
15 #include <linux/kernel.h>
16 #include <linux/init.h>
17 #include <linux/gpio.h>
19 #include <mach/pinmux.h>
20 #include <mach/pinmux-t2.h>
22 #include "gpio-names.h"
23 #include "board-seaboard.h"
25 #define DEFAULT_DRIVE(_name) \
27 .pingroup = TEGRA_DRIVE_PINGROUP_##_name, \
28 .hsm = TEGRA_HSM_DISABLE, \
29 .schmitt = TEGRA_SCHMITT_ENABLE, \
30 .drive = TEGRA_DRIVE_DIV_1, \
31 .pull_down = TEGRA_PULL_31, \
32 .pull_up = TEGRA_PULL_31, \
33 .slew_rising = TEGRA_SLEW_SLOWEST, \
34 .slew_falling = TEGRA_SLEW_SLOWEST, \
37 static __initdata
struct tegra_drive_pingroup_config seaboard_drive_pinmux
[] = {
41 static __initdata
struct tegra_pingroup_config seaboard_pinmux
[] = {
42 {TEGRA_PINGROUP_ATA
, TEGRA_MUX_IDE
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
43 {TEGRA_PINGROUP_ATB
, TEGRA_MUX_SDIO4
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
44 {TEGRA_PINGROUP_ATC
, TEGRA_MUX_NAND
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
45 {TEGRA_PINGROUP_ATD
, TEGRA_MUX_GMI
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
46 {TEGRA_PINGROUP_ATE
, TEGRA_MUX_GMI
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_TRISTATE
},
47 {TEGRA_PINGROUP_CDEV1
, TEGRA_MUX_PLLA_OUT
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
48 {TEGRA_PINGROUP_CDEV2
, TEGRA_MUX_PLLP_OUT4
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
49 {TEGRA_PINGROUP_CRTP
, TEGRA_MUX_CRT
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_TRISTATE
},
50 {TEGRA_PINGROUP_CSUS
, TEGRA_MUX_VI_SENSOR_CLK
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_TRISTATE
},
51 {TEGRA_PINGROUP_DAP1
, TEGRA_MUX_DAP1
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
52 {TEGRA_PINGROUP_DAP2
, TEGRA_MUX_DAP2
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
53 {TEGRA_PINGROUP_DAP3
, TEGRA_MUX_DAP3
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_TRISTATE
},
54 {TEGRA_PINGROUP_DAP4
, TEGRA_MUX_DAP4
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
55 {TEGRA_PINGROUP_DDC
, TEGRA_MUX_RSVD2
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_TRISTATE
},
56 {TEGRA_PINGROUP_DTA
, TEGRA_MUX_VI
, TEGRA_PUPD_PULL_DOWN
, TEGRA_TRI_NORMAL
},
57 {TEGRA_PINGROUP_DTB
, TEGRA_MUX_VI
, TEGRA_PUPD_PULL_DOWN
, TEGRA_TRI_NORMAL
},
58 {TEGRA_PINGROUP_DTC
, TEGRA_MUX_VI
, TEGRA_PUPD_PULL_DOWN
, TEGRA_TRI_NORMAL
},
59 {TEGRA_PINGROUP_DTD
, TEGRA_MUX_VI
, TEGRA_PUPD_PULL_DOWN
, TEGRA_TRI_NORMAL
},
60 {TEGRA_PINGROUP_DTE
, TEGRA_MUX_VI
, TEGRA_PUPD_PULL_DOWN
, TEGRA_TRI_TRISTATE
},
61 {TEGRA_PINGROUP_DTF
, TEGRA_MUX_I2C3
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
62 {TEGRA_PINGROUP_GMA
, TEGRA_MUX_SDIO4
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
63 {TEGRA_PINGROUP_GMB
, TEGRA_MUX_GMI
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_TRISTATE
},
64 {TEGRA_PINGROUP_GMC
, TEGRA_MUX_UARTD
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
65 {TEGRA_PINGROUP_GMD
, TEGRA_MUX_SFLASH
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
66 {TEGRA_PINGROUP_GME
, TEGRA_MUX_SDIO4
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
67 {TEGRA_PINGROUP_GPU
, TEGRA_MUX_PWM
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
68 {TEGRA_PINGROUP_GPU7
, TEGRA_MUX_RTCK
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
69 {TEGRA_PINGROUP_GPV
, TEGRA_MUX_PCIE
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_TRISTATE
},
70 {TEGRA_PINGROUP_HDINT
, TEGRA_MUX_HDMI
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_TRISTATE
},
71 {TEGRA_PINGROUP_I2CP
, TEGRA_MUX_I2C
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
72 {TEGRA_PINGROUP_IRRX
, TEGRA_MUX_UARTB
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
73 {TEGRA_PINGROUP_IRTX
, TEGRA_MUX_UARTB
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
74 {TEGRA_PINGROUP_KBCA
, TEGRA_MUX_KBC
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_NORMAL
},
75 {TEGRA_PINGROUP_KBCB
, TEGRA_MUX_KBC
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_NORMAL
},
76 {TEGRA_PINGROUP_KBCC
, TEGRA_MUX_KBC
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_NORMAL
},
77 {TEGRA_PINGROUP_KBCD
, TEGRA_MUX_KBC
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_NORMAL
},
78 {TEGRA_PINGROUP_KBCE
, TEGRA_MUX_KBC
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_NORMAL
},
79 {TEGRA_PINGROUP_KBCF
, TEGRA_MUX_KBC
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_NORMAL
},
80 {TEGRA_PINGROUP_LCSN
, TEGRA_MUX_RSVD4
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_TRISTATE
},
81 {TEGRA_PINGROUP_LD0
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
82 {TEGRA_PINGROUP_LD1
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
83 {TEGRA_PINGROUP_LD10
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
84 {TEGRA_PINGROUP_LD11
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
85 {TEGRA_PINGROUP_LD12
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
86 {TEGRA_PINGROUP_LD13
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
87 {TEGRA_PINGROUP_LD14
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
88 {TEGRA_PINGROUP_LD15
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
89 {TEGRA_PINGROUP_LD16
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
90 {TEGRA_PINGROUP_LD17
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
91 {TEGRA_PINGROUP_LD2
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
92 {TEGRA_PINGROUP_LD3
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
93 {TEGRA_PINGROUP_LD4
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
94 {TEGRA_PINGROUP_LD5
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
95 {TEGRA_PINGROUP_LD6
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
96 {TEGRA_PINGROUP_LD7
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
97 {TEGRA_PINGROUP_LD8
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
98 {TEGRA_PINGROUP_LD9
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
99 {TEGRA_PINGROUP_LDC
, TEGRA_MUX_RSVD4
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_TRISTATE
},
100 {TEGRA_PINGROUP_LDI
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
101 {TEGRA_PINGROUP_LHP0
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
102 {TEGRA_PINGROUP_LHP1
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
103 {TEGRA_PINGROUP_LHP2
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
104 {TEGRA_PINGROUP_LHS
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
105 {TEGRA_PINGROUP_LM0
, TEGRA_MUX_RSVD4
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
106 {TEGRA_PINGROUP_LM1
, TEGRA_MUX_CRT
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_TRISTATE
},
107 {TEGRA_PINGROUP_LPP
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
108 {TEGRA_PINGROUP_LPW0
, TEGRA_MUX_HDMI
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
109 {TEGRA_PINGROUP_LPW1
, TEGRA_MUX_RSVD4
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_TRISTATE
},
110 {TEGRA_PINGROUP_LPW2
, TEGRA_MUX_HDMI
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
111 {TEGRA_PINGROUP_LSC0
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
112 {TEGRA_PINGROUP_LSC1
, TEGRA_MUX_HDMI
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_TRISTATE
},
113 {TEGRA_PINGROUP_LSCK
, TEGRA_MUX_HDMI
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_TRISTATE
},
114 {TEGRA_PINGROUP_LSDA
, TEGRA_MUX_HDMI
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_TRISTATE
},
115 {TEGRA_PINGROUP_LSDI
, TEGRA_MUX_RSVD4
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_TRISTATE
},
116 {TEGRA_PINGROUP_LSPI
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
117 {TEGRA_PINGROUP_LVP0
, TEGRA_MUX_RSVD4
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_TRISTATE
},
118 {TEGRA_PINGROUP_LVP1
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
119 {TEGRA_PINGROUP_LVS
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
120 {TEGRA_PINGROUP_OWC
, TEGRA_MUX_RSVD2
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_TRISTATE
},
121 {TEGRA_PINGROUP_PMC
, TEGRA_MUX_PWR_ON
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
122 {TEGRA_PINGROUP_PTA
, TEGRA_MUX_HDMI
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
123 {TEGRA_PINGROUP_RM
, TEGRA_MUX_I2C
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
124 {TEGRA_PINGROUP_SDB
, TEGRA_MUX_SDIO3
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
125 {TEGRA_PINGROUP_SDC
, TEGRA_MUX_SDIO3
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
126 {TEGRA_PINGROUP_SDD
, TEGRA_MUX_SDIO3
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
127 {TEGRA_PINGROUP_SDIO1
, TEGRA_MUX_SDIO1
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_NORMAL
},
128 {TEGRA_PINGROUP_SLXA
, TEGRA_MUX_PCIE
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_TRISTATE
},
129 {TEGRA_PINGROUP_SLXC
, TEGRA_MUX_SPDIF
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_TRISTATE
},
130 {TEGRA_PINGROUP_SLXD
, TEGRA_MUX_SPDIF
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
131 {TEGRA_PINGROUP_SLXK
, TEGRA_MUX_PCIE
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
132 {TEGRA_PINGROUP_SPDI
, TEGRA_MUX_RSVD2
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
133 {TEGRA_PINGROUP_SPDO
, TEGRA_MUX_RSVD2
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
134 {TEGRA_PINGROUP_SPIA
, TEGRA_MUX_GMI
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_TRISTATE
},
135 {TEGRA_PINGROUP_SPIB
, TEGRA_MUX_GMI
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_TRISTATE
},
136 {TEGRA_PINGROUP_SPIC
, TEGRA_MUX_GMI
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_NORMAL
},
137 {TEGRA_PINGROUP_SPID
, TEGRA_MUX_SPI1
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_TRISTATE
},
138 {TEGRA_PINGROUP_SPIE
, TEGRA_MUX_SPI1
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_TRISTATE
},
139 {TEGRA_PINGROUP_SPIF
, TEGRA_MUX_SPI1
, TEGRA_PUPD_PULL_DOWN
, TEGRA_TRI_TRISTATE
},
140 {TEGRA_PINGROUP_SPIG
, TEGRA_MUX_SPI2_ALT
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_TRISTATE
},
141 {TEGRA_PINGROUP_SPIH
, TEGRA_MUX_SPI2_ALT
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_TRISTATE
},
142 {TEGRA_PINGROUP_UAA
, TEGRA_MUX_ULPI
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_NORMAL
},
143 {TEGRA_PINGROUP_UAB
, TEGRA_MUX_ULPI
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_NORMAL
},
144 {TEGRA_PINGROUP_UAC
, TEGRA_MUX_RSVD2
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
145 {TEGRA_PINGROUP_UAD
, TEGRA_MUX_IRDA
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
146 {TEGRA_PINGROUP_UCA
, TEGRA_MUX_UARTC
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
147 {TEGRA_PINGROUP_UCB
, TEGRA_MUX_UARTC
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
148 {TEGRA_PINGROUP_UDA
, TEGRA_MUX_ULPI
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
149 {TEGRA_PINGROUP_CK32
, TEGRA_MUX_NONE
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
150 {TEGRA_PINGROUP_DDRC
, TEGRA_MUX_NONE
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
151 {TEGRA_PINGROUP_PMCA
, TEGRA_MUX_NONE
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
152 {TEGRA_PINGROUP_PMCB
, TEGRA_MUX_NONE
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
153 {TEGRA_PINGROUP_PMCC
, TEGRA_MUX_NONE
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
154 {TEGRA_PINGROUP_PMCD
, TEGRA_MUX_NONE
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
155 {TEGRA_PINGROUP_PMCE
, TEGRA_MUX_NONE
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
156 {TEGRA_PINGROUP_XM2C
, TEGRA_MUX_NONE
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
157 {TEGRA_PINGROUP_XM2D
, TEGRA_MUX_NONE
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
163 static struct tegra_gpio_table gpio_table
[] = {
164 { .gpio
= TEGRA_GPIO_SD2_CD
, .enable
= true },
165 { .gpio
= TEGRA_GPIO_SD2_WP
, .enable
= true },
166 { .gpio
= TEGRA_GPIO_SD2_POWER
, .enable
= true },
167 { .gpio
= TEGRA_GPIO_LIDSWITCH
, .enable
= true },
168 { .gpio
= TEGRA_GPIO_POWERKEY
, .enable
= true },
169 { .gpio
= TEGRA_GPIO_ISL29018_IRQ
, .enable
= true },
170 { .gpio
= TEGRA_GPIO_CDC_IRQ
, .enable
= true },
171 { .gpio
= TEGRA_GPIO_USB1
, .enable
= true },
174 void __init
seaboard_pinmux_init(void)
176 tegra_pinmux_config_table(seaboard_pinmux
, ARRAY_SIZE(seaboard_pinmux
));
178 tegra_drive_pinmux_config_table(seaboard_drive_pinmux
,
179 ARRAY_SIZE(seaboard_drive_pinmux
));
181 tegra_gpio_config(gpio_table
, ARRAY_SIZE(gpio_table
));