2 * arch/arm/mach-tegra/board-trimslice-pinmux.c
4 * Copyright (C) 2011 CompuLab, Ltd.
6 * This software is licensed under the terms of the GNU General Public
7 * License version 2, as published by the Free Software Foundation, and
8 * may be copied, distributed, and modified under those terms.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
16 #include <linux/gpio.h>
17 #include <linux/kernel.h>
18 #include <linux/init.h>
21 #include <mach/pinmux.h>
22 #include <mach/pinmux-tegra20.h>
24 #include "gpio-names.h"
25 #include "board-pinmux.h"
26 #include "board-trimslice.h"
28 static struct tegra_pingroup_config trimslice_pinmux
[] = {
29 {TEGRA_PINGROUP_ATA
, TEGRA_MUX_IDE
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_TRISTATE
},
30 {TEGRA_PINGROUP_ATB
, TEGRA_MUX_SDIO4
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
31 {TEGRA_PINGROUP_ATC
, TEGRA_MUX_NAND
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_TRISTATE
},
32 {TEGRA_PINGROUP_ATD
, TEGRA_MUX_GMI
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_TRISTATE
},
33 {TEGRA_PINGROUP_ATE
, TEGRA_MUX_GMI
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_TRISTATE
},
34 {TEGRA_PINGROUP_CDEV1
, TEGRA_MUX_PLLA_OUT
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
35 {TEGRA_PINGROUP_CDEV2
, TEGRA_MUX_PLLP_OUT4
, TEGRA_PUPD_PULL_DOWN
, TEGRA_TRI_TRISTATE
},
36 {TEGRA_PINGROUP_CRTP
, TEGRA_MUX_CRT
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_TRISTATE
},
37 {TEGRA_PINGROUP_CSUS
, TEGRA_MUX_VI_SENSOR_CLK
, TEGRA_PUPD_PULL_DOWN
, TEGRA_TRI_TRISTATE
},
38 {TEGRA_PINGROUP_DAP1
, TEGRA_MUX_DAP1
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
39 {TEGRA_PINGROUP_DAP2
, TEGRA_MUX_DAP2
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_TRISTATE
},
40 {TEGRA_PINGROUP_DAP3
, TEGRA_MUX_DAP3
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_TRISTATE
},
41 {TEGRA_PINGROUP_DAP4
, TEGRA_MUX_DAP4
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_TRISTATE
},
42 {TEGRA_PINGROUP_DDC
, TEGRA_MUX_I2C2
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_NORMAL
},
43 {TEGRA_PINGROUP_DTA
, TEGRA_MUX_VI
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_TRISTATE
},
44 {TEGRA_PINGROUP_DTB
, TEGRA_MUX_VI
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_TRISTATE
},
45 {TEGRA_PINGROUP_DTC
, TEGRA_MUX_VI
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_TRISTATE
},
46 {TEGRA_PINGROUP_DTD
, TEGRA_MUX_VI
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_TRISTATE
},
47 {TEGRA_PINGROUP_DTE
, TEGRA_MUX_VI
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_TRISTATE
},
48 {TEGRA_PINGROUP_DTF
, TEGRA_MUX_I2C3
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_NORMAL
},
49 {TEGRA_PINGROUP_GMA
, TEGRA_MUX_SDIO4
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
50 {TEGRA_PINGROUP_GMB
, TEGRA_MUX_NAND
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_TRISTATE
},
51 {TEGRA_PINGROUP_GMC
, TEGRA_MUX_SFLASH
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
52 {TEGRA_PINGROUP_GMD
, TEGRA_MUX_SFLASH
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
53 {TEGRA_PINGROUP_GME
, TEGRA_MUX_GMI
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_TRISTATE
},
54 {TEGRA_PINGROUP_GPU
, TEGRA_MUX_UARTA
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
55 {TEGRA_PINGROUP_GPU7
, TEGRA_MUX_RTCK
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
56 {TEGRA_PINGROUP_GPV
, TEGRA_MUX_PCIE
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
57 {TEGRA_PINGROUP_HDINT
, TEGRA_MUX_HDMI
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_TRISTATE
},
58 {TEGRA_PINGROUP_I2CP
, TEGRA_MUX_I2C
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_TRISTATE
},
59 {TEGRA_PINGROUP_IRRX
, TEGRA_MUX_UARTB
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_TRISTATE
},
60 {TEGRA_PINGROUP_IRTX
, TEGRA_MUX_UARTB
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_TRISTATE
},
61 {TEGRA_PINGROUP_KBCA
, TEGRA_MUX_KBC
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_TRISTATE
},
62 {TEGRA_PINGROUP_KBCB
, TEGRA_MUX_KBC
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_TRISTATE
},
63 {TEGRA_PINGROUP_KBCC
, TEGRA_MUX_KBC
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_TRISTATE
},
64 {TEGRA_PINGROUP_KBCD
, TEGRA_MUX_KBC
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_TRISTATE
},
65 {TEGRA_PINGROUP_KBCE
, TEGRA_MUX_KBC
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_TRISTATE
},
66 {TEGRA_PINGROUP_KBCF
, TEGRA_MUX_KBC
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_TRISTATE
},
67 {TEGRA_PINGROUP_LCSN
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_TRISTATE
},
68 {TEGRA_PINGROUP_LD0
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_PULL_DOWN
, TEGRA_TRI_NORMAL
},
69 {TEGRA_PINGROUP_LD1
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_PULL_DOWN
, TEGRA_TRI_NORMAL
},
70 {TEGRA_PINGROUP_LD2
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_PULL_DOWN
, TEGRA_TRI_NORMAL
},
71 {TEGRA_PINGROUP_LD3
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_PULL_DOWN
, TEGRA_TRI_NORMAL
},
72 {TEGRA_PINGROUP_LD4
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_PULL_DOWN
, TEGRA_TRI_NORMAL
},
73 {TEGRA_PINGROUP_LD5
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_PULL_DOWN
, TEGRA_TRI_NORMAL
},
74 {TEGRA_PINGROUP_LD6
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_PULL_DOWN
, TEGRA_TRI_NORMAL
},
75 {TEGRA_PINGROUP_LD7
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_PULL_DOWN
, TEGRA_TRI_NORMAL
},
76 {TEGRA_PINGROUP_LD8
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_PULL_DOWN
, TEGRA_TRI_NORMAL
},
77 {TEGRA_PINGROUP_LD9
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_PULL_DOWN
, TEGRA_TRI_NORMAL
},
78 {TEGRA_PINGROUP_LD10
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_PULL_DOWN
, TEGRA_TRI_NORMAL
},
79 {TEGRA_PINGROUP_LD11
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_PULL_DOWN
, TEGRA_TRI_NORMAL
},
80 {TEGRA_PINGROUP_LD12
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_PULL_DOWN
, TEGRA_TRI_NORMAL
},
81 {TEGRA_PINGROUP_LD13
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_PULL_DOWN
, TEGRA_TRI_NORMAL
},
82 {TEGRA_PINGROUP_LD14
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_PULL_DOWN
, TEGRA_TRI_NORMAL
},
83 {TEGRA_PINGROUP_LD15
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_PULL_DOWN
, TEGRA_TRI_NORMAL
},
84 {TEGRA_PINGROUP_LD16
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_PULL_DOWN
, TEGRA_TRI_NORMAL
},
85 {TEGRA_PINGROUP_LD17
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_PULL_DOWN
, TEGRA_TRI_NORMAL
},
86 {TEGRA_PINGROUP_LDC
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_TRISTATE
},
87 {TEGRA_PINGROUP_LDI
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_PULL_DOWN
, TEGRA_TRI_NORMAL
},
88 {TEGRA_PINGROUP_LHP0
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_PULL_DOWN
, TEGRA_TRI_NORMAL
},
89 {TEGRA_PINGROUP_LHP1
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_PULL_DOWN
, TEGRA_TRI_NORMAL
},
90 {TEGRA_PINGROUP_LHP2
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_PULL_DOWN
, TEGRA_TRI_NORMAL
},
91 {TEGRA_PINGROUP_LHS
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_NORMAL
},
92 {TEGRA_PINGROUP_LM0
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_NORMAL
},
93 {TEGRA_PINGROUP_LM1
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_TRISTATE
},
94 {TEGRA_PINGROUP_LPP
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_PULL_DOWN
, TEGRA_TRI_NORMAL
},
95 {TEGRA_PINGROUP_LPW0
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_NORMAL
},
96 {TEGRA_PINGROUP_LPW1
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_TRISTATE
},
97 {TEGRA_PINGROUP_LPW2
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_NORMAL
},
98 {TEGRA_PINGROUP_LSC0
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_NORMAL
},
99 {TEGRA_PINGROUP_LSC1
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_TRISTATE
},
100 {TEGRA_PINGROUP_LSCK
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_TRISTATE
},
101 {TEGRA_PINGROUP_LSDA
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_TRISTATE
},
102 {TEGRA_PINGROUP_LSDI
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_TRISTATE
},
103 {TEGRA_PINGROUP_LSPI
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_NORMAL
},
104 {TEGRA_PINGROUP_LVP0
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_TRISTATE
},
105 {TEGRA_PINGROUP_LVP1
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_PULL_DOWN
, TEGRA_TRI_NORMAL
},
106 {TEGRA_PINGROUP_LVS
, TEGRA_MUX_DISPLAYA
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_NORMAL
},
107 {TEGRA_PINGROUP_OWC
, TEGRA_MUX_RSVD2
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_TRISTATE
},
108 {TEGRA_PINGROUP_PMC
, TEGRA_MUX_PWR_ON
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_TRISTATE
},
109 {TEGRA_PINGROUP_PTA
, TEGRA_MUX_GMI
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_TRISTATE
},
110 {TEGRA_PINGROUP_RM
, TEGRA_MUX_I2C
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_NORMAL
},
111 {TEGRA_PINGROUP_SDB
, TEGRA_MUX_PWM
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
112 {TEGRA_PINGROUP_SDC
, TEGRA_MUX_PWM
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_NORMAL
},
113 {TEGRA_PINGROUP_SDD
, TEGRA_MUX_PWM
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_NORMAL
},
114 {TEGRA_PINGROUP_SDIO1
, TEGRA_MUX_SDIO1
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
115 {TEGRA_PINGROUP_SLXA
, TEGRA_MUX_PCIE
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
116 {TEGRA_PINGROUP_SLXC
, TEGRA_MUX_SDIO3
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_TRISTATE
},
117 {TEGRA_PINGROUP_SLXD
, TEGRA_MUX_SDIO3
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_TRISTATE
},
118 {TEGRA_PINGROUP_SLXK
, TEGRA_MUX_PCIE
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
119 {TEGRA_PINGROUP_SPDI
, TEGRA_MUX_SPDIF
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_TRISTATE
},
120 {TEGRA_PINGROUP_SPDO
, TEGRA_MUX_SPDIF
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_TRISTATE
},
121 {TEGRA_PINGROUP_SPIA
, TEGRA_MUX_SPI2
, TEGRA_PUPD_PULL_DOWN
, TEGRA_TRI_TRISTATE
},
122 {TEGRA_PINGROUP_SPIB
, TEGRA_MUX_SPI2
, TEGRA_PUPD_PULL_DOWN
, TEGRA_TRI_TRISTATE
},
123 {TEGRA_PINGROUP_SPIC
, TEGRA_MUX_SPI2
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_TRISTATE
},
124 {TEGRA_PINGROUP_SPID
, TEGRA_MUX_SPI1
, TEGRA_PUPD_PULL_DOWN
, TEGRA_TRI_TRISTATE
},
125 {TEGRA_PINGROUP_SPIE
, TEGRA_MUX_SPI1
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_TRISTATE
},
126 {TEGRA_PINGROUP_SPIF
, TEGRA_MUX_SPI1
, TEGRA_PUPD_PULL_DOWN
, TEGRA_TRI_TRISTATE
},
127 {TEGRA_PINGROUP_SPIG
, TEGRA_MUX_SPI2_ALT
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_TRISTATE
},
128 {TEGRA_PINGROUP_SPIH
, TEGRA_MUX_SPI2_ALT
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_TRISTATE
},
129 {TEGRA_PINGROUP_UAA
, TEGRA_MUX_ULPI
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_TRISTATE
},
130 {TEGRA_PINGROUP_UAB
, TEGRA_MUX_ULPI
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_TRISTATE
},
131 {TEGRA_PINGROUP_UAC
, TEGRA_MUX_RSVD2
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
132 {TEGRA_PINGROUP_UAD
, TEGRA_MUX_IRDA
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_TRISTATE
},
133 {TEGRA_PINGROUP_UCA
, TEGRA_MUX_UARTC
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_TRISTATE
},
134 {TEGRA_PINGROUP_UCB
, TEGRA_MUX_UARTC
, TEGRA_PUPD_PULL_UP
, TEGRA_TRI_TRISTATE
},
135 {TEGRA_PINGROUP_UDA
, TEGRA_MUX_ULPI
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_TRISTATE
},
136 {TEGRA_PINGROUP_CK32
, TEGRA_MUX_NONE
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
137 {TEGRA_PINGROUP_DDRC
, TEGRA_MUX_NONE
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
138 {TEGRA_PINGROUP_PMCA
, TEGRA_MUX_NONE
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
139 {TEGRA_PINGROUP_PMCB
, TEGRA_MUX_NONE
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
140 {TEGRA_PINGROUP_PMCC
, TEGRA_MUX_NONE
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
141 {TEGRA_PINGROUP_PMCD
, TEGRA_MUX_NONE
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
142 {TEGRA_PINGROUP_PMCE
, TEGRA_MUX_NONE
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
143 {TEGRA_PINGROUP_XM2C
, TEGRA_MUX_NONE
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
144 {TEGRA_PINGROUP_XM2D
, TEGRA_MUX_NONE
, TEGRA_PUPD_NORMAL
, TEGRA_TRI_NORMAL
},
147 static struct tegra_gpio_table gpio_table
[] = {
148 { .gpio
= TRIMSLICE_GPIO_SD4_CD
, .enable
= true }, /* mmc4 cd */
149 { .gpio
= TRIMSLICE_GPIO_SD4_WP
, .enable
= true }, /* mmc4 wp */
151 { .gpio
= TRIMSLICE_GPIO_USB1_MODE
, .enable
= true }, /* USB1 mode */
152 { .gpio
= TRIMSLICE_GPIO_USB2_RST
, .enable
= true }, /* USB2 PHY rst */
155 static struct tegra_board_pinmux_conf conf
= {
156 .pgs
= trimslice_pinmux
,
157 .pg_count
= ARRAY_SIZE(trimslice_pinmux
),
159 .gpio_count
= ARRAY_SIZE(gpio_table
),
162 void trimslice_pinmux_init(void)
164 tegra_board_pinmux_init(&conf
, NULL
);