]>
Commit | Line | Data |
---|---|---|
e56c5791 TH |
1 | /* |
2 | * Copyright (C) 2013 Gateworks Corporation | |
3 | * | |
4 | * Author: Tim Harvey <tharvey@gateworks.com> | |
5 | * | |
6 | * SPDX-License-Identifier: GPL-2.0+ | |
7 | */ | |
8 | ||
65da5c3b | 9 | #include <asm/arch/clock.h> |
e56c5791 TH |
10 | #include <asm/arch/mx6-pins.h> |
11 | #include <asm/arch/sys_proto.h> | |
12 | #include <asm/gpio.h> | |
13 | #include <asm/imx-common/mxc_i2c.h> | |
65da5c3b | 14 | #include <fsl_esdhc.h> |
e56c5791 TH |
15 | #include <hwconfig.h> |
16 | #include <power/pmic.h> | |
17 | #include <power/ltc3676_pmic.h> | |
18 | #include <power/pfuze100_pmic.h> | |
19 | ||
20 | #include "common.h" | |
21 | ||
22 | /* UART1: Function varies per baseboard */ | |
23 | static iomux_v3_cfg_t const uart1_pads[] = { | |
24 | IOMUX_PADS(PAD_SD3_DAT6__UART1_RX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL)), | |
25 | IOMUX_PADS(PAD_SD3_DAT7__UART1_TX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL)), | |
26 | }; | |
27 | ||
28 | /* UART2: Serial Console */ | |
29 | static iomux_v3_cfg_t const uart2_pads[] = { | |
30 | IOMUX_PADS(PAD_SD4_DAT7__UART2_TX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL)), | |
31 | IOMUX_PADS(PAD_SD4_DAT4__UART2_RX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL)), | |
32 | }; | |
33 | ||
34 | void setup_iomux_uart(void) | |
35 | { | |
36 | SETUP_IOMUX_PADS(uart1_pads); | |
37 | SETUP_IOMUX_PADS(uart2_pads); | |
38 | } | |
39 | ||
65da5c3b | 40 | /* MMC */ |
8d1a6ff8 TH |
41 | static iomux_v3_cfg_t const gw5904_emmc_pads[] = { |
42 | IOMUX_PADS(PAD_SD3_DAT0__SD3_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), | |
43 | IOMUX_PADS(PAD_SD3_DAT1__SD3_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), | |
44 | IOMUX_PADS(PAD_SD3_DAT2__SD3_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), | |
45 | IOMUX_PADS(PAD_SD3_DAT3__SD3_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), | |
46 | IOMUX_PADS(PAD_SD3_DAT4__SD3_DATA4 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), | |
47 | IOMUX_PADS(PAD_SD3_DAT5__SD3_DATA5 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), | |
48 | IOMUX_PADS(PAD_SD3_DAT6__SD3_DATA6 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), | |
49 | IOMUX_PADS(PAD_SD3_DAT7__SD3_DATA7 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), | |
50 | IOMUX_PADS(PAD_SD3_CLK__SD3_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL)), | |
51 | IOMUX_PADS(PAD_SD3_CMD__SD3_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL)), | |
52 | IOMUX_PADS(PAD_SD3_RST__SD3_RESET | MUX_PAD_CTRL(USDHC_PAD_CTRL)), | |
53 | }; | |
214fb19b TH |
54 | /* 4-bit microSD on SD2 */ |
55 | static iomux_v3_cfg_t const gw5904_mmc_pads[] = { | |
56 | IOMUX_PADS(PAD_SD2_CLK__SD2_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL)), | |
57 | IOMUX_PADS(PAD_SD2_CMD__SD2_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL)), | |
58 | IOMUX_PADS(PAD_SD2_DAT0__SD2_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), | |
59 | IOMUX_PADS(PAD_SD2_DAT1__SD2_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), | |
60 | IOMUX_PADS(PAD_SD2_DAT2__SD2_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), | |
61 | IOMUX_PADS(PAD_SD2_DAT3__SD2_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), | |
62 | /* CD */ | |
63 | IOMUX_PADS(PAD_NANDF_CS0__GPIO6_IO11 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), | |
64 | }; | |
94a1d6c6 TH |
65 | /* 8-bit eMMC on SD2/NAND */ |
66 | static iomux_v3_cfg_t const gw560x_emmc_sd2_pads[] = { | |
67 | IOMUX_PADS(PAD_SD2_CLK__SD2_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL)), | |
68 | IOMUX_PADS(PAD_SD2_CMD__SD2_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL)), | |
69 | IOMUX_PADS(PAD_SD2_DAT0__SD2_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), | |
70 | IOMUX_PADS(PAD_SD2_DAT1__SD2_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), | |
71 | IOMUX_PADS(PAD_SD2_DAT2__SD2_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), | |
72 | IOMUX_PADS(PAD_SD2_DAT3__SD2_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), | |
73 | IOMUX_PADS(PAD_NANDF_D4__SD2_DATA4 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), | |
74 | IOMUX_PADS(PAD_NANDF_D5__SD2_DATA5 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), | |
75 | IOMUX_PADS(PAD_NANDF_D6__SD2_DATA6 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), | |
76 | IOMUX_PADS(PAD_NANDF_D7__SD2_DATA7 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), | |
77 | }; | |
78 | ||
65da5c3b TH |
79 | static iomux_v3_cfg_t const usdhc3_pads[] = { |
80 | IOMUX_PADS(PAD_SD3_CLK__SD3_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL)), | |
81 | IOMUX_PADS(PAD_SD3_CMD__SD3_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL)), | |
82 | IOMUX_PADS(PAD_SD3_DAT0__SD3_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), | |
83 | IOMUX_PADS(PAD_SD3_DAT1__SD3_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), | |
84 | IOMUX_PADS(PAD_SD3_DAT2__SD3_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), | |
85 | IOMUX_PADS(PAD_SD3_DAT3__SD3_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), | |
86 | IOMUX_PADS(PAD_SD3_DAT5__GPIO7_IO00 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), | |
87 | }; | |
88 | ||
e56c5791 TH |
89 | /* I2C1: GSC */ |
90 | static struct i2c_pads_info mx6q_i2c_pad_info0 = { | |
91 | .scl = { | |
92 | .i2c_mode = MX6Q_PAD_EIM_D21__I2C1_SCL | PC, | |
93 | .gpio_mode = MX6Q_PAD_EIM_D21__GPIO3_IO21 | PC, | |
94 | .gp = IMX_GPIO_NR(3, 21) | |
95 | }, | |
96 | .sda = { | |
97 | .i2c_mode = MX6Q_PAD_EIM_D28__I2C1_SDA | PC, | |
98 | .gpio_mode = MX6Q_PAD_EIM_D28__GPIO3_IO28 | PC, | |
99 | .gp = IMX_GPIO_NR(3, 28) | |
100 | } | |
101 | }; | |
102 | static struct i2c_pads_info mx6dl_i2c_pad_info0 = { | |
103 | .scl = { | |
104 | .i2c_mode = MX6DL_PAD_EIM_D21__I2C1_SCL | PC, | |
105 | .gpio_mode = MX6DL_PAD_EIM_D21__GPIO3_IO21 | PC, | |
106 | .gp = IMX_GPIO_NR(3, 21) | |
107 | }, | |
108 | .sda = { | |
109 | .i2c_mode = MX6DL_PAD_EIM_D28__I2C1_SDA | PC, | |
110 | .gpio_mode = MX6DL_PAD_EIM_D28__GPIO3_IO28 | PC, | |
111 | .gp = IMX_GPIO_NR(3, 28) | |
112 | } | |
113 | }; | |
114 | ||
115 | /* I2C2: PMIC/PCIe Switch/PCIe Clock/Mezz */ | |
116 | static struct i2c_pads_info mx6q_i2c_pad_info1 = { | |
117 | .scl = { | |
118 | .i2c_mode = MX6Q_PAD_KEY_COL3__I2C2_SCL | PC, | |
119 | .gpio_mode = MX6Q_PAD_KEY_COL3__GPIO4_IO12 | PC, | |
120 | .gp = IMX_GPIO_NR(4, 12) | |
121 | }, | |
122 | .sda = { | |
123 | .i2c_mode = MX6Q_PAD_KEY_ROW3__I2C2_SDA | PC, | |
124 | .gpio_mode = MX6Q_PAD_KEY_ROW3__GPIO4_IO13 | PC, | |
125 | .gp = IMX_GPIO_NR(4, 13) | |
126 | } | |
127 | }; | |
128 | static struct i2c_pads_info mx6dl_i2c_pad_info1 = { | |
129 | .scl = { | |
130 | .i2c_mode = MX6DL_PAD_KEY_COL3__I2C2_SCL | PC, | |
131 | .gpio_mode = MX6DL_PAD_KEY_COL3__GPIO4_IO12 | PC, | |
132 | .gp = IMX_GPIO_NR(4, 12) | |
133 | }, | |
134 | .sda = { | |
135 | .i2c_mode = MX6DL_PAD_KEY_ROW3__I2C2_SDA | PC, | |
136 | .gpio_mode = MX6DL_PAD_KEY_ROW3__GPIO4_IO13 | PC, | |
137 | .gp = IMX_GPIO_NR(4, 13) | |
138 | } | |
139 | }; | |
140 | ||
141 | /* I2C3: Misc/Expansion */ | |
142 | static struct i2c_pads_info mx6q_i2c_pad_info2 = { | |
143 | .scl = { | |
144 | .i2c_mode = MX6Q_PAD_GPIO_3__I2C3_SCL | PC, | |
145 | .gpio_mode = MX6Q_PAD_GPIO_3__GPIO1_IO03 | PC, | |
146 | .gp = IMX_GPIO_NR(1, 3) | |
147 | }, | |
148 | .sda = { | |
149 | .i2c_mode = MX6Q_PAD_GPIO_6__I2C3_SDA | PC, | |
150 | .gpio_mode = MX6Q_PAD_GPIO_6__GPIO1_IO06 | PC, | |
151 | .gp = IMX_GPIO_NR(1, 6) | |
152 | } | |
153 | }; | |
154 | static struct i2c_pads_info mx6dl_i2c_pad_info2 = { | |
155 | .scl = { | |
156 | .i2c_mode = MX6DL_PAD_GPIO_3__I2C3_SCL | PC, | |
157 | .gpio_mode = MX6DL_PAD_GPIO_3__GPIO1_IO03 | PC, | |
158 | .gp = IMX_GPIO_NR(1, 3) | |
159 | }, | |
160 | .sda = { | |
161 | .i2c_mode = MX6DL_PAD_GPIO_6__I2C3_SDA | PC, | |
162 | .gpio_mode = MX6DL_PAD_GPIO_6__GPIO1_IO06 | PC, | |
163 | .gp = IMX_GPIO_NR(1, 6) | |
164 | } | |
165 | }; | |
166 | ||
167 | void setup_ventana_i2c(void) | |
168 | { | |
169 | if (is_cpu_type(MXC_CPU_MX6Q)) { | |
170 | setup_i2c(0, CONFIG_SYS_I2C_SPEED, 0x7f, &mx6q_i2c_pad_info0); | |
171 | setup_i2c(1, CONFIG_SYS_I2C_SPEED, 0x7f, &mx6q_i2c_pad_info1); | |
172 | setup_i2c(2, CONFIG_SYS_I2C_SPEED, 0x7f, &mx6q_i2c_pad_info2); | |
173 | } else { | |
174 | setup_i2c(0, CONFIG_SYS_I2C_SPEED, 0x7f, &mx6dl_i2c_pad_info0); | |
175 | setup_i2c(1, CONFIG_SYS_I2C_SPEED, 0x7f, &mx6dl_i2c_pad_info1); | |
176 | setup_i2c(2, CONFIG_SYS_I2C_SPEED, 0x7f, &mx6dl_i2c_pad_info2); | |
177 | } | |
178 | } | |
179 | ||
180 | /* | |
181 | * Baseboard specific GPIO | |
182 | */ | |
183 | ||
e56c5791 TH |
184 | /* prototype */ |
185 | static iomux_v3_cfg_t const gwproto_gpio_pads[] = { | |
e49621b3 TH |
186 | /* RS232_EN# */ |
187 | IOMUX_PADS(PAD_SD4_DAT3__GPIO2_IO11 | DIO_PAD_CFG), | |
e56c5791 TH |
188 | /* PANLEDG# */ |
189 | IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG), | |
190 | /* PANLEDR# */ | |
191 | IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG), | |
192 | /* LOCLED# */ | |
193 | IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG), | |
194 | /* RS485_EN */ | |
195 | IOMUX_PADS(PAD_SD3_DAT4__GPIO7_IO01 | DIO_PAD_CFG), | |
196 | /* IOEXP_PWREN# */ | |
197 | IOMUX_PADS(PAD_EIM_A19__GPIO2_IO19 | DIO_PAD_CFG), | |
198 | /* IOEXP_IRQ# */ | |
199 | IOMUX_PADS(PAD_EIM_A20__GPIO2_IO18 | MUX_PAD_CTRL(IRQ_PAD_CTRL)), | |
200 | /* VID_EN */ | |
201 | IOMUX_PADS(PAD_EIM_D31__GPIO3_IO31 | DIO_PAD_CFG), | |
202 | /* DIOI2C_DIS# */ | |
203 | IOMUX_PADS(PAD_GPIO_19__GPIO4_IO05 | DIO_PAD_CFG), | |
204 | /* PCICK_SSON */ | |
205 | IOMUX_PADS(PAD_SD1_CLK__GPIO1_IO20 | DIO_PAD_CFG), | |
206 | /* PCI_RST# */ | |
207 | IOMUX_PADS(PAD_ENET_TXD1__GPIO1_IO29 | DIO_PAD_CFG), | |
208 | }; | |
209 | ||
210 | static iomux_v3_cfg_t const gw51xx_gpio_pads[] = { | |
211 | /* PANLEDG# */ | |
212 | IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG), | |
213 | /* PANLEDR# */ | |
214 | IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG), | |
215 | /* IOEXP_PWREN# */ | |
216 | IOMUX_PADS(PAD_EIM_A19__GPIO2_IO19 | DIO_PAD_CFG), | |
217 | /* IOEXP_IRQ# */ | |
218 | IOMUX_PADS(PAD_EIM_A20__GPIO2_IO18 | MUX_PAD_CTRL(IRQ_PAD_CTRL)), | |
219 | ||
220 | /* GPS_SHDN */ | |
221 | IOMUX_PADS(PAD_GPIO_2__GPIO1_IO02 | DIO_PAD_CFG), | |
222 | /* VID_PWR */ | |
223 | IOMUX_PADS(PAD_CSI0_DATA_EN__GPIO5_IO20 | DIO_PAD_CFG), | |
224 | /* PCI_RST# */ | |
225 | IOMUX_PADS(PAD_GPIO_0__GPIO1_IO00 | DIO_PAD_CFG), | |
226 | /* PCIESKT_WDIS# */ | |
227 | IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG), | |
228 | }; | |
229 | ||
230 | static iomux_v3_cfg_t const gw52xx_gpio_pads[] = { | |
f3a8546b TH |
231 | /* SD3_VSELECT */ |
232 | IOMUX_PADS(PAD_NANDF_CS1__GPIO6_IO14 | DIO_PAD_CFG), | |
e49621b3 TH |
233 | /* RS232_EN# */ |
234 | IOMUX_PADS(PAD_SD4_DAT3__GPIO2_IO11 | DIO_PAD_CFG), | |
5c55572f TH |
235 | /* MSATA_EN */ |
236 | IOMUX_PADS(PAD_SD4_DAT0__GPIO2_IO08 | DIO_PAD_CFG), | |
e56c5791 TH |
237 | /* PANLEDG# */ |
238 | IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG), | |
239 | /* PANLEDR# */ | |
240 | IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG), | |
241 | /* IOEXP_PWREN# */ | |
242 | IOMUX_PADS(PAD_EIM_A19__GPIO2_IO19 | DIO_PAD_CFG), | |
243 | /* IOEXP_IRQ# */ | |
244 | IOMUX_PADS(PAD_EIM_A20__GPIO2_IO18 | MUX_PAD_CTRL(IRQ_PAD_CTRL)), | |
9a83a815 TH |
245 | /* CAN_STBY */ |
246 | IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09 | DIO_PAD_CFG), | |
e56c5791 TH |
247 | /* MX6_LOCLED# */ |
248 | IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG), | |
249 | /* GPS_SHDN */ | |
250 | IOMUX_PADS(PAD_ENET_RXD0__GPIO1_IO27 | DIO_PAD_CFG), | |
251 | /* USBOTG_SEL */ | |
252 | IOMUX_PADS(PAD_GPIO_2__GPIO1_IO02 | DIO_PAD_CFG), | |
253 | /* VID_PWR */ | |
254 | IOMUX_PADS(PAD_EIM_D31__GPIO3_IO31 | DIO_PAD_CFG), | |
255 | /* PCI_RST# */ | |
256 | IOMUX_PADS(PAD_ENET_TXD1__GPIO1_IO29 | DIO_PAD_CFG), | |
257 | /* PCI_RST# (GW522x) */ | |
258 | IOMUX_PADS(PAD_EIM_D23__GPIO3_IO23 | DIO_PAD_CFG), | |
9a83a815 TH |
259 | /* RS485_EN */ |
260 | IOMUX_PADS(PAD_SD3_DAT4__GPIO7_IO01 | DIO_PAD_CFG), | |
e56c5791 TH |
261 | /* PCIESKT_WDIS# */ |
262 | IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG), | |
263 | }; | |
264 | ||
265 | static iomux_v3_cfg_t const gw53xx_gpio_pads[] = { | |
f3a8546b TH |
266 | /* SD3_VSELECT */ |
267 | IOMUX_PADS(PAD_NANDF_CS1__GPIO6_IO14 | DIO_PAD_CFG), | |
e49621b3 TH |
268 | /* RS232_EN# */ |
269 | IOMUX_PADS(PAD_SD4_DAT3__GPIO2_IO11 | DIO_PAD_CFG), | |
5c55572f TH |
270 | /* MSATA_EN */ |
271 | IOMUX_PADS(PAD_SD4_DAT0__GPIO2_IO08 | DIO_PAD_CFG), | |
9a83a815 TH |
272 | /* CAN_STBY */ |
273 | IOMUX_PADS(PAD_GPIO_2__GPIO1_IO02 | DIO_PAD_CFG), | |
274 | /* USB_HUBRST# */ | |
275 | IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09 | DIO_PAD_CFG), | |
e56c5791 TH |
276 | /* PANLEDG# */ |
277 | IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG), | |
278 | /* PANLEDR# */ | |
279 | IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG), | |
280 | /* MX6_LOCLED# */ | |
281 | IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG), | |
282 | /* IOEXP_PWREN# */ | |
283 | IOMUX_PADS(PAD_EIM_A19__GPIO2_IO19 | DIO_PAD_CFG), | |
284 | /* IOEXP_IRQ# */ | |
285 | IOMUX_PADS(PAD_EIM_A20__GPIO2_IO18 | MUX_PAD_CTRL(IRQ_PAD_CTRL)), | |
286 | /* DIOI2C_DIS# */ | |
287 | IOMUX_PADS(PAD_GPIO_19__GPIO4_IO05 | DIO_PAD_CFG), | |
288 | /* GPS_SHDN */ | |
289 | IOMUX_PADS(PAD_ENET_RXD0__GPIO1_IO27 | DIO_PAD_CFG), | |
290 | /* VID_EN */ | |
291 | IOMUX_PADS(PAD_EIM_D31__GPIO3_IO31 | DIO_PAD_CFG), | |
292 | /* PCI_RST# */ | |
293 | IOMUX_PADS(PAD_ENET_TXD1__GPIO1_IO29 | DIO_PAD_CFG), | |
9a83a815 TH |
294 | /* RS485_EN */ |
295 | IOMUX_PADS(PAD_SD3_DAT4__GPIO7_IO01 | DIO_PAD_CFG), | |
e56c5791 TH |
296 | /* PCIESKT_WDIS# */ |
297 | IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG), | |
298 | }; | |
299 | ||
300 | static iomux_v3_cfg_t const gw54xx_gpio_pads[] = { | |
f3a8546b TH |
301 | /* SD3_VSELECT */ |
302 | IOMUX_PADS(PAD_NANDF_CS1__GPIO6_IO14 | DIO_PAD_CFG), | |
e49621b3 TH |
303 | /* RS232_EN# */ |
304 | IOMUX_PADS(PAD_SD4_DAT3__GPIO2_IO11 | DIO_PAD_CFG), | |
5c55572f TH |
305 | /* MSATA_EN */ |
306 | IOMUX_PADS(PAD_SD4_DAT0__GPIO2_IO08 | DIO_PAD_CFG), | |
9a83a815 TH |
307 | /* CAN_STBY */ |
308 | IOMUX_PADS(PAD_GPIO_2__GPIO1_IO02 | DIO_PAD_CFG), | |
e56c5791 TH |
309 | /* PANLEDG# */ |
310 | IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG), | |
311 | /* PANLEDR# */ | |
9a83a815 | 312 | IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG), |
e56c5791 TH |
313 | /* MX6_LOCLED# */ |
314 | IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG), | |
9a83a815 TH |
315 | /* USB_HUBRST# */ |
316 | IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16 | DIO_PAD_CFG), | |
e56c5791 TH |
317 | /* MIPI_DIO */ |
318 | IOMUX_PADS(PAD_SD1_DAT3__GPIO1_IO21 | DIO_PAD_CFG), | |
319 | /* RS485_EN */ | |
320 | IOMUX_PADS(PAD_EIM_D24__GPIO3_IO24 | DIO_PAD_CFG), | |
321 | /* IOEXP_PWREN# */ | |
9a83a815 | 322 | IOMUX_PADS(PAD_EIM_A19__GPIO2_IO19 | DIO_PAD_CFG), |
e56c5791 | 323 | /* IOEXP_IRQ# */ |
9a83a815 | 324 | IOMUX_PADS(PAD_EIM_A20__GPIO2_IO18 | MUX_PAD_CTRL(IRQ_PAD_CTRL)), |
e56c5791 TH |
325 | /* DIOI2C_DIS# */ |
326 | IOMUX_PADS(PAD_GPIO_19__GPIO4_IO05 | DIO_PAD_CFG), | |
327 | /* PCI_RST# */ | |
328 | IOMUX_PADS(PAD_ENET_TXD1__GPIO1_IO29 | DIO_PAD_CFG), | |
329 | /* VID_EN */ | |
330 | IOMUX_PADS(PAD_EIM_D31__GPIO3_IO31 | DIO_PAD_CFG), | |
9a83a815 TH |
331 | /* RS485_EN */ |
332 | IOMUX_PADS(PAD_SD3_DAT4__GPIO7_IO01 | DIO_PAD_CFG), | |
e56c5791 TH |
333 | /* PCIESKT_WDIS# */ |
334 | IOMUX_PADS(PAD_DISP0_DAT23__GPIO5_IO17 | DIO_PAD_CFG), | |
335 | }; | |
336 | ||
337 | static iomux_v3_cfg_t const gw551x_gpio_pads[] = { | |
9a83a815 TH |
338 | /* CAN_STBY */ |
339 | IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09 | DIO_PAD_CFG), | |
e56c5791 TH |
340 | /* PANLED# */ |
341 | IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG), | |
342 | /* PCI_RST# */ | |
343 | IOMUX_PADS(PAD_GPIO_0__GPIO1_IO00 | DIO_PAD_CFG), | |
344 | /* PCIESKT_WDIS# */ | |
345 | IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG), | |
346 | }; | |
347 | ||
348 | static iomux_v3_cfg_t const gw552x_gpio_pads[] = { | |
5c55572f TH |
349 | /* MSATA_EN */ |
350 | IOMUX_PADS(PAD_SD4_DAT0__GPIO2_IO08 | DIO_PAD_CFG), | |
9a83a815 TH |
351 | /* USBOTG_SEL */ |
352 | IOMUX_PADS(PAD_GPIO_7__GPIO1_IO07 | DIO_PAD_CFG), | |
353 | /* USB_HUBRST# */ | |
354 | IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09 | DIO_PAD_CFG), | |
e56c5791 TH |
355 | /* PANLEDG# */ |
356 | IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG), | |
357 | /* PANLEDR# */ | |
358 | IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG), | |
359 | /* MX6_LOCLED# */ | |
360 | IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG), | |
361 | /* PCI_RST# */ | |
362 | IOMUX_PADS(PAD_ENET_TXD1__GPIO1_IO29 | DIO_PAD_CFG), | |
363 | /* MX6_DIO[4:9] */ | |
364 | IOMUX_PADS(PAD_CSI0_PIXCLK__GPIO5_IO18 | DIO_PAD_CFG), | |
365 | IOMUX_PADS(PAD_CSI0_DATA_EN__GPIO5_IO20 | DIO_PAD_CFG), | |
366 | IOMUX_PADS(PAD_CSI0_VSYNC__GPIO5_IO21 | DIO_PAD_CFG), | |
367 | IOMUX_PADS(PAD_CSI0_DAT4__GPIO5_IO22 | DIO_PAD_CFG), | |
368 | IOMUX_PADS(PAD_CSI0_DAT5__GPIO5_IO23 | DIO_PAD_CFG), | |
369 | IOMUX_PADS(PAD_CSI0_DAT7__GPIO5_IO25 | DIO_PAD_CFG), | |
370 | /* PCIEGBE1_OFF# */ | |
371 | IOMUX_PADS(PAD_GPIO_1__GPIO1_IO01 | DIO_PAD_CFG), | |
372 | /* PCIEGBE2_OFF# */ | |
373 | IOMUX_PADS(PAD_GPIO_2__GPIO1_IO02 | DIO_PAD_CFG), | |
374 | /* PCIESKT_WDIS# */ | |
375 | IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG), | |
376 | }; | |
377 | ||
385575bc | 378 | static iomux_v3_cfg_t const gw553x_gpio_pads[] = { |
f3a8546b TH |
379 | /* SD3_VSELECT */ |
380 | IOMUX_PADS(PAD_NANDF_CS1__GPIO6_IO14 | DIO_PAD_CFG), | |
385575bc TH |
381 | /* PANLEDG# */ |
382 | IOMUX_PADS(PAD_KEY_COL2__GPIO4_IO10 | DIO_PAD_CFG), | |
383 | /* PANLEDR# */ | |
384 | IOMUX_PADS(PAD_KEY_ROW2__GPIO4_IO11 | DIO_PAD_CFG), | |
385575bc TH |
385 | /* VID_PWR */ |
386 | IOMUX_PADS(PAD_CSI0_DATA_EN__GPIO5_IO20 | DIO_PAD_CFG), | |
387 | /* PCI_RST# */ | |
388 | IOMUX_PADS(PAD_GPIO_0__GPIO1_IO00 | DIO_PAD_CFG), | |
389 | /* PCIESKT_WDIS# */ | |
390 | IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG), | |
391 | }; | |
392 | ||
94a1d6c6 TH |
393 | static iomux_v3_cfg_t const gw560x_gpio_pads[] = { |
394 | /* RS232_EN# */ | |
395 | IOMUX_PADS(PAD_SD4_DAT3__GPIO2_IO11 | DIO_PAD_CFG), | |
396 | /* CAN_STBY */ | |
397 | IOMUX_PADS(PAD_GPIO_2__GPIO1_IO02 | DIO_PAD_CFG), | |
398 | /* USB_HUBRST# */ | |
399 | IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09 | DIO_PAD_CFG), | |
400 | /* PANLEDG# */ | |
401 | IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG), | |
402 | /* PANLEDR# */ | |
403 | IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG), | |
404 | /* MX6_LOCLED# */ | |
405 | IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG), | |
406 | /* IOEXP_PWREN# */ | |
407 | IOMUX_PADS(PAD_EIM_A19__GPIO2_IO19 | DIO_PAD_CFG), | |
408 | /* IOEXP_IRQ# */ | |
409 | IOMUX_PADS(PAD_EIM_A20__GPIO2_IO18 | MUX_PAD_CTRL(IRQ_PAD_CTRL)), | |
410 | /* DIOI2C_DIS# */ | |
411 | IOMUX_PADS(PAD_GPIO_19__GPIO4_IO05 | DIO_PAD_CFG), | |
412 | /* VID_EN */ | |
413 | IOMUX_PADS(PAD_EIM_D31__GPIO3_IO31 | DIO_PAD_CFG), | |
414 | /* PCI_RST# */ | |
415 | IOMUX_PADS(PAD_DISP0_DAT10__GPIO4_IO31 | DIO_PAD_CFG), | |
416 | /* RS485_EN */ | |
417 | IOMUX_PADS(PAD_SD3_DAT4__GPIO7_IO01 | DIO_PAD_CFG), | |
418 | /* PCIESKT_WDIS# */ | |
419 | IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG), | |
420 | /* USBH2_PEN (OTG) */ | |
421 | IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG), | |
422 | /* 12V0_PWR_EN */ | |
423 | IOMUX_PADS(PAD_DISP0_DAT5__GPIO4_IO26 | DIO_PAD_CFG), | |
424 | }; | |
425 | ||
214fb19b TH |
426 | static iomux_v3_cfg_t const gw5903_gpio_pads[] = { |
427 | /* BKLT_12VEN */ | |
428 | IOMUX_PADS(PAD_GPIO_7__GPIO1_IO07 | DIO_PAD_CFG), | |
429 | /* EMMY_PDN# */ | |
430 | IOMUX_PADS(PAD_NANDF_D2__GPIO2_IO02 | DIO_PAD_CFG), | |
431 | /* EMMY_CFG1# */ | |
432 | IOMUX_PADS(PAD_NANDF_D3__GPIO2_IO03 | DIO_PAD_CFG), | |
433 | /* EMMY_CFG1# */ | |
434 | IOMUX_PADS(PAD_NANDF_D4__GPIO2_IO04 | DIO_PAD_CFG), | |
435 | /* USBH1_PEN (EHCI) */ | |
436 | IOMUX_PADS(PAD_EIM_D31__GPIO3_IO31 | DIO_PAD_CFG), | |
437 | /* USBH2_PEN (OTG) */ | |
438 | IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG), | |
439 | /* USBDPC_PEN */ | |
440 | IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG), | |
441 | /* TOUCH_RST */ | |
442 | IOMUX_PADS(PAD_KEY_COL1__GPIO4_IO08 | DIO_PAD_CFG), | |
443 | /* AUDIO_RST# */ | |
444 | IOMUX_PADS(PAD_DISP0_DAT23__GPIO5_IO17 | DIO_PAD_CFG), | |
445 | /* UART1_TEN# */ | |
446 | IOMUX_PADS(PAD_CSI0_DAT12__GPIO5_IO30 | DIO_PAD_CFG), | |
447 | /* MX6_LOCLED# */ | |
448 | IOMUX_PADS(PAD_NANDF_CS1__GPIO6_IO14 | DIO_PAD_CFG), | |
449 | /* LVDS_BKLEN # */ | |
450 | IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG), | |
451 | /* RGMII_PDWN# */ | |
452 | IOMUX_PADS(PAD_ENET_CRS_DV__GPIO1_IO25 | DIO_PAD_CFG), | |
453 | /* TOUCH_IRQ# */ | |
454 | IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG), | |
455 | /* TOUCH_RST# */ | |
456 | IOMUX_PADS(PAD_KEY_COL1__GPIO4_IO08 | DIO_PAD_CFG), | |
457 | }; | |
458 | ||
8d1a6ff8 TH |
459 | static iomux_v3_cfg_t const gw5904_gpio_pads[] = { |
460 | /* USB_HUBRST# */ | |
461 | IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09 | DIO_PAD_CFG), | |
462 | /* PANLEDG# */ | |
463 | IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG), | |
464 | /* PANLEDR# */ | |
465 | IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG), | |
466 | /* MX6_LOCLED# */ | |
467 | IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG), | |
468 | /* IOEXP_PWREN# */ | |
469 | IOMUX_PADS(PAD_EIM_A19__GPIO2_IO19 | DIO_PAD_CFG), | |
470 | /* IOEXP_IRQ# */ | |
471 | IOMUX_PADS(PAD_EIM_A20__GPIO2_IO18 | MUX_PAD_CTRL(IRQ_PAD_CTRL)), | |
472 | /* DIOI2C_DIS# */ | |
473 | IOMUX_PADS(PAD_GPIO_19__GPIO4_IO05 | DIO_PAD_CFG), | |
474 | /* UART_RS485 */ | |
475 | IOMUX_PADS(PAD_DISP0_DAT2__GPIO4_IO23 | DIO_PAD_CFG), | |
476 | /* UART_HALF */ | |
477 | IOMUX_PADS(PAD_DISP0_DAT3__GPIO4_IO24 | DIO_PAD_CFG), | |
478 | /* SKT1_WDIS# */ | |
479 | IOMUX_PADS(PAD_DISP0_DAT17__GPIO5_IO11 | DIO_PAD_CFG), | |
480 | /* SKT1_RST# */ | |
481 | IOMUX_PADS(PAD_DISP0_DAT18__GPIO5_IO12 | DIO_PAD_CFG), | |
482 | /* SKT2_WDIS# */ | |
483 | IOMUX_PADS(PAD_DISP0_DAT19__GPIO5_IO13 | DIO_PAD_CFG), | |
484 | /* SKT2_RST# */ | |
485 | IOMUX_PADS(PAD_GPIO_0__GPIO1_IO00 | DIO_PAD_CFG), | |
486 | /* M2_OFF# */ | |
487 | IOMUX_PADS(PAD_SD2_DAT0__GPIO1_IO15 | DIO_PAD_CFG), | |
488 | /* M2_WDIS# */ | |
489 | IOMUX_PADS(PAD_SD2_DAT1__GPIO1_IO14 | DIO_PAD_CFG), | |
490 | /* M2_RST# */ | |
491 | IOMUX_PADS(PAD_SD2_DAT2__GPIO1_IO13 | DIO_PAD_CFG), | |
492 | }; | |
493 | ||
1800ffa8 TH |
494 | /* Digital I/O */ |
495 | struct dio_cfg gw51xx_dio[] = { | |
496 | { | |
497 | { IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) }, | |
498 | IMX_GPIO_NR(1, 16), | |
499 | { 0, 0 }, | |
500 | 0 | |
501 | }, | |
502 | { | |
503 | { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) }, | |
504 | IMX_GPIO_NR(1, 19), | |
505 | { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) }, | |
506 | 2 | |
507 | }, | |
508 | { | |
509 | { IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) }, | |
510 | IMX_GPIO_NR(1, 17), | |
511 | { IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) }, | |
512 | 3 | |
513 | }, | |
514 | { | |
515 | { IOMUX_PADS(PAD_SD1_CMD__GPIO1_IO18) }, | |
516 | IMX_GPIO_NR(1, 18), | |
517 | { IOMUX_PADS(PAD_SD1_CMD__PWM4_OUT) }, | |
518 | 4 | |
519 | }, | |
520 | }; | |
521 | ||
522 | struct dio_cfg gw52xx_dio[] = { | |
523 | { | |
524 | { IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) }, | |
525 | IMX_GPIO_NR(1, 16), | |
526 | { 0, 0 }, | |
527 | 0 | |
528 | }, | |
529 | { | |
530 | { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) }, | |
531 | IMX_GPIO_NR(1, 19), | |
532 | { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) }, | |
533 | 2 | |
534 | }, | |
535 | { | |
536 | { IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) }, | |
537 | IMX_GPIO_NR(1, 17), | |
538 | { IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) }, | |
539 | 3 | |
540 | }, | |
541 | { | |
542 | { IOMUX_PADS(PAD_SD1_CLK__GPIO1_IO20) }, | |
543 | IMX_GPIO_NR(1, 20), | |
544 | { 0, 0 }, | |
545 | 0 | |
546 | }, | |
547 | }; | |
548 | ||
549 | struct dio_cfg gw53xx_dio[] = { | |
550 | { | |
551 | { IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) }, | |
552 | IMX_GPIO_NR(1, 16), | |
553 | { 0, 0 }, | |
554 | 0 | |
555 | }, | |
556 | { | |
557 | { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) }, | |
558 | IMX_GPIO_NR(1, 19), | |
559 | { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) }, | |
560 | 2 | |
561 | }, | |
562 | { | |
563 | { IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) }, | |
564 | IMX_GPIO_NR(1, 17), | |
565 | { IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) }, | |
566 | 3 | |
567 | }, | |
568 | { | |
569 | {IOMUX_PADS(PAD_SD1_CLK__GPIO1_IO20) }, | |
570 | IMX_GPIO_NR(1, 20), | |
571 | { 0, 0 }, | |
572 | 0 | |
573 | }, | |
574 | }; | |
575 | ||
576 | struct dio_cfg gw54xx_dio[] = { | |
577 | { | |
578 | { IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09) }, | |
579 | IMX_GPIO_NR(1, 9), | |
580 | { IOMUX_PADS(PAD_GPIO_9__PWM1_OUT) }, | |
581 | 1 | |
582 | }, | |
583 | { | |
584 | { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) }, | |
585 | IMX_GPIO_NR(1, 19), | |
586 | { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) }, | |
587 | 2 | |
588 | }, | |
589 | { | |
590 | { IOMUX_PADS(PAD_SD4_DAT1__GPIO2_IO09) }, | |
591 | IMX_GPIO_NR(2, 9), | |
592 | { IOMUX_PADS(PAD_SD4_DAT1__PWM3_OUT) }, | |
593 | 3 | |
594 | }, | |
595 | { | |
596 | { IOMUX_PADS(PAD_SD4_DAT2__GPIO2_IO10) }, | |
597 | IMX_GPIO_NR(2, 10), | |
598 | { IOMUX_PADS(PAD_SD4_DAT2__PWM4_OUT) }, | |
599 | 4 | |
600 | }, | |
601 | }; | |
602 | ||
603 | struct dio_cfg gw551x_dio[] = { | |
604 | { | |
605 | { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) }, | |
606 | IMX_GPIO_NR(1, 19), | |
607 | { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) }, | |
608 | 2 | |
609 | }, | |
610 | { | |
611 | { IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) }, | |
612 | IMX_GPIO_NR(1, 17), | |
613 | { IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) }, | |
614 | 3 | |
615 | }, | |
616 | }; | |
617 | ||
618 | struct dio_cfg gw552x_dio[] = { | |
619 | { | |
620 | { IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) }, | |
621 | IMX_GPIO_NR(1, 16), | |
622 | { 0, 0 }, | |
623 | 0 | |
624 | }, | |
625 | { | |
626 | { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) }, | |
627 | IMX_GPIO_NR(1, 19), | |
628 | { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) }, | |
629 | 2 | |
630 | }, | |
631 | { | |
632 | { IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) }, | |
633 | IMX_GPIO_NR(1, 17), | |
634 | { IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) }, | |
635 | 3 | |
636 | }, | |
637 | { | |
638 | {IOMUX_PADS(PAD_SD1_CLK__GPIO1_IO20) }, | |
639 | IMX_GPIO_NR(1, 20), | |
640 | { 0, 0 }, | |
641 | 0 | |
642 | }, | |
e86b7adf TH |
643 | { |
644 | {IOMUX_PADS(PAD_CSI0_PIXCLK__GPIO5_IO18) }, | |
645 | IMX_GPIO_NR(5, 18), | |
646 | { 0, 0 }, | |
647 | 0 | |
648 | }, | |
649 | { | |
650 | {IOMUX_PADS(PAD_CSI0_DATA_EN__GPIO5_IO20) }, | |
651 | IMX_GPIO_NR(5, 20), | |
652 | { 0, 0 }, | |
653 | 0 | |
654 | }, | |
655 | { | |
656 | {IOMUX_PADS(PAD_CSI0_VSYNC__GPIO5_IO21) }, | |
657 | IMX_GPIO_NR(5, 21), | |
658 | { 0, 0 }, | |
659 | 0 | |
660 | }, | |
661 | { | |
662 | {IOMUX_PADS(PAD_CSI0_DAT4__GPIO5_IO22) }, | |
663 | IMX_GPIO_NR(5, 22), | |
664 | { 0, 0 }, | |
665 | 0 | |
666 | }, | |
667 | { | |
668 | {IOMUX_PADS(PAD_CSI0_DAT5__GPIO5_IO23) }, | |
669 | IMX_GPIO_NR(5, 23), | |
670 | { 0, 0 }, | |
671 | 0 | |
672 | }, | |
673 | { | |
674 | {IOMUX_PADS(PAD_CSI0_DAT7__GPIO5_IO25) }, | |
675 | IMX_GPIO_NR(5, 25), | |
676 | { 0, 0 }, | |
677 | 0 | |
678 | }, | |
1800ffa8 TH |
679 | }; |
680 | ||
681 | struct dio_cfg gw553x_dio[] = { | |
682 | { | |
683 | { IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) }, | |
684 | IMX_GPIO_NR(1, 16), | |
685 | { 0, 0 }, | |
686 | 0 | |
687 | }, | |
688 | { | |
689 | { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) }, | |
690 | IMX_GPIO_NR(1, 19), | |
691 | { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) }, | |
692 | 2 | |
693 | }, | |
694 | { | |
695 | { IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) }, | |
696 | IMX_GPIO_NR(1, 17), | |
697 | { IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) }, | |
698 | 3 | |
699 | }, | |
700 | { | |
701 | { IOMUX_PADS(PAD_SD1_CMD__GPIO1_IO18) }, | |
702 | IMX_GPIO_NR(1, 18), | |
703 | { IOMUX_PADS(PAD_SD1_CMD__PWM4_OUT) }, | |
704 | 4 | |
705 | }, | |
706 | }; | |
e56c5791 | 707 | |
94a1d6c6 TH |
708 | struct dio_cfg gw560x_dio[] = { |
709 | { | |
710 | { IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) }, | |
711 | IMX_GPIO_NR(1, 16), | |
712 | { 0, 0 }, | |
713 | 0 | |
714 | }, | |
715 | { | |
716 | { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) }, | |
717 | IMX_GPIO_NR(1, 19), | |
718 | { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) }, | |
719 | 2 | |
720 | }, | |
721 | { | |
722 | { IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) }, | |
723 | IMX_GPIO_NR(1, 17), | |
724 | { IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) }, | |
725 | 3 | |
726 | }, | |
727 | { | |
728 | {IOMUX_PADS(PAD_SD1_CLK__GPIO1_IO20) }, | |
729 | IMX_GPIO_NR(1, 20), | |
730 | { 0, 0 }, | |
731 | 0 | |
732 | }, | |
733 | }; | |
734 | ||
214fb19b TH |
735 | struct dio_cfg gw5903_dio[] = { |
736 | }; | |
737 | ||
8d1a6ff8 TH |
738 | struct dio_cfg gw5904_dio[] = { |
739 | { | |
740 | { IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) }, | |
741 | IMX_GPIO_NR(1, 16), | |
742 | { 0, 0 }, | |
743 | 0 | |
744 | }, | |
745 | { | |
746 | { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) }, | |
747 | IMX_GPIO_NR(1, 19), | |
748 | { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) }, | |
749 | 2 | |
750 | }, | |
751 | { | |
752 | { IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) }, | |
753 | IMX_GPIO_NR(1, 17), | |
754 | { IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) }, | |
755 | 3 | |
756 | }, | |
757 | { | |
758 | {IOMUX_PADS(PAD_SD1_CLK__GPIO1_IO20) }, | |
759 | IMX_GPIO_NR(1, 20), | |
760 | { 0, 0 }, | |
761 | 0 | |
762 | }, | |
763 | { | |
764 | {IOMUX_PADS(PAD_NANDF_D0__GPIO2_IO00) }, | |
765 | IMX_GPIO_NR(2, 0), | |
766 | { 0, 0 }, | |
767 | 0 | |
768 | }, | |
769 | { | |
770 | {IOMUX_PADS(PAD_NANDF_D1__GPIO2_IO01) }, | |
771 | IMX_GPIO_NR(2, 1), | |
772 | { 0, 0 }, | |
773 | 0 | |
774 | }, | |
775 | { | |
776 | {IOMUX_PADS(PAD_NANDF_D2__GPIO2_IO02) }, | |
777 | IMX_GPIO_NR(2, 2), | |
778 | { 0, 0 }, | |
779 | 0 | |
780 | }, | |
781 | { | |
782 | {IOMUX_PADS(PAD_NANDF_D3__GPIO2_IO03) }, | |
783 | IMX_GPIO_NR(2, 3), | |
784 | { 0, 0 }, | |
785 | 0 | |
786 | }, | |
787 | { | |
788 | {IOMUX_PADS(PAD_NANDF_D4__GPIO2_IO04) }, | |
789 | IMX_GPIO_NR(2, 4), | |
790 | { 0, 0 }, | |
791 | 0 | |
792 | }, | |
793 | { | |
794 | {IOMUX_PADS(PAD_NANDF_D5__GPIO2_IO05) }, | |
795 | IMX_GPIO_NR(2, 5), | |
796 | { 0, 0 }, | |
797 | 0 | |
798 | }, | |
799 | { | |
800 | {IOMUX_PADS(PAD_NANDF_D6__GPIO2_IO06) }, | |
801 | IMX_GPIO_NR(2, 6), | |
802 | { 0, 0 }, | |
803 | 0 | |
804 | }, | |
805 | { | |
806 | {IOMUX_PADS(PAD_NANDF_D7__GPIO2_IO07) }, | |
807 | IMX_GPIO_NR(2, 7), | |
808 | { 0, 0 }, | |
809 | 0 | |
810 | }, | |
811 | }; | |
812 | ||
e56c5791 TH |
813 | /* |
814 | * Board Specific GPIO | |
815 | */ | |
816 | struct ventana gpio_cfg[GW_UNKNOWN] = { | |
817 | /* GW5400proto */ | |
818 | { | |
819 | .gpio_pads = gw54xx_gpio_pads, | |
820 | .num_pads = ARRAY_SIZE(gw54xx_gpio_pads)/2, | |
1800ffa8 TH |
821 | .dio_cfg = gw54xx_dio, |
822 | .dio_num = ARRAY_SIZE(gw54xx_dio), | |
e56c5791 TH |
823 | .leds = { |
824 | IMX_GPIO_NR(4, 6), | |
825 | IMX_GPIO_NR(4, 10), | |
826 | IMX_GPIO_NR(4, 15), | |
827 | }, | |
828 | .pcie_rst = IMX_GPIO_NR(1, 29), | |
829 | .mezz_pwren = IMX_GPIO_NR(4, 7), | |
830 | .mezz_irq = IMX_GPIO_NR(4, 9), | |
831 | .rs485en = IMX_GPIO_NR(3, 24), | |
832 | .dioi2c_en = IMX_GPIO_NR(4, 5), | |
833 | .pcie_sson = IMX_GPIO_NR(1, 20), | |
f938500f | 834 | .otgpwr_en = IMX_GPIO_NR(3, 22), |
8d1a6ff8 | 835 | .mmc_cd = IMX_GPIO_NR(7, 0), |
e56c5791 TH |
836 | }, |
837 | ||
838 | /* GW51xx */ | |
839 | { | |
840 | .gpio_pads = gw51xx_gpio_pads, | |
841 | .num_pads = ARRAY_SIZE(gw51xx_gpio_pads)/2, | |
1800ffa8 TH |
842 | .dio_cfg = gw51xx_dio, |
843 | .dio_num = ARRAY_SIZE(gw51xx_dio), | |
e56c5791 TH |
844 | .leds = { |
845 | IMX_GPIO_NR(4, 6), | |
846 | IMX_GPIO_NR(4, 10), | |
847 | }, | |
848 | .pcie_rst = IMX_GPIO_NR(1, 0), | |
849 | .mezz_pwren = IMX_GPIO_NR(2, 19), | |
850 | .mezz_irq = IMX_GPIO_NR(2, 18), | |
851 | .gps_shdn = IMX_GPIO_NR(1, 2), | |
852 | .vidin_en = IMX_GPIO_NR(5, 20), | |
853 | .wdis = IMX_GPIO_NR(7, 12), | |
f938500f | 854 | .otgpwr_en = IMX_GPIO_NR(3, 22), |
e56c5791 TH |
855 | }, |
856 | ||
857 | /* GW52xx */ | |
858 | { | |
859 | .gpio_pads = gw52xx_gpio_pads, | |
860 | .num_pads = ARRAY_SIZE(gw52xx_gpio_pads)/2, | |
1800ffa8 TH |
861 | .dio_cfg = gw52xx_dio, |
862 | .dio_num = ARRAY_SIZE(gw52xx_dio), | |
e56c5791 TH |
863 | .leds = { |
864 | IMX_GPIO_NR(4, 6), | |
865 | IMX_GPIO_NR(4, 7), | |
866 | IMX_GPIO_NR(4, 15), | |
867 | }, | |
868 | .pcie_rst = IMX_GPIO_NR(1, 29), | |
869 | .mezz_pwren = IMX_GPIO_NR(2, 19), | |
870 | .mezz_irq = IMX_GPIO_NR(2, 18), | |
871 | .gps_shdn = IMX_GPIO_NR(1, 27), | |
872 | .vidin_en = IMX_GPIO_NR(3, 31), | |
873 | .usb_sel = IMX_GPIO_NR(1, 2), | |
874 | .wdis = IMX_GPIO_NR(7, 12), | |
5c55572f | 875 | .msata_en = GP_MSATA_SEL, |
e49621b3 | 876 | .rs232_en = GP_RS232_EN, |
f938500f | 877 | .otgpwr_en = IMX_GPIO_NR(3, 22), |
f3a8546b | 878 | .vsel_pin = IMX_GPIO_NR(6, 14), |
8d1a6ff8 | 879 | .mmc_cd = IMX_GPIO_NR(7, 0), |
e56c5791 TH |
880 | }, |
881 | ||
882 | /* GW53xx */ | |
883 | { | |
884 | .gpio_pads = gw53xx_gpio_pads, | |
885 | .num_pads = ARRAY_SIZE(gw53xx_gpio_pads)/2, | |
1800ffa8 TH |
886 | .dio_cfg = gw53xx_dio, |
887 | .dio_num = ARRAY_SIZE(gw53xx_dio), | |
e56c5791 TH |
888 | .leds = { |
889 | IMX_GPIO_NR(4, 6), | |
890 | IMX_GPIO_NR(4, 7), | |
891 | IMX_GPIO_NR(4, 15), | |
892 | }, | |
893 | .pcie_rst = IMX_GPIO_NR(1, 29), | |
894 | .mezz_pwren = IMX_GPIO_NR(2, 19), | |
895 | .mezz_irq = IMX_GPIO_NR(2, 18), | |
896 | .gps_shdn = IMX_GPIO_NR(1, 27), | |
897 | .vidin_en = IMX_GPIO_NR(3, 31), | |
898 | .wdis = IMX_GPIO_NR(7, 12), | |
5c55572f | 899 | .msata_en = GP_MSATA_SEL, |
e49621b3 | 900 | .rs232_en = GP_RS232_EN, |
f938500f | 901 | .otgpwr_en = IMX_GPIO_NR(3, 22), |
f3a8546b | 902 | .vsel_pin = IMX_GPIO_NR(6, 14), |
8d1a6ff8 | 903 | .mmc_cd = IMX_GPIO_NR(7, 0), |
e56c5791 TH |
904 | }, |
905 | ||
906 | /* GW54xx */ | |
907 | { | |
908 | .gpio_pads = gw54xx_gpio_pads, | |
909 | .num_pads = ARRAY_SIZE(gw54xx_gpio_pads)/2, | |
1800ffa8 TH |
910 | .dio_cfg = gw54xx_dio, |
911 | .dio_num = ARRAY_SIZE(gw54xx_dio), | |
e56c5791 TH |
912 | .leds = { |
913 | IMX_GPIO_NR(4, 6), | |
914 | IMX_GPIO_NR(4, 7), | |
915 | IMX_GPIO_NR(4, 15), | |
916 | }, | |
917 | .pcie_rst = IMX_GPIO_NR(1, 29), | |
918 | .mezz_pwren = IMX_GPIO_NR(2, 19), | |
919 | .mezz_irq = IMX_GPIO_NR(2, 18), | |
920 | .rs485en = IMX_GPIO_NR(7, 1), | |
921 | .vidin_en = IMX_GPIO_NR(3, 31), | |
922 | .dioi2c_en = IMX_GPIO_NR(4, 5), | |
923 | .pcie_sson = IMX_GPIO_NR(1, 20), | |
924 | .wdis = IMX_GPIO_NR(5, 17), | |
5c55572f | 925 | .msata_en = GP_MSATA_SEL, |
e49621b3 | 926 | .rs232_en = GP_RS232_EN, |
f938500f | 927 | .otgpwr_en = IMX_GPIO_NR(3, 22), |
f3a8546b | 928 | .vsel_pin = IMX_GPIO_NR(6, 14), |
8d1a6ff8 | 929 | .mmc_cd = IMX_GPIO_NR(7, 0), |
e56c5791 TH |
930 | }, |
931 | ||
932 | /* GW551x */ | |
933 | { | |
934 | .gpio_pads = gw551x_gpio_pads, | |
935 | .num_pads = ARRAY_SIZE(gw551x_gpio_pads)/2, | |
1800ffa8 TH |
936 | .dio_cfg = gw551x_dio, |
937 | .dio_num = ARRAY_SIZE(gw551x_dio), | |
e56c5791 TH |
938 | .leds = { |
939 | IMX_GPIO_NR(4, 7), | |
940 | }, | |
941 | .pcie_rst = IMX_GPIO_NR(1, 0), | |
942 | .wdis = IMX_GPIO_NR(7, 12), | |
943 | }, | |
944 | ||
945 | /* GW552x */ | |
946 | { | |
947 | .gpio_pads = gw552x_gpio_pads, | |
948 | .num_pads = ARRAY_SIZE(gw552x_gpio_pads)/2, | |
1800ffa8 TH |
949 | .dio_cfg = gw552x_dio, |
950 | .dio_num = ARRAY_SIZE(gw552x_dio), | |
e56c5791 TH |
951 | .leds = { |
952 | IMX_GPIO_NR(4, 6), | |
953 | IMX_GPIO_NR(4, 7), | |
954 | IMX_GPIO_NR(4, 15), | |
955 | }, | |
956 | .pcie_rst = IMX_GPIO_NR(1, 29), | |
9a83a815 | 957 | .usb_sel = IMX_GPIO_NR(1, 7), |
e56c5791 | 958 | .wdis = IMX_GPIO_NR(7, 12), |
5c55572f | 959 | .msata_en = GP_MSATA_SEL, |
e56c5791 | 960 | }, |
385575bc TH |
961 | |
962 | /* GW553x */ | |
963 | { | |
964 | .gpio_pads = gw553x_gpio_pads, | |
965 | .num_pads = ARRAY_SIZE(gw553x_gpio_pads)/2, | |
1800ffa8 TH |
966 | .dio_cfg = gw553x_dio, |
967 | .dio_num = ARRAY_SIZE(gw553x_dio), | |
385575bc TH |
968 | .leds = { |
969 | IMX_GPIO_NR(4, 10), | |
970 | IMX_GPIO_NR(4, 11), | |
971 | }, | |
972 | .pcie_rst = IMX_GPIO_NR(1, 0), | |
973 | .vidin_en = IMX_GPIO_NR(5, 20), | |
974 | .wdis = IMX_GPIO_NR(7, 12), | |
f938500f | 975 | .otgpwr_en = IMX_GPIO_NR(3, 22), |
f3a8546b | 976 | .vsel_pin = IMX_GPIO_NR(6, 14), |
8d1a6ff8 TH |
977 | .mmc_cd = IMX_GPIO_NR(7, 0), |
978 | }, | |
979 | ||
94a1d6c6 TH |
980 | /* GW560x */ |
981 | { | |
982 | .gpio_pads = gw560x_gpio_pads, | |
983 | .num_pads = ARRAY_SIZE(gw560x_gpio_pads)/2, | |
984 | .dio_cfg = gw560x_dio, | |
985 | .dio_num = ARRAY_SIZE(gw560x_dio), | |
986 | .leds = { | |
987 | IMX_GPIO_NR(4, 6), | |
988 | IMX_GPIO_NR(4, 7), | |
989 | IMX_GPIO_NR(4, 15), | |
990 | }, | |
991 | .pcie_rst = IMX_GPIO_NR(4, 31), | |
992 | .mezz_pwren = IMX_GPIO_NR(2, 19), | |
993 | .mezz_irq = IMX_GPIO_NR(2, 18), | |
994 | .rs232_en = GP_RS232_EN, | |
995 | .vidin_en = IMX_GPIO_NR(3, 31), | |
996 | .wdis = IMX_GPIO_NR(7, 12), | |
997 | .otgpwr_en = IMX_GPIO_NR(4, 15), | |
998 | .mmc_cd = IMX_GPIO_NR(7, 0), | |
999 | }, | |
1000 | ||
214fb19b TH |
1001 | /* GW5903 */ |
1002 | { | |
1003 | .gpio_pads = gw5903_gpio_pads, | |
1004 | .num_pads = ARRAY_SIZE(gw5903_gpio_pads)/2, | |
1005 | .dio_cfg = gw5903_dio, | |
1006 | .dio_num = ARRAY_SIZE(gw5903_dio), | |
1007 | .leds = { | |
1008 | IMX_GPIO_NR(6, 14), | |
1009 | }, | |
1010 | .otgpwr_en = IMX_GPIO_NR(4, 15), | |
1011 | .mmc_cd = IMX_GPIO_NR(6, 11), | |
1012 | }, | |
1013 | ||
8d1a6ff8 TH |
1014 | /* GW5904 */ |
1015 | { | |
1016 | .gpio_pads = gw5904_gpio_pads, | |
1017 | .num_pads = ARRAY_SIZE(gw5904_gpio_pads)/2, | |
1018 | .dio_cfg = gw5904_dio, | |
1019 | .dio_num = ARRAY_SIZE(gw5904_dio), | |
1020 | .leds = { | |
1021 | IMX_GPIO_NR(4, 6), | |
1022 | IMX_GPIO_NR(4, 7), | |
1023 | IMX_GPIO_NR(4, 15), | |
1024 | }, | |
1025 | .pcie_rst = IMX_GPIO_NR(1, 0), | |
1026 | .mezz_pwren = IMX_GPIO_NR(2, 19), | |
1027 | .mezz_irq = IMX_GPIO_NR(2, 18), | |
1028 | .otgpwr_en = IMX_GPIO_NR(3, 22), | |
385575bc | 1029 | }, |
e56c5791 TH |
1030 | }; |
1031 | ||
1032 | void setup_iomux_gpio(int board, struct ventana_board_info *info) | |
1033 | { | |
1034 | int i; | |
1035 | ||
e56c5791 TH |
1036 | if (board >= GW_UNKNOWN) |
1037 | return; | |
1038 | ||
1039 | /* board specific iomux */ | |
1040 | imx_iomux_v3_setup_multiple_pads(gpio_cfg[board].gpio_pads, | |
1041 | gpio_cfg[board].num_pads); | |
1042 | ||
e49621b3 TH |
1043 | /* RS232_EN# */ |
1044 | if (gpio_cfg[board].rs232_en) { | |
095968f1 | 1045 | gpio_request(gpio_cfg[board].rs232_en, "rs232_en#"); |
e49621b3 TH |
1046 | gpio_direction_output(gpio_cfg[board].rs232_en, 0); |
1047 | } | |
1048 | ||
e56c5791 TH |
1049 | /* GW522x Uses GPIO3_IO23 for PCIE_RST# */ |
1050 | if (board == GW52xx && info->model[4] == '2') | |
1051 | gpio_cfg[board].pcie_rst = IMX_GPIO_NR(3, 23); | |
1052 | ||
1053 | /* assert PCI_RST# */ | |
1054 | gpio_request(gpio_cfg[board].pcie_rst, "pci_rst#"); | |
1055 | gpio_direction_output(gpio_cfg[board].pcie_rst, 0); | |
1056 | ||
1057 | /* turn off (active-high) user LED's */ | |
1058 | for (i = 0; i < ARRAY_SIZE(gpio_cfg[board].leds); i++) { | |
1059 | char name[16]; | |
1060 | if (gpio_cfg[board].leds[i]) { | |
1061 | sprintf(name, "led_user%d", i); | |
1062 | gpio_request(gpio_cfg[board].leds[i], name); | |
1063 | gpio_direction_output(gpio_cfg[board].leds[i], 1); | |
1064 | } | |
1065 | } | |
1066 | ||
5c55572f TH |
1067 | /* MSATA Enable - default to PCI */ |
1068 | if (gpio_cfg[board].msata_en) { | |
1069 | gpio_request(gpio_cfg[board].msata_en, "msata_en"); | |
1070 | gpio_direction_output(gpio_cfg[board].msata_en, 0); | |
1071 | } | |
1072 | ||
e56c5791 TH |
1073 | /* Expansion Mezzanine IO */ |
1074 | if (gpio_cfg[board].mezz_pwren) { | |
1075 | gpio_request(gpio_cfg[board].mezz_pwren, "mezz_pwr"); | |
1076 | gpio_direction_output(gpio_cfg[board].mezz_pwren, 0); | |
1077 | } | |
1078 | if (gpio_cfg[board].mezz_irq) { | |
1079 | gpio_request(gpio_cfg[board].mezz_irq, "mezz_irq#"); | |
1080 | gpio_direction_input(gpio_cfg[board].mezz_irq); | |
1081 | } | |
1082 | ||
1083 | /* RS485 Transmit Enable */ | |
1084 | if (gpio_cfg[board].rs485en) { | |
1085 | gpio_request(gpio_cfg[board].rs485en, "rs485_en"); | |
1086 | gpio_direction_output(gpio_cfg[board].rs485en, 0); | |
1087 | } | |
1088 | ||
1089 | /* GPS_SHDN */ | |
1090 | if (gpio_cfg[board].gps_shdn) { | |
1091 | gpio_request(gpio_cfg[board].gps_shdn, "gps_shdn"); | |
1092 | gpio_direction_output(gpio_cfg[board].gps_shdn, 1); | |
1093 | } | |
1094 | ||
1095 | /* Analog video codec power enable */ | |
1096 | if (gpio_cfg[board].vidin_en) { | |
1097 | gpio_request(gpio_cfg[board].vidin_en, "anavidin_en"); | |
1098 | gpio_direction_output(gpio_cfg[board].vidin_en, 1); | |
1099 | } | |
1100 | ||
1101 | /* DIOI2C_DIS# */ | |
1102 | if (gpio_cfg[board].dioi2c_en) { | |
1103 | gpio_request(gpio_cfg[board].dioi2c_en, "dioi2c_dis#"); | |
1104 | gpio_direction_output(gpio_cfg[board].dioi2c_en, 0); | |
1105 | } | |
1106 | ||
1107 | /* PCICK_SSON: disable spread-spectrum clock */ | |
1108 | if (gpio_cfg[board].pcie_sson) { | |
1109 | gpio_request(gpio_cfg[board].pcie_sson, "pci_sson"); | |
1110 | gpio_direction_output(gpio_cfg[board].pcie_sson, 0); | |
1111 | } | |
1112 | ||
1113 | /* USBOTG mux routing */ | |
1114 | if (gpio_cfg[board].usb_sel) { | |
1115 | gpio_request(gpio_cfg[board].usb_sel, "usb_pcisel"); | |
1116 | gpio_direction_output(gpio_cfg[board].usb_sel, 0); | |
1117 | } | |
1118 | ||
1119 | /* PCISKT_WDIS# (Wireless disable GPIO to miniPCIe sockets) */ | |
1120 | if (gpio_cfg[board].wdis) { | |
1121 | gpio_request(gpio_cfg[board].wdis, "wlan_dis"); | |
1122 | gpio_direction_output(gpio_cfg[board].wdis, 1); | |
1123 | } | |
34b080b7 | 1124 | |
f938500f TH |
1125 | /* OTG power off */ |
1126 | if (gpio_cfg[board].otgpwr_en) { | |
1127 | gpio_request(gpio_cfg[board].otgpwr_en, "usbotg_pwr"); | |
1128 | gpio_direction_output(gpio_cfg[board].otgpwr_en, 0); | |
1129 | } | |
1130 | ||
34b080b7 | 1131 | /* sense vselect pin to see if we support uhs-i */ |
f3a8546b TH |
1132 | if (gpio_cfg[board].vsel_pin) { |
1133 | gpio_request(gpio_cfg[board].vsel_pin, "sd3_vselect"); | |
1134 | gpio_direction_input(gpio_cfg[board].vsel_pin); | |
1135 | gpio_cfg[board].usd_vsel = !gpio_get_value(gpio_cfg[board].vsel_pin); | |
1136 | } | |
8d1a6ff8 TH |
1137 | |
1138 | /* microSD CD */ | |
1139 | if (gpio_cfg[board].mmc_cd) { | |
1140 | gpio_request(gpio_cfg[board].mmc_cd, "sd_cd"); | |
1141 | gpio_direction_input(gpio_cfg[board].mmc_cd); | |
1142 | } | |
1143 | ||
1144 | /* Anything else board specific */ | |
1145 | switch(board) { | |
94a1d6c6 TH |
1146 | case GW560x: |
1147 | gpio_request(IMX_GPIO_NR(4, 26), "12p0_en"); | |
1148 | gpio_direction_output(IMX_GPIO_NR(4, 26), 1); | |
1149 | break; | |
214fb19b TH |
1150 | case GW5903: |
1151 | gpio_request(IMX_GPIO_NR(3, 31) , "usbh1-ehci_pwr"); | |
1152 | gpio_direction_output(IMX_GPIO_NR(3, 31), 1); | |
1153 | gpio_request(IMX_GPIO_NR(4, 15) , "usbh2-otg_pwr"); | |
1154 | gpio_direction_output(IMX_GPIO_NR(4, 15), 1); | |
1155 | gpio_request(IMX_GPIO_NR(4, 7) , "usbdpc_pwr"); | |
1156 | gpio_direction_output(IMX_GPIO_NR(4, 15), 1); | |
1157 | gpio_request(IMX_GPIO_NR(1, 25) , "rgmii_en"); | |
1158 | gpio_direction_output(IMX_GPIO_NR(1, 25), 1); | |
1159 | gpio_request(IMX_GPIO_NR(4, 6) , "touch_irq#"); | |
1160 | gpio_direction_input(IMX_GPIO_NR(4, 6)); | |
1161 | gpio_request(IMX_GPIO_NR(4, 8) , "touch_rst"); | |
1162 | gpio_direction_output(IMX_GPIO_NR(4, 8), 1); | |
1163 | gpio_request(IMX_GPIO_NR(1, 7) , "bklt_12ven"); | |
1164 | gpio_direction_output(IMX_GPIO_NR(1, 7), 1); | |
1165 | break; | |
8d1a6ff8 TH |
1166 | case GW5904: |
1167 | gpio_request(IMX_GPIO_NR(5, 11), "skt1_wdis#"); | |
1168 | gpio_direction_output(IMX_GPIO_NR(5, 11), 1); | |
1169 | gpio_request(IMX_GPIO_NR(5, 12), "skt1_rst#"); | |
1170 | gpio_direction_output(IMX_GPIO_NR(5, 12), 1); | |
1171 | gpio_request(IMX_GPIO_NR(5, 13), "skt2_wdis#"); | |
1172 | gpio_direction_output(IMX_GPIO_NR(5, 13), 1); | |
1173 | gpio_request(IMX_GPIO_NR(1, 15), "m2_off#"); | |
1174 | gpio_direction_output(IMX_GPIO_NR(1, 15), 1); | |
1175 | gpio_request(IMX_GPIO_NR(1, 14), "m2_wdis#"); | |
1176 | gpio_direction_output(IMX_GPIO_NR(1, 14), 1); | |
1177 | gpio_request(IMX_GPIO_NR(1, 13), "m2_rst#"); | |
1178 | gpio_direction_output(IMX_GPIO_NR(1, 13), 1); | |
1179 | break; | |
1180 | } | |
e56c5791 TH |
1181 | } |
1182 | ||
1183 | /* setup GPIO pinmux and default configuration per baseboard and env */ | |
1184 | void setup_board_gpio(int board, struct ventana_board_info *info) | |
1185 | { | |
1186 | const char *s; | |
1187 | char arg[10]; | |
1188 | size_t len; | |
1189 | int i; | |
1190 | int quiet = simple_strtol(getenv("quiet"), NULL, 10); | |
1191 | ||
1192 | if (board >= GW_UNKNOWN) | |
1193 | return; | |
1194 | ||
1195 | /* RS232_EN# */ | |
e49621b3 TH |
1196 | if (gpio_cfg[board].rs232_en) { |
1197 | gpio_direction_output(gpio_cfg[board].rs232_en, | |
1198 | (hwconfig("rs232")) ? 0 : 1); | |
1199 | } | |
e56c5791 TH |
1200 | |
1201 | /* MSATA Enable */ | |
5c55572f | 1202 | if (gpio_cfg[board].msata_en && is_cpu_type(MXC_CPU_MX6Q)) { |
e56c5791 | 1203 | gpio_direction_output(GP_MSATA_SEL, |
5c55572f | 1204 | (hwconfig("msata")) ? 1 : 0); |
e56c5791 TH |
1205 | } |
1206 | ||
1207 | /* USBOTG Select (PCISKT or FrontPanel) */ | |
1208 | if (gpio_cfg[board].usb_sel) { | |
1209 | gpio_direction_output(gpio_cfg[board].usb_sel, | |
1210 | (hwconfig("usb_pcisel")) ? 1 : 0); | |
1211 | } | |
1212 | ||
1213 | /* | |
1214 | * Configure DIO pinmux/padctl registers | |
1215 | * see IMX6DQRM/IMX6SDLRM IOMUXC_SW_PAD_CTL_PAD_* register definitions | |
1216 | */ | |
1800ffa8 | 1217 | for (i = 0; i < gpio_cfg[board].dio_num; i++) { |
e56c5791 TH |
1218 | struct dio_cfg *cfg = &gpio_cfg[board].dio_cfg[i]; |
1219 | iomux_v3_cfg_t ctrl = DIO_PAD_CFG; | |
1220 | unsigned cputype = is_cpu_type(MXC_CPU_MX6Q) ? 0 : 1; | |
1221 | ||
1222 | if (!cfg->gpio_padmux[0] && !cfg->gpio_padmux[1]) | |
1223 | continue; | |
1224 | sprintf(arg, "dio%d", i); | |
1225 | if (!hwconfig(arg)) | |
1226 | continue; | |
1227 | s = hwconfig_subarg(arg, "padctrl", &len); | |
1228 | if (s) { | |
1229 | ctrl = MUX_PAD_CTRL(simple_strtoul(s, NULL, 16) | |
1230 | & 0x1ffff) | MUX_MODE_SION; | |
1231 | } | |
1232 | if (hwconfig_subarg_cmp(arg, "mode", "gpio")) { | |
1233 | if (!quiet) { | |
1234 | printf("DIO%d: GPIO%d_IO%02d (gpio-%d)\n", i, | |
1235 | (cfg->gpio_param/32)+1, | |
1236 | cfg->gpio_param%32, | |
1237 | cfg->gpio_param); | |
1238 | } | |
1239 | imx_iomux_v3_setup_pad(cfg->gpio_padmux[cputype] | | |
1240 | ctrl); | |
1241 | gpio_requestf(cfg->gpio_param, "dio%d", i); | |
1242 | gpio_direction_input(cfg->gpio_param); | |
83e00f19 | 1243 | } else if (hwconfig_subarg_cmp(arg, "mode", "pwm") && |
e56c5791 | 1244 | cfg->pwm_padmux) { |
f17a9af8 TH |
1245 | if (!cfg->pwm_param) { |
1246 | printf("DIO%d: Error: pwm config invalid\n", | |
1247 | i); | |
1248 | continue; | |
1249 | } | |
e56c5791 TH |
1250 | if (!quiet) |
1251 | printf("DIO%d: pwm%d\n", i, cfg->pwm_param); | |
1252 | imx_iomux_v3_setup_pad(cfg->pwm_padmux[cputype] | | |
1253 | MUX_PAD_CTRL(ctrl)); | |
1254 | } | |
1255 | } | |
1256 | ||
1257 | if (!quiet) { | |
5c55572f | 1258 | if (gpio_cfg[board].msata_en && is_cpu_type(MXC_CPU_MX6Q)) { |
e56c5791 TH |
1259 | printf("MSATA: %s\n", (hwconfig("msata") ? |
1260 | "enabled" : "disabled")); | |
1261 | } | |
e49621b3 TH |
1262 | if (gpio_cfg[board].rs232_en) { |
1263 | printf("RS232: %s\n", (hwconfig("rs232")) ? | |
1264 | "enabled" : "disabled"); | |
1265 | } | |
e56c5791 TH |
1266 | } |
1267 | } | |
1268 | ||
1269 | /* setup board specific PMIC */ | |
6d38f3a8 | 1270 | void setup_pmic(void) |
e56c5791 TH |
1271 | { |
1272 | struct pmic *p; | |
94a1d6c6 TH |
1273 | struct ventana_board_info ventana_info; |
1274 | int board = read_eeprom(CONFIG_I2C_GSC, &ventana_info); | |
0fd28b1f | 1275 | const int i2c_pmic = 1; |
e56c5791 TH |
1276 | u32 reg; |
1277 | ||
0fd28b1f | 1278 | i2c_set_bus_num(i2c_pmic); |
6d38f3a8 | 1279 | |
e56c5791 | 1280 | /* configure PFUZE100 PMIC */ |
6d38f3a8 TH |
1281 | if (!i2c_probe(CONFIG_POWER_PFUZE100_I2C_ADDR)) { |
1282 | debug("probed PFUZE100@0x%x\n", CONFIG_POWER_PFUZE100_I2C_ADDR); | |
0fd28b1f | 1283 | power_pfuze100_init(i2c_pmic); |
e56c5791 TH |
1284 | p = pmic_get("PFUZE100"); |
1285 | if (p && !pmic_probe(p)) { | |
1286 | pmic_reg_read(p, PFUZE100_DEVICEID, ®); | |
1287 | printf("PMIC: PFUZE100 ID=0x%02x\n", reg); | |
1288 | ||
1289 | /* Set VGEN1 to 1.5V and enable */ | |
1290 | pmic_reg_read(p, PFUZE100_VGEN1VOL, ®); | |
1291 | reg &= ~(LDO_VOL_MASK); | |
1292 | reg |= (LDOA_1_50V | LDO_EN); | |
1293 | pmic_reg_write(p, PFUZE100_VGEN1VOL, reg); | |
1294 | ||
1295 | /* Set SWBST to 5.0V and enable */ | |
1296 | pmic_reg_read(p, PFUZE100_SWBSTCON1, ®); | |
1297 | reg &= ~(SWBST_MODE_MASK | SWBST_VOL_MASK); | |
18e02ffe | 1298 | reg |= (SWBST_5_00V | (SWBST_MODE_AUTO << SWBST_MODE_SHIFT)); |
e56c5791 TH |
1299 | pmic_reg_write(p, PFUZE100_SWBSTCON1, reg); |
1300 | } | |
1301 | } | |
1302 | ||
1303 | /* configure LTC3676 PMIC */ | |
6d38f3a8 TH |
1304 | else if (!i2c_probe(CONFIG_POWER_LTC3676_I2C_ADDR)) { |
1305 | debug("probed LTC3676@0x%x\n", CONFIG_POWER_LTC3676_I2C_ADDR); | |
0fd28b1f | 1306 | power_ltc3676_init(i2c_pmic); |
e56c5791 | 1307 | p = pmic_get("LTC3676_PMIC"); |
94a1d6c6 TH |
1308 | if (!p || pmic_probe(p)) |
1309 | return; | |
1310 | puts("PMIC: LTC3676\n"); | |
1311 | /* | |
1312 | * set board-specific scalar for max CPU frequency | |
1313 | * per CPU based on the LDO enabled Operating Ranges | |
1314 | * defined in the respective IMX6DQ and IMX6SDL | |
1315 | * datasheets. The voltage resulting from the R1/R2 | |
1316 | * feedback inputs on Ventana is 1308mV. Note that this | |
1317 | * is a bit shy of the Vmin of 1350mV in the datasheet | |
1318 | * for LDO enabled mode but is as high as we can go. | |
1319 | */ | |
1320 | switch (board) { | |
1321 | case GW560x: | |
1322 | /* mask PGOOD during SW3 transition */ | |
1323 | pmic_reg_write(p, LTC3676_DVB3B, | |
1324 | 0x1f | LTC3676_PGOOD_MASK); | |
1325 | /* set SW3 (VDD_ARM) */ | |
1326 | pmic_reg_write(p, LTC3676_DVB3A, 0x1f); | |
1327 | break; | |
214fb19b | 1328 | case GW5903: |
d576d6f3 TH |
1329 | /* mask PGOOD during SW1 transition */ |
1330 | pmic_reg_write(p, LTC3676_DVB3B, | |
1331 | 0x1f | LTC3676_PGOOD_MASK); | |
1332 | /* set SW3 (VDD_ARM) */ | |
1333 | pmic_reg_write(p, LTC3676_DVB3A, 0x1f); | |
1334 | ||
214fb19b TH |
1335 | /* mask PGOOD during SW4 transition */ |
1336 | pmic_reg_write(p, LTC3676_DVB4B, | |
1337 | 0x1f | LTC3676_PGOOD_MASK); | |
1338 | /* set SW4 (VDD_SOC) */ | |
1339 | pmic_reg_write(p, LTC3676_DVB4A, 0x1f); | |
1340 | break; | |
94a1d6c6 | 1341 | default: |
e56c5791 TH |
1342 | /* mask PGOOD during SW1 transition */ |
1343 | pmic_reg_write(p, LTC3676_DVB1B, | |
1344 | 0x1f | LTC3676_PGOOD_MASK); | |
1345 | /* set SW1 (VDD_SOC) */ | |
1346 | pmic_reg_write(p, LTC3676_DVB1A, 0x1f); | |
1347 | ||
1348 | /* mask PGOOD during SW3 transition */ | |
1349 | pmic_reg_write(p, LTC3676_DVB3B, | |
1350 | 0x1f | LTC3676_PGOOD_MASK); | |
1351 | /* set SW3 (VDD_ARM) */ | |
1352 | pmic_reg_write(p, LTC3676_DVB3A, 0x1f); | |
1353 | } | |
1354 | } | |
1355 | } | |
65da5c3b TH |
1356 | |
1357 | #ifdef CONFIG_FSL_ESDHC | |
94a1d6c6 | 1358 | static struct fsl_esdhc_cfg usdhc_cfg[2]; |
65da5c3b TH |
1359 | |
1360 | int board_mmc_init(bd_t *bis) | |
1361 | { | |
8d1a6ff8 TH |
1362 | struct ventana_board_info ventana_info; |
1363 | int board_type = read_eeprom(CONFIG_I2C_GSC, &ventana_info); | |
1364 | int ret; | |
1365 | ||
1366 | switch (board_type) { | |
1367 | case GW52xx: | |
1368 | case GW53xx: | |
1369 | case GW54xx: | |
1370 | case GW553x: | |
1371 | /* usdhc3: 4bit microSD */ | |
1372 | SETUP_IOMUX_PADS(usdhc3_pads); | |
94a1d6c6 TH |
1373 | usdhc_cfg[0].esdhc_base = USDHC3_BASE_ADDR; |
1374 | usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK); | |
1375 | usdhc_cfg[0].max_bus_width = 4; | |
1376 | return fsl_esdhc_initialize(bis, &usdhc_cfg[0]); | |
1377 | case GW560x: | |
1378 | /* usdhc2: 8-bit eMMC */ | |
1379 | SETUP_IOMUX_PADS(gw560x_emmc_sd2_pads); | |
1380 | usdhc_cfg[0].esdhc_base = USDHC2_BASE_ADDR; | |
1381 | usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC2_CLK); | |
1382 | usdhc_cfg[0].max_bus_width = 8; | |
1383 | ret = fsl_esdhc_initialize(bis, &usdhc_cfg[0]); | |
1384 | if (ret) | |
1385 | return ret; | |
1386 | /* usdhc3: 4-bit microSD */ | |
1387 | SETUP_IOMUX_PADS(usdhc3_pads); | |
1388 | usdhc_cfg[1].esdhc_base = USDHC3_BASE_ADDR; | |
1389 | usdhc_cfg[1].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK); | |
1390 | usdhc_cfg[1].max_bus_width = 4; | |
1391 | return fsl_esdhc_initialize(bis, &usdhc_cfg[1]); | |
214fb19b TH |
1392 | case GW5903: |
1393 | /* usdhc3: 8-bit eMMC */ | |
1394 | SETUP_IOMUX_PADS(gw5904_emmc_pads); | |
1395 | usdhc_cfg[0].esdhc_base = USDHC3_BASE_ADDR; | |
1396 | usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK); | |
1397 | usdhc_cfg[0].max_bus_width = 8; | |
1398 | ret = fsl_esdhc_initialize(bis, &usdhc_cfg[0]); | |
1399 | if (ret) | |
1400 | return ret; | |
1401 | /* usdhc2: 4-bit microSD */ | |
1402 | SETUP_IOMUX_PADS(gw5904_mmc_pads); | |
1403 | usdhc_cfg[1].esdhc_base = USDHC2_BASE_ADDR; | |
1404 | usdhc_cfg[1].sdhc_clk = mxc_get_clock(MXC_ESDHC2_CLK); | |
1405 | usdhc_cfg[1].max_bus_width = 4; | |
1406 | return fsl_esdhc_initialize(bis, &usdhc_cfg[1]); | |
8d1a6ff8 TH |
1407 | case GW5904: |
1408 | /* usdhc3: 8bit eMMC */ | |
1409 | SETUP_IOMUX_PADS(gw5904_emmc_pads); | |
94a1d6c6 TH |
1410 | usdhc_cfg[0].esdhc_base = USDHC3_BASE_ADDR; |
1411 | usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK); | |
1412 | usdhc_cfg[0].max_bus_width = 8; | |
1413 | return fsl_esdhc_initialize(bis, &usdhc_cfg[0]); | |
8d1a6ff8 TH |
1414 | default: |
1415 | /* doesn't have MMC */ | |
1416 | return -1; | |
1417 | } | |
65da5c3b TH |
1418 | } |
1419 | ||
1420 | int board_mmc_getcd(struct mmc *mmc) | |
1421 | { | |
8d1a6ff8 TH |
1422 | struct ventana_board_info ventana_info; |
1423 | struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv; | |
1424 | int board = read_eeprom(CONFIG_I2C_GSC, &ventana_info); | |
1425 | int gpio = gpio_cfg[board].mmc_cd; | |
1426 | ||
65da5c3b | 1427 | /* Card Detect */ |
8d1a6ff8 | 1428 | switch (board) { |
94a1d6c6 TH |
1429 | case GW560x: |
1430 | /* emmc is always present */ | |
1431 | if (cfg->esdhc_base == USDHC2_BASE_ADDR) | |
1432 | return 1; | |
1433 | break; | |
214fb19b | 1434 | case GW5903: |
8d1a6ff8 TH |
1435 | case GW5904: |
1436 | /* emmc is always present */ | |
1437 | if (cfg->esdhc_base == USDHC3_BASE_ADDR) | |
1438 | return 1; | |
1439 | break; | |
1440 | } | |
1441 | ||
1442 | if (gpio) { | |
1443 | debug("%s: gpio%d=%d\n", __func__, gpio, gpio_get_value(gpio)); | |
1444 | return !gpio_get_value(gpio); | |
1445 | } | |
1446 | ||
1447 | return -1; | |
65da5c3b | 1448 | } |
8d1a6ff8 | 1449 | |
65da5c3b | 1450 | #endif /* CONFIG_FSL_ESDHC */ |