1e56c5791STim Harvey /*
2e56c5791STim Harvey * Copyright (C) 2013 Gateworks Corporation
3e56c5791STim Harvey *
4e56c5791STim Harvey * Author: Tim Harvey <tharvey@gateworks.com>
5e56c5791STim Harvey *
6e56c5791STim Harvey * SPDX-License-Identifier: GPL-2.0+
7e56c5791STim Harvey */
8e56c5791STim Harvey
965da5c3bSTim Harvey #include <asm/arch/clock.h>
10e56c5791STim Harvey #include <asm/arch/mx6-pins.h>
11e56c5791STim Harvey #include <asm/arch/sys_proto.h>
12e56c5791STim Harvey #include <asm/gpio.h>
13552a848eSStefano Babic #include <asm/mach-imx/mxc_i2c.h>
1465da5c3bSTim Harvey #include <fsl_esdhc.h>
15e56c5791STim Harvey #include <hwconfig.h>
16e56c5791STim Harvey #include <power/pmic.h>
17e56c5791STim Harvey #include <power/ltc3676_pmic.h>
18e56c5791STim Harvey #include <power/pfuze100_pmic.h>
19e56c5791STim Harvey
20e56c5791STim Harvey #include "common.h"
21e56c5791STim Harvey
22e56c5791STim Harvey /* UART1: Function varies per baseboard */
23e56c5791STim Harvey static iomux_v3_cfg_t const uart1_pads[] = {
24e56c5791STim Harvey IOMUX_PADS(PAD_SD3_DAT6__UART1_RX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL)),
25e56c5791STim Harvey IOMUX_PADS(PAD_SD3_DAT7__UART1_TX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL)),
26e56c5791STim Harvey };
27e56c5791STim Harvey
28e56c5791STim Harvey /* UART2: Serial Console */
29e56c5791STim Harvey static iomux_v3_cfg_t const uart2_pads[] = {
30e56c5791STim Harvey IOMUX_PADS(PAD_SD4_DAT7__UART2_TX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL)),
31e56c5791STim Harvey IOMUX_PADS(PAD_SD4_DAT4__UART2_RX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL)),
32e56c5791STim Harvey };
33e56c5791STim Harvey
setup_iomux_uart(void)34e56c5791STim Harvey void setup_iomux_uart(void)
35e56c5791STim Harvey {
36e56c5791STim Harvey SETUP_IOMUX_PADS(uart1_pads);
37e56c5791STim Harvey SETUP_IOMUX_PADS(uart2_pads);
38e56c5791STim Harvey }
39e56c5791STim Harvey
4065da5c3bSTim Harvey /* MMC */
418d1a6ff8STim Harvey static iomux_v3_cfg_t const gw5904_emmc_pads[] = {
428d1a6ff8STim Harvey IOMUX_PADS(PAD_SD3_DAT0__SD3_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
438d1a6ff8STim Harvey IOMUX_PADS(PAD_SD3_DAT1__SD3_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
448d1a6ff8STim Harvey IOMUX_PADS(PAD_SD3_DAT2__SD3_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
458d1a6ff8STim Harvey IOMUX_PADS(PAD_SD3_DAT3__SD3_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
468d1a6ff8STim Harvey IOMUX_PADS(PAD_SD3_DAT4__SD3_DATA4 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
478d1a6ff8STim Harvey IOMUX_PADS(PAD_SD3_DAT5__SD3_DATA5 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
488d1a6ff8STim Harvey IOMUX_PADS(PAD_SD3_DAT6__SD3_DATA6 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
498d1a6ff8STim Harvey IOMUX_PADS(PAD_SD3_DAT7__SD3_DATA7 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
508d1a6ff8STim Harvey IOMUX_PADS(PAD_SD3_CLK__SD3_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
518d1a6ff8STim Harvey IOMUX_PADS(PAD_SD3_CMD__SD3_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
528d1a6ff8STim Harvey IOMUX_PADS(PAD_SD3_RST__SD3_RESET | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
538d1a6ff8STim Harvey };
54214fb19bSTim Harvey /* 4-bit microSD on SD2 */
55214fb19bSTim Harvey static iomux_v3_cfg_t const gw5904_mmc_pads[] = {
56214fb19bSTim Harvey IOMUX_PADS(PAD_SD2_CLK__SD2_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
57214fb19bSTim Harvey IOMUX_PADS(PAD_SD2_CMD__SD2_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
58214fb19bSTim Harvey IOMUX_PADS(PAD_SD2_DAT0__SD2_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
59214fb19bSTim Harvey IOMUX_PADS(PAD_SD2_DAT1__SD2_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
60214fb19bSTim Harvey IOMUX_PADS(PAD_SD2_DAT2__SD2_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
61214fb19bSTim Harvey IOMUX_PADS(PAD_SD2_DAT3__SD2_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
62214fb19bSTim Harvey /* CD */
63214fb19bSTim Harvey IOMUX_PADS(PAD_NANDF_CS0__GPIO6_IO11 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
64214fb19bSTim Harvey };
6594a1d6c6STim Harvey /* 8-bit eMMC on SD2/NAND */
6694a1d6c6STim Harvey static iomux_v3_cfg_t const gw560x_emmc_sd2_pads[] = {
6794a1d6c6STim Harvey IOMUX_PADS(PAD_SD2_CLK__SD2_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
6894a1d6c6STim Harvey IOMUX_PADS(PAD_SD2_CMD__SD2_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
6994a1d6c6STim Harvey IOMUX_PADS(PAD_SD2_DAT0__SD2_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
7094a1d6c6STim Harvey IOMUX_PADS(PAD_SD2_DAT1__SD2_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
7194a1d6c6STim Harvey IOMUX_PADS(PAD_SD2_DAT2__SD2_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
7294a1d6c6STim Harvey IOMUX_PADS(PAD_SD2_DAT3__SD2_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
7394a1d6c6STim Harvey IOMUX_PADS(PAD_NANDF_D4__SD2_DATA4 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
7494a1d6c6STim Harvey IOMUX_PADS(PAD_NANDF_D5__SD2_DATA5 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
7594a1d6c6STim Harvey IOMUX_PADS(PAD_NANDF_D6__SD2_DATA6 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
7694a1d6c6STim Harvey IOMUX_PADS(PAD_NANDF_D7__SD2_DATA7 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
7794a1d6c6STim Harvey };
7894a1d6c6STim Harvey
7965da5c3bSTim Harvey static iomux_v3_cfg_t const usdhc3_pads[] = {
8065da5c3bSTim Harvey IOMUX_PADS(PAD_SD3_CLK__SD3_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
8165da5c3bSTim Harvey IOMUX_PADS(PAD_SD3_CMD__SD3_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
8265da5c3bSTim Harvey IOMUX_PADS(PAD_SD3_DAT0__SD3_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
8365da5c3bSTim Harvey IOMUX_PADS(PAD_SD3_DAT1__SD3_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
8465da5c3bSTim Harvey IOMUX_PADS(PAD_SD3_DAT2__SD3_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
8565da5c3bSTim Harvey IOMUX_PADS(PAD_SD3_DAT3__SD3_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
8665da5c3bSTim Harvey IOMUX_PADS(PAD_SD3_DAT5__GPIO7_IO00 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
8765da5c3bSTim Harvey };
8865da5c3bSTim Harvey
89e56c5791STim Harvey /* I2C1: GSC */
90e56c5791STim Harvey static struct i2c_pads_info mx6q_i2c_pad_info0 = {
91e56c5791STim Harvey .scl = {
92e56c5791STim Harvey .i2c_mode = MX6Q_PAD_EIM_D21__I2C1_SCL | PC,
93e56c5791STim Harvey .gpio_mode = MX6Q_PAD_EIM_D21__GPIO3_IO21 | PC,
94e56c5791STim Harvey .gp = IMX_GPIO_NR(3, 21)
95e56c5791STim Harvey },
96e56c5791STim Harvey .sda = {
97e56c5791STim Harvey .i2c_mode = MX6Q_PAD_EIM_D28__I2C1_SDA | PC,
98e56c5791STim Harvey .gpio_mode = MX6Q_PAD_EIM_D28__GPIO3_IO28 | PC,
99e56c5791STim Harvey .gp = IMX_GPIO_NR(3, 28)
100e56c5791STim Harvey }
101e56c5791STim Harvey };
102e56c5791STim Harvey static struct i2c_pads_info mx6dl_i2c_pad_info0 = {
103e56c5791STim Harvey .scl = {
104e56c5791STim Harvey .i2c_mode = MX6DL_PAD_EIM_D21__I2C1_SCL | PC,
105e56c5791STim Harvey .gpio_mode = MX6DL_PAD_EIM_D21__GPIO3_IO21 | PC,
106e56c5791STim Harvey .gp = IMX_GPIO_NR(3, 21)
107e56c5791STim Harvey },
108e56c5791STim Harvey .sda = {
109e56c5791STim Harvey .i2c_mode = MX6DL_PAD_EIM_D28__I2C1_SDA | PC,
110e56c5791STim Harvey .gpio_mode = MX6DL_PAD_EIM_D28__GPIO3_IO28 | PC,
111e56c5791STim Harvey .gp = IMX_GPIO_NR(3, 28)
112e56c5791STim Harvey }
113e56c5791STim Harvey };
114e56c5791STim Harvey
115e56c5791STim Harvey /* I2C2: PMIC/PCIe Switch/PCIe Clock/Mezz */
116e56c5791STim Harvey static struct i2c_pads_info mx6q_i2c_pad_info1 = {
117e56c5791STim Harvey .scl = {
118e56c5791STim Harvey .i2c_mode = MX6Q_PAD_KEY_COL3__I2C2_SCL | PC,
119e56c5791STim Harvey .gpio_mode = MX6Q_PAD_KEY_COL3__GPIO4_IO12 | PC,
120e56c5791STim Harvey .gp = IMX_GPIO_NR(4, 12)
121e56c5791STim Harvey },
122e56c5791STim Harvey .sda = {
123e56c5791STim Harvey .i2c_mode = MX6Q_PAD_KEY_ROW3__I2C2_SDA | PC,
124e56c5791STim Harvey .gpio_mode = MX6Q_PAD_KEY_ROW3__GPIO4_IO13 | PC,
125e56c5791STim Harvey .gp = IMX_GPIO_NR(4, 13)
126e56c5791STim Harvey }
127e56c5791STim Harvey };
128e56c5791STim Harvey static struct i2c_pads_info mx6dl_i2c_pad_info1 = {
129e56c5791STim Harvey .scl = {
130e56c5791STim Harvey .i2c_mode = MX6DL_PAD_KEY_COL3__I2C2_SCL | PC,
131e56c5791STim Harvey .gpio_mode = MX6DL_PAD_KEY_COL3__GPIO4_IO12 | PC,
132e56c5791STim Harvey .gp = IMX_GPIO_NR(4, 12)
133e56c5791STim Harvey },
134e56c5791STim Harvey .sda = {
135e56c5791STim Harvey .i2c_mode = MX6DL_PAD_KEY_ROW3__I2C2_SDA | PC,
136e56c5791STim Harvey .gpio_mode = MX6DL_PAD_KEY_ROW3__GPIO4_IO13 | PC,
137e56c5791STim Harvey .gp = IMX_GPIO_NR(4, 13)
138e56c5791STim Harvey }
139e56c5791STim Harvey };
140e56c5791STim Harvey
141e56c5791STim Harvey /* I2C3: Misc/Expansion */
142e56c5791STim Harvey static struct i2c_pads_info mx6q_i2c_pad_info2 = {
143e56c5791STim Harvey .scl = {
144e56c5791STim Harvey .i2c_mode = MX6Q_PAD_GPIO_3__I2C3_SCL | PC,
145e56c5791STim Harvey .gpio_mode = MX6Q_PAD_GPIO_3__GPIO1_IO03 | PC,
146e56c5791STim Harvey .gp = IMX_GPIO_NR(1, 3)
147e56c5791STim Harvey },
148e56c5791STim Harvey .sda = {
149e56c5791STim Harvey .i2c_mode = MX6Q_PAD_GPIO_6__I2C3_SDA | PC,
150e56c5791STim Harvey .gpio_mode = MX6Q_PAD_GPIO_6__GPIO1_IO06 | PC,
151e56c5791STim Harvey .gp = IMX_GPIO_NR(1, 6)
152e56c5791STim Harvey }
153e56c5791STim Harvey };
154e56c5791STim Harvey static struct i2c_pads_info mx6dl_i2c_pad_info2 = {
155e56c5791STim Harvey .scl = {
156e56c5791STim Harvey .i2c_mode = MX6DL_PAD_GPIO_3__I2C3_SCL | PC,
157e56c5791STim Harvey .gpio_mode = MX6DL_PAD_GPIO_3__GPIO1_IO03 | PC,
158e56c5791STim Harvey .gp = IMX_GPIO_NR(1, 3)
159e56c5791STim Harvey },
160e56c5791STim Harvey .sda = {
161e56c5791STim Harvey .i2c_mode = MX6DL_PAD_GPIO_6__I2C3_SDA | PC,
162e56c5791STim Harvey .gpio_mode = MX6DL_PAD_GPIO_6__GPIO1_IO06 | PC,
163e56c5791STim Harvey .gp = IMX_GPIO_NR(1, 6)
164e56c5791STim Harvey }
165e56c5791STim Harvey };
166e56c5791STim Harvey
setup_ventana_i2c(void)167e56c5791STim Harvey void setup_ventana_i2c(void)
168e56c5791STim Harvey {
169e56c5791STim Harvey if (is_cpu_type(MXC_CPU_MX6Q)) {
170e56c5791STim Harvey setup_i2c(0, CONFIG_SYS_I2C_SPEED, 0x7f, &mx6q_i2c_pad_info0);
171e56c5791STim Harvey setup_i2c(1, CONFIG_SYS_I2C_SPEED, 0x7f, &mx6q_i2c_pad_info1);
172e56c5791STim Harvey setup_i2c(2, CONFIG_SYS_I2C_SPEED, 0x7f, &mx6q_i2c_pad_info2);
173e56c5791STim Harvey } else {
174e56c5791STim Harvey setup_i2c(0, CONFIG_SYS_I2C_SPEED, 0x7f, &mx6dl_i2c_pad_info0);
175e56c5791STim Harvey setup_i2c(1, CONFIG_SYS_I2C_SPEED, 0x7f, &mx6dl_i2c_pad_info1);
176e56c5791STim Harvey setup_i2c(2, CONFIG_SYS_I2C_SPEED, 0x7f, &mx6dl_i2c_pad_info2);
177e56c5791STim Harvey }
178e56c5791STim Harvey }
179e56c5791STim Harvey
180e56c5791STim Harvey /*
181e56c5791STim Harvey * Baseboard specific GPIO
182e56c5791STim Harvey */
183e56c5791STim Harvey static iomux_v3_cfg_t const gw51xx_gpio_pads[] = {
184e56c5791STim Harvey /* PANLEDG# */
185e56c5791STim Harvey IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG),
186e56c5791STim Harvey /* PANLEDR# */
187e56c5791STim Harvey IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG),
188e56c5791STim Harvey /* IOEXP_PWREN# */
189e56c5791STim Harvey IOMUX_PADS(PAD_EIM_A19__GPIO2_IO19 | DIO_PAD_CFG),
190e56c5791STim Harvey /* IOEXP_IRQ# */
191e56c5791STim Harvey IOMUX_PADS(PAD_EIM_A20__GPIO2_IO18 | MUX_PAD_CTRL(IRQ_PAD_CTRL)),
192e56c5791STim Harvey
193e56c5791STim Harvey /* GPS_SHDN */
194e56c5791STim Harvey IOMUX_PADS(PAD_GPIO_2__GPIO1_IO02 | DIO_PAD_CFG),
195e56c5791STim Harvey /* VID_PWR */
196e56c5791STim Harvey IOMUX_PADS(PAD_CSI0_DATA_EN__GPIO5_IO20 | DIO_PAD_CFG),
197e56c5791STim Harvey /* PCI_RST# */
198e56c5791STim Harvey IOMUX_PADS(PAD_GPIO_0__GPIO1_IO00 | DIO_PAD_CFG),
199e56c5791STim Harvey /* PCIESKT_WDIS# */
200e56c5791STim Harvey IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG),
201e56c5791STim Harvey };
202e56c5791STim Harvey
203e56c5791STim Harvey static iomux_v3_cfg_t const gw52xx_gpio_pads[] = {
204f3a8546bSTim Harvey /* SD3_VSELECT */
205f3a8546bSTim Harvey IOMUX_PADS(PAD_NANDF_CS1__GPIO6_IO14 | DIO_PAD_CFG),
206e49621b3STim Harvey /* RS232_EN# */
207e49621b3STim Harvey IOMUX_PADS(PAD_SD4_DAT3__GPIO2_IO11 | DIO_PAD_CFG),
2085c55572fSTim Harvey /* MSATA_EN */
2095c55572fSTim Harvey IOMUX_PADS(PAD_SD4_DAT0__GPIO2_IO08 | DIO_PAD_CFG),
210e56c5791STim Harvey /* PANLEDG# */
211e56c5791STim Harvey IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG),
212e56c5791STim Harvey /* PANLEDR# */
213e56c5791STim Harvey IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG),
214e56c5791STim Harvey /* IOEXP_PWREN# */
215e56c5791STim Harvey IOMUX_PADS(PAD_EIM_A19__GPIO2_IO19 | DIO_PAD_CFG),
216e56c5791STim Harvey /* IOEXP_IRQ# */
217e56c5791STim Harvey IOMUX_PADS(PAD_EIM_A20__GPIO2_IO18 | MUX_PAD_CTRL(IRQ_PAD_CTRL)),
2189a83a815STim Harvey /* CAN_STBY */
2199a83a815STim Harvey IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09 | DIO_PAD_CFG),
220e56c5791STim Harvey /* MX6_LOCLED# */
221e56c5791STim Harvey IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG),
222e56c5791STim Harvey /* GPS_SHDN */
223e56c5791STim Harvey IOMUX_PADS(PAD_ENET_RXD0__GPIO1_IO27 | DIO_PAD_CFG),
224e56c5791STim Harvey /* USBOTG_SEL */
225e56c5791STim Harvey IOMUX_PADS(PAD_GPIO_2__GPIO1_IO02 | DIO_PAD_CFG),
226e56c5791STim Harvey /* VID_PWR */
227e56c5791STim Harvey IOMUX_PADS(PAD_EIM_D31__GPIO3_IO31 | DIO_PAD_CFG),
228e56c5791STim Harvey /* PCI_RST# */
229e56c5791STim Harvey IOMUX_PADS(PAD_ENET_TXD1__GPIO1_IO29 | DIO_PAD_CFG),
230e56c5791STim Harvey /* PCI_RST# (GW522x) */
231e56c5791STim Harvey IOMUX_PADS(PAD_EIM_D23__GPIO3_IO23 | DIO_PAD_CFG),
2329a83a815STim Harvey /* RS485_EN */
2339a83a815STim Harvey IOMUX_PADS(PAD_SD3_DAT4__GPIO7_IO01 | DIO_PAD_CFG),
234e56c5791STim Harvey /* PCIESKT_WDIS# */
235e56c5791STim Harvey IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG),
236e56c5791STim Harvey };
237e56c5791STim Harvey
238e56c5791STim Harvey static iomux_v3_cfg_t const gw53xx_gpio_pads[] = {
239f3a8546bSTim Harvey /* SD3_VSELECT */
240f3a8546bSTim Harvey IOMUX_PADS(PAD_NANDF_CS1__GPIO6_IO14 | DIO_PAD_CFG),
241e49621b3STim Harvey /* RS232_EN# */
242e49621b3STim Harvey IOMUX_PADS(PAD_SD4_DAT3__GPIO2_IO11 | DIO_PAD_CFG),
2435c55572fSTim Harvey /* MSATA_EN */
2445c55572fSTim Harvey IOMUX_PADS(PAD_SD4_DAT0__GPIO2_IO08 | DIO_PAD_CFG),
2459a83a815STim Harvey /* CAN_STBY */
2469a83a815STim Harvey IOMUX_PADS(PAD_GPIO_2__GPIO1_IO02 | DIO_PAD_CFG),
2479a83a815STim Harvey /* USB_HUBRST# */
2489a83a815STim Harvey IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09 | DIO_PAD_CFG),
249e56c5791STim Harvey /* PANLEDG# */
250e56c5791STim Harvey IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG),
251e56c5791STim Harvey /* PANLEDR# */
252e56c5791STim Harvey IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG),
253e56c5791STim Harvey /* MX6_LOCLED# */
254e56c5791STim Harvey IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG),
255e56c5791STim Harvey /* IOEXP_PWREN# */
256e56c5791STim Harvey IOMUX_PADS(PAD_EIM_A19__GPIO2_IO19 | DIO_PAD_CFG),
257e56c5791STim Harvey /* IOEXP_IRQ# */
258e56c5791STim Harvey IOMUX_PADS(PAD_EIM_A20__GPIO2_IO18 | MUX_PAD_CTRL(IRQ_PAD_CTRL)),
259e56c5791STim Harvey /* DIOI2C_DIS# */
260e56c5791STim Harvey IOMUX_PADS(PAD_GPIO_19__GPIO4_IO05 | DIO_PAD_CFG),
261e56c5791STim Harvey /* GPS_SHDN */
262e56c5791STim Harvey IOMUX_PADS(PAD_ENET_RXD0__GPIO1_IO27 | DIO_PAD_CFG),
263e56c5791STim Harvey /* VID_EN */
264e56c5791STim Harvey IOMUX_PADS(PAD_EIM_D31__GPIO3_IO31 | DIO_PAD_CFG),
265e56c5791STim Harvey /* PCI_RST# */
266e56c5791STim Harvey IOMUX_PADS(PAD_ENET_TXD1__GPIO1_IO29 | DIO_PAD_CFG),
2679a83a815STim Harvey /* RS485_EN */
2689a83a815STim Harvey IOMUX_PADS(PAD_SD3_DAT4__GPIO7_IO01 | DIO_PAD_CFG),
269e56c5791STim Harvey /* PCIESKT_WDIS# */
270e56c5791STim Harvey IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG),
271e56c5791STim Harvey };
272e56c5791STim Harvey
273e56c5791STim Harvey static iomux_v3_cfg_t const gw54xx_gpio_pads[] = {
274f3a8546bSTim Harvey /* SD3_VSELECT */
275f3a8546bSTim Harvey IOMUX_PADS(PAD_NANDF_CS1__GPIO6_IO14 | DIO_PAD_CFG),
276e49621b3STim Harvey /* RS232_EN# */
277e49621b3STim Harvey IOMUX_PADS(PAD_SD4_DAT3__GPIO2_IO11 | DIO_PAD_CFG),
2785c55572fSTim Harvey /* MSATA_EN */
2795c55572fSTim Harvey IOMUX_PADS(PAD_SD4_DAT0__GPIO2_IO08 | DIO_PAD_CFG),
2809a83a815STim Harvey /* CAN_STBY */
2819a83a815STim Harvey IOMUX_PADS(PAD_GPIO_2__GPIO1_IO02 | DIO_PAD_CFG),
282e56c5791STim Harvey /* PANLEDG# */
283e56c5791STim Harvey IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG),
284e56c5791STim Harvey /* PANLEDR# */
2859a83a815STim Harvey IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG),
286e56c5791STim Harvey /* MX6_LOCLED# */
287e56c5791STim Harvey IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG),
2889a83a815STim Harvey /* USB_HUBRST# */
2899a83a815STim Harvey IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16 | DIO_PAD_CFG),
290e56c5791STim Harvey /* MIPI_DIO */
291e56c5791STim Harvey IOMUX_PADS(PAD_SD1_DAT3__GPIO1_IO21 | DIO_PAD_CFG),
292e56c5791STim Harvey /* RS485_EN */
293e56c5791STim Harvey IOMUX_PADS(PAD_EIM_D24__GPIO3_IO24 | DIO_PAD_CFG),
294e56c5791STim Harvey /* IOEXP_PWREN# */
2959a83a815STim Harvey IOMUX_PADS(PAD_EIM_A19__GPIO2_IO19 | DIO_PAD_CFG),
296e56c5791STim Harvey /* IOEXP_IRQ# */
2979a83a815STim Harvey IOMUX_PADS(PAD_EIM_A20__GPIO2_IO18 | MUX_PAD_CTRL(IRQ_PAD_CTRL)),
298e56c5791STim Harvey /* DIOI2C_DIS# */
299e56c5791STim Harvey IOMUX_PADS(PAD_GPIO_19__GPIO4_IO05 | DIO_PAD_CFG),
300e56c5791STim Harvey /* PCI_RST# */
301e56c5791STim Harvey IOMUX_PADS(PAD_ENET_TXD1__GPIO1_IO29 | DIO_PAD_CFG),
302e56c5791STim Harvey /* VID_EN */
303e56c5791STim Harvey IOMUX_PADS(PAD_EIM_D31__GPIO3_IO31 | DIO_PAD_CFG),
3049a83a815STim Harvey /* RS485_EN */
3059a83a815STim Harvey IOMUX_PADS(PAD_SD3_DAT4__GPIO7_IO01 | DIO_PAD_CFG),
306e56c5791STim Harvey /* PCIESKT_WDIS# */
307e56c5791STim Harvey IOMUX_PADS(PAD_DISP0_DAT23__GPIO5_IO17 | DIO_PAD_CFG),
308e56c5791STim Harvey };
309e56c5791STim Harvey
310e56c5791STim Harvey static iomux_v3_cfg_t const gw551x_gpio_pads[] = {
3119a83a815STim Harvey /* CAN_STBY */
3129a83a815STim Harvey IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09 | DIO_PAD_CFG),
313e56c5791STim Harvey /* PANLED# */
314e56c5791STim Harvey IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG),
315e56c5791STim Harvey /* PCI_RST# */
316e56c5791STim Harvey IOMUX_PADS(PAD_GPIO_0__GPIO1_IO00 | DIO_PAD_CFG),
317e56c5791STim Harvey /* PCIESKT_WDIS# */
318e56c5791STim Harvey IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG),
319e56c5791STim Harvey };
320e56c5791STim Harvey
321e56c5791STim Harvey static iomux_v3_cfg_t const gw552x_gpio_pads[] = {
3225c55572fSTim Harvey /* MSATA_EN */
3235c55572fSTim Harvey IOMUX_PADS(PAD_SD4_DAT0__GPIO2_IO08 | DIO_PAD_CFG),
3249a83a815STim Harvey /* USBOTG_SEL */
3259a83a815STim Harvey IOMUX_PADS(PAD_GPIO_7__GPIO1_IO07 | DIO_PAD_CFG),
3269a83a815STim Harvey /* USB_HUBRST# */
3279a83a815STim Harvey IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09 | DIO_PAD_CFG),
328e56c5791STim Harvey /* PANLEDG# */
329e56c5791STim Harvey IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG),
330e56c5791STim Harvey /* PANLEDR# */
331e56c5791STim Harvey IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG),
332e56c5791STim Harvey /* MX6_LOCLED# */
333e56c5791STim Harvey IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG),
334e56c5791STim Harvey /* PCI_RST# */
335e56c5791STim Harvey IOMUX_PADS(PAD_ENET_TXD1__GPIO1_IO29 | DIO_PAD_CFG),
336e56c5791STim Harvey /* MX6_DIO[4:9] */
337e56c5791STim Harvey IOMUX_PADS(PAD_CSI0_PIXCLK__GPIO5_IO18 | DIO_PAD_CFG),
338e56c5791STim Harvey IOMUX_PADS(PAD_CSI0_DATA_EN__GPIO5_IO20 | DIO_PAD_CFG),
339e56c5791STim Harvey IOMUX_PADS(PAD_CSI0_VSYNC__GPIO5_IO21 | DIO_PAD_CFG),
340e56c5791STim Harvey IOMUX_PADS(PAD_CSI0_DAT4__GPIO5_IO22 | DIO_PAD_CFG),
341e56c5791STim Harvey IOMUX_PADS(PAD_CSI0_DAT5__GPIO5_IO23 | DIO_PAD_CFG),
342e56c5791STim Harvey IOMUX_PADS(PAD_CSI0_DAT7__GPIO5_IO25 | DIO_PAD_CFG),
343e56c5791STim Harvey /* PCIEGBE1_OFF# */
344e56c5791STim Harvey IOMUX_PADS(PAD_GPIO_1__GPIO1_IO01 | DIO_PAD_CFG),
345e56c5791STim Harvey /* PCIEGBE2_OFF# */
346e56c5791STim Harvey IOMUX_PADS(PAD_GPIO_2__GPIO1_IO02 | DIO_PAD_CFG),
347e56c5791STim Harvey /* PCIESKT_WDIS# */
348e56c5791STim Harvey IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG),
349e56c5791STim Harvey };
350e56c5791STim Harvey
351385575bcSTim Harvey static iomux_v3_cfg_t const gw553x_gpio_pads[] = {
352f3a8546bSTim Harvey /* SD3_VSELECT */
353f3a8546bSTim Harvey IOMUX_PADS(PAD_NANDF_CS1__GPIO6_IO14 | DIO_PAD_CFG),
354385575bcSTim Harvey /* PANLEDG# */
355385575bcSTim Harvey IOMUX_PADS(PAD_KEY_COL2__GPIO4_IO10 | DIO_PAD_CFG),
356385575bcSTim Harvey /* PANLEDR# */
357385575bcSTim Harvey IOMUX_PADS(PAD_KEY_ROW2__GPIO4_IO11 | DIO_PAD_CFG),
358385575bcSTim Harvey /* VID_PWR */
359385575bcSTim Harvey IOMUX_PADS(PAD_CSI0_DATA_EN__GPIO5_IO20 | DIO_PAD_CFG),
360385575bcSTim Harvey /* PCI_RST# */
361385575bcSTim Harvey IOMUX_PADS(PAD_GPIO_0__GPIO1_IO00 | DIO_PAD_CFG),
362385575bcSTim Harvey /* PCIESKT_WDIS# */
363385575bcSTim Harvey IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG),
364385575bcSTim Harvey };
365385575bcSTim Harvey
36694a1d6c6STim Harvey static iomux_v3_cfg_t const gw560x_gpio_pads[] = {
36794a1d6c6STim Harvey /* RS232_EN# */
36894a1d6c6STim Harvey IOMUX_PADS(PAD_SD4_DAT3__GPIO2_IO11 | DIO_PAD_CFG),
36994a1d6c6STim Harvey /* CAN_STBY */
37094a1d6c6STim Harvey IOMUX_PADS(PAD_GPIO_2__GPIO1_IO02 | DIO_PAD_CFG),
37194a1d6c6STim Harvey /* USB_HUBRST# */
37294a1d6c6STim Harvey IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09 | DIO_PAD_CFG),
37394a1d6c6STim Harvey /* PANLEDG# */
37494a1d6c6STim Harvey IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG),
37594a1d6c6STim Harvey /* PANLEDR# */
37694a1d6c6STim Harvey IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG),
37794a1d6c6STim Harvey /* MX6_LOCLED# */
37894a1d6c6STim Harvey IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG),
37994a1d6c6STim Harvey /* IOEXP_PWREN# */
38094a1d6c6STim Harvey IOMUX_PADS(PAD_EIM_A19__GPIO2_IO19 | DIO_PAD_CFG),
38194a1d6c6STim Harvey /* IOEXP_IRQ# */
38294a1d6c6STim Harvey IOMUX_PADS(PAD_EIM_A20__GPIO2_IO18 | MUX_PAD_CTRL(IRQ_PAD_CTRL)),
38394a1d6c6STim Harvey /* DIOI2C_DIS# */
38494a1d6c6STim Harvey IOMUX_PADS(PAD_GPIO_19__GPIO4_IO05 | DIO_PAD_CFG),
38594a1d6c6STim Harvey /* VID_EN */
38694a1d6c6STim Harvey IOMUX_PADS(PAD_EIM_D31__GPIO3_IO31 | DIO_PAD_CFG),
38794a1d6c6STim Harvey /* PCI_RST# */
38894a1d6c6STim Harvey IOMUX_PADS(PAD_DISP0_DAT10__GPIO4_IO31 | DIO_PAD_CFG),
38994a1d6c6STim Harvey /* RS485_EN */
39094a1d6c6STim Harvey IOMUX_PADS(PAD_SD3_DAT4__GPIO7_IO01 | DIO_PAD_CFG),
39194a1d6c6STim Harvey /* PCIESKT_WDIS# */
39294a1d6c6STim Harvey IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG),
39394a1d6c6STim Harvey /* USBH2_PEN (OTG) */
39494a1d6c6STim Harvey IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG),
39594a1d6c6STim Harvey /* 12V0_PWR_EN */
39694a1d6c6STim Harvey IOMUX_PADS(PAD_DISP0_DAT5__GPIO4_IO26 | DIO_PAD_CFG),
39794a1d6c6STim Harvey };
39894a1d6c6STim Harvey
399214fb19bSTim Harvey static iomux_v3_cfg_t const gw5903_gpio_pads[] = {
400214fb19bSTim Harvey /* BKLT_12VEN */
401214fb19bSTim Harvey IOMUX_PADS(PAD_GPIO_7__GPIO1_IO07 | DIO_PAD_CFG),
402214fb19bSTim Harvey /* EMMY_PDN# */
403214fb19bSTim Harvey IOMUX_PADS(PAD_NANDF_D2__GPIO2_IO02 | DIO_PAD_CFG),
404214fb19bSTim Harvey /* EMMY_CFG1# */
405214fb19bSTim Harvey IOMUX_PADS(PAD_NANDF_D3__GPIO2_IO03 | DIO_PAD_CFG),
406214fb19bSTim Harvey /* EMMY_CFG1# */
407214fb19bSTim Harvey IOMUX_PADS(PAD_NANDF_D4__GPIO2_IO04 | DIO_PAD_CFG),
408214fb19bSTim Harvey /* USBH1_PEN (EHCI) */
409214fb19bSTim Harvey IOMUX_PADS(PAD_EIM_D31__GPIO3_IO31 | DIO_PAD_CFG),
410214fb19bSTim Harvey /* USBH2_PEN (OTG) */
411214fb19bSTim Harvey IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG),
412214fb19bSTim Harvey /* USBDPC_PEN */
413214fb19bSTim Harvey IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG),
414214fb19bSTim Harvey /* TOUCH_RST */
415214fb19bSTim Harvey IOMUX_PADS(PAD_KEY_COL1__GPIO4_IO08 | DIO_PAD_CFG),
416214fb19bSTim Harvey /* AUDIO_RST# */
417214fb19bSTim Harvey IOMUX_PADS(PAD_DISP0_DAT23__GPIO5_IO17 | DIO_PAD_CFG),
418214fb19bSTim Harvey /* UART1_TEN# */
419214fb19bSTim Harvey IOMUX_PADS(PAD_CSI0_DAT12__GPIO5_IO30 | DIO_PAD_CFG),
420214fb19bSTim Harvey /* MX6_LOCLED# */
421214fb19bSTim Harvey IOMUX_PADS(PAD_NANDF_CS1__GPIO6_IO14 | DIO_PAD_CFG),
422214fb19bSTim Harvey /* LVDS_BKLEN # */
423214fb19bSTim Harvey IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG),
424214fb19bSTim Harvey /* RGMII_PDWN# */
425214fb19bSTim Harvey IOMUX_PADS(PAD_ENET_CRS_DV__GPIO1_IO25 | DIO_PAD_CFG),
426214fb19bSTim Harvey /* TOUCH_IRQ# */
427214fb19bSTim Harvey IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG),
428214fb19bSTim Harvey /* TOUCH_RST# */
429214fb19bSTim Harvey IOMUX_PADS(PAD_KEY_COL1__GPIO4_IO08 | DIO_PAD_CFG),
430214fb19bSTim Harvey };
431214fb19bSTim Harvey
4328d1a6ff8STim Harvey static iomux_v3_cfg_t const gw5904_gpio_pads[] = {
4338d1a6ff8STim Harvey /* USB_HUBRST# */
4348d1a6ff8STim Harvey IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09 | DIO_PAD_CFG),
4358d1a6ff8STim Harvey /* PANLEDG# */
4368d1a6ff8STim Harvey IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG),
4378d1a6ff8STim Harvey /* PANLEDR# */
4388d1a6ff8STim Harvey IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG),
4398d1a6ff8STim Harvey /* MX6_LOCLED# */
4408d1a6ff8STim Harvey IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG),
4418d1a6ff8STim Harvey /* IOEXP_PWREN# */
4428d1a6ff8STim Harvey IOMUX_PADS(PAD_EIM_A19__GPIO2_IO19 | DIO_PAD_CFG),
4438d1a6ff8STim Harvey /* IOEXP_IRQ# */
4448d1a6ff8STim Harvey IOMUX_PADS(PAD_EIM_A20__GPIO2_IO18 | MUX_PAD_CTRL(IRQ_PAD_CTRL)),
4458d1a6ff8STim Harvey /* DIOI2C_DIS# */
4468d1a6ff8STim Harvey IOMUX_PADS(PAD_GPIO_19__GPIO4_IO05 | DIO_PAD_CFG),
4478d1a6ff8STim Harvey /* UART_RS485 */
4488d1a6ff8STim Harvey IOMUX_PADS(PAD_DISP0_DAT2__GPIO4_IO23 | DIO_PAD_CFG),
4498d1a6ff8STim Harvey /* UART_HALF */
4508d1a6ff8STim Harvey IOMUX_PADS(PAD_DISP0_DAT3__GPIO4_IO24 | DIO_PAD_CFG),
4518d1a6ff8STim Harvey /* SKT1_WDIS# */
4528d1a6ff8STim Harvey IOMUX_PADS(PAD_DISP0_DAT17__GPIO5_IO11 | DIO_PAD_CFG),
4538d1a6ff8STim Harvey /* SKT1_RST# */
4548d1a6ff8STim Harvey IOMUX_PADS(PAD_DISP0_DAT18__GPIO5_IO12 | DIO_PAD_CFG),
4558d1a6ff8STim Harvey /* SKT2_WDIS# */
4568d1a6ff8STim Harvey IOMUX_PADS(PAD_DISP0_DAT19__GPIO5_IO13 | DIO_PAD_CFG),
4578d1a6ff8STim Harvey /* SKT2_RST# */
4588d1a6ff8STim Harvey IOMUX_PADS(PAD_GPIO_0__GPIO1_IO00 | DIO_PAD_CFG),
4598d1a6ff8STim Harvey /* M2_OFF# */
4608d1a6ff8STim Harvey IOMUX_PADS(PAD_SD2_DAT0__GPIO1_IO15 | DIO_PAD_CFG),
4618d1a6ff8STim Harvey /* M2_WDIS# */
4628d1a6ff8STim Harvey IOMUX_PADS(PAD_SD2_DAT1__GPIO1_IO14 | DIO_PAD_CFG),
4638d1a6ff8STim Harvey /* M2_RST# */
4648d1a6ff8STim Harvey IOMUX_PADS(PAD_SD2_DAT2__GPIO1_IO13 | DIO_PAD_CFG),
4658d1a6ff8STim Harvey };
4668d1a6ff8STim Harvey
4671800ffa8STim Harvey /* Digital I/O */
4681800ffa8STim Harvey struct dio_cfg gw51xx_dio[] = {
469e56c5791STim Harvey {
470e56c5791STim Harvey { IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) },
471e56c5791STim Harvey IMX_GPIO_NR(1, 16),
472e56c5791STim Harvey { 0, 0 },
473e56c5791STim Harvey 0
474e56c5791STim Harvey },
475e56c5791STim Harvey {
476e56c5791STim Harvey { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) },
477e56c5791STim Harvey IMX_GPIO_NR(1, 19),
478e56c5791STim Harvey { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) },
479e56c5791STim Harvey 2
480e56c5791STim Harvey },
481e56c5791STim Harvey {
482e56c5791STim Harvey { IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) },
483e56c5791STim Harvey IMX_GPIO_NR(1, 17),
484e56c5791STim Harvey { IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) },
485e56c5791STim Harvey 3
486e56c5791STim Harvey },
487e56c5791STim Harvey {
488e56c5791STim Harvey { IOMUX_PADS(PAD_SD1_CMD__GPIO1_IO18) },
489e56c5791STim Harvey IMX_GPIO_NR(1, 18),
490e56c5791STim Harvey { IOMUX_PADS(PAD_SD1_CMD__PWM4_OUT) },
491e56c5791STim Harvey 4
492e56c5791STim Harvey },
4931800ffa8STim Harvey };
494e56c5791STim Harvey
4951800ffa8STim Harvey struct dio_cfg gw52xx_dio[] = {
496e56c5791STim Harvey {
497e56c5791STim Harvey { IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) },
498e56c5791STim Harvey IMX_GPIO_NR(1, 16),
499e56c5791STim Harvey { 0, 0 },
500e56c5791STim Harvey 0
501e56c5791STim Harvey },
502e56c5791STim Harvey {
503e56c5791STim Harvey { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) },
504e56c5791STim Harvey IMX_GPIO_NR(1, 19),
505e56c5791STim Harvey { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) },
506e56c5791STim Harvey 2
507e56c5791STim Harvey },
508e56c5791STim Harvey {
509e56c5791STim Harvey { IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) },
510e56c5791STim Harvey IMX_GPIO_NR(1, 17),
511e56c5791STim Harvey { IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) },
512e56c5791STim Harvey 3
513e56c5791STim Harvey },
514e56c5791STim Harvey {
515e56c5791STim Harvey { IOMUX_PADS(PAD_SD1_CLK__GPIO1_IO20) },
516e56c5791STim Harvey IMX_GPIO_NR(1, 20),
517e56c5791STim Harvey { 0, 0 },
518e56c5791STim Harvey 0
519e56c5791STim Harvey },
5201800ffa8STim Harvey };
521e56c5791STim Harvey
5221800ffa8STim Harvey struct dio_cfg gw53xx_dio[] = {
523e56c5791STim Harvey {
524e56c5791STim Harvey { IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) },
525e56c5791STim Harvey IMX_GPIO_NR(1, 16),
526e56c5791STim Harvey { 0, 0 },
527e56c5791STim Harvey 0
528e56c5791STim Harvey },
529e56c5791STim Harvey {
530e56c5791STim Harvey { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) },
531e56c5791STim Harvey IMX_GPIO_NR(1, 19),
532e56c5791STim Harvey { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) },
533e56c5791STim Harvey 2
534e56c5791STim Harvey },
535e56c5791STim Harvey {
536e56c5791STim Harvey { IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) },
537e56c5791STim Harvey IMX_GPIO_NR(1, 17),
538e56c5791STim Harvey { IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) },
539e56c5791STim Harvey 3
540e56c5791STim Harvey },
541e56c5791STim Harvey {
542e56c5791STim Harvey {IOMUX_PADS(PAD_SD1_CLK__GPIO1_IO20) },
543e56c5791STim Harvey IMX_GPIO_NR(1, 20),
544e56c5791STim Harvey { 0, 0 },
545e56c5791STim Harvey 0
546e56c5791STim Harvey },
5471800ffa8STim Harvey };
548e56c5791STim Harvey
5491800ffa8STim Harvey struct dio_cfg gw54xx_dio[] = {
550e56c5791STim Harvey {
551e56c5791STim Harvey { IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09) },
552e56c5791STim Harvey IMX_GPIO_NR(1, 9),
553e56c5791STim Harvey { IOMUX_PADS(PAD_GPIO_9__PWM1_OUT) },
554e56c5791STim Harvey 1
555e56c5791STim Harvey },
556e56c5791STim Harvey {
557e56c5791STim Harvey { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) },
558e56c5791STim Harvey IMX_GPIO_NR(1, 19),
559e56c5791STim Harvey { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) },
560e56c5791STim Harvey 2
561e56c5791STim Harvey },
562e56c5791STim Harvey {
563e56c5791STim Harvey { IOMUX_PADS(PAD_SD4_DAT1__GPIO2_IO09) },
564e56c5791STim Harvey IMX_GPIO_NR(2, 9),
565e56c5791STim Harvey { IOMUX_PADS(PAD_SD4_DAT1__PWM3_OUT) },
566e56c5791STim Harvey 3
567e56c5791STim Harvey },
568e56c5791STim Harvey {
569e56c5791STim Harvey { IOMUX_PADS(PAD_SD4_DAT2__GPIO2_IO10) },
570e56c5791STim Harvey IMX_GPIO_NR(2, 10),
571e56c5791STim Harvey { IOMUX_PADS(PAD_SD4_DAT2__PWM4_OUT) },
572e56c5791STim Harvey 4
573e56c5791STim Harvey },
5741800ffa8STim Harvey };
5751800ffa8STim Harvey
5761800ffa8STim Harvey struct dio_cfg gw551x_dio[] = {
5771800ffa8STim Harvey {
5781800ffa8STim Harvey { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) },
5791800ffa8STim Harvey IMX_GPIO_NR(1, 19),
5801800ffa8STim Harvey { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) },
5811800ffa8STim Harvey 2
582e56c5791STim Harvey },
5831800ffa8STim Harvey {
5841800ffa8STim Harvey { IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) },
5851800ffa8STim Harvey IMX_GPIO_NR(1, 17),
5861800ffa8STim Harvey { IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) },
5871800ffa8STim Harvey 3
5881800ffa8STim Harvey },
5891800ffa8STim Harvey };
5901800ffa8STim Harvey
5911800ffa8STim Harvey struct dio_cfg gw552x_dio[] = {
5921800ffa8STim Harvey {
5931800ffa8STim Harvey { IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) },
5941800ffa8STim Harvey IMX_GPIO_NR(1, 16),
5951800ffa8STim Harvey { 0, 0 },
5961800ffa8STim Harvey 0
5971800ffa8STim Harvey },
5981800ffa8STim Harvey {
5991800ffa8STim Harvey { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) },
6001800ffa8STim Harvey IMX_GPIO_NR(1, 19),
6011800ffa8STim Harvey { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) },
6021800ffa8STim Harvey 2
6031800ffa8STim Harvey },
6041800ffa8STim Harvey {
6051800ffa8STim Harvey { IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) },
6061800ffa8STim Harvey IMX_GPIO_NR(1, 17),
6071800ffa8STim Harvey { IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) },
6081800ffa8STim Harvey 3
6091800ffa8STim Harvey },
6101800ffa8STim Harvey {
6111800ffa8STim Harvey {IOMUX_PADS(PAD_SD1_CLK__GPIO1_IO20) },
6121800ffa8STim Harvey IMX_GPIO_NR(1, 20),
6131800ffa8STim Harvey { 0, 0 },
6141800ffa8STim Harvey 0
6151800ffa8STim Harvey },
616e86b7adfSTim Harvey {
617e86b7adfSTim Harvey {IOMUX_PADS(PAD_CSI0_PIXCLK__GPIO5_IO18) },
618e86b7adfSTim Harvey IMX_GPIO_NR(5, 18),
619e86b7adfSTim Harvey { 0, 0 },
620e86b7adfSTim Harvey 0
621e86b7adfSTim Harvey },
622e86b7adfSTim Harvey {
623e86b7adfSTim Harvey {IOMUX_PADS(PAD_CSI0_DATA_EN__GPIO5_IO20) },
624e86b7adfSTim Harvey IMX_GPIO_NR(5, 20),
625e86b7adfSTim Harvey { 0, 0 },
626e86b7adfSTim Harvey 0
627e86b7adfSTim Harvey },
628e86b7adfSTim Harvey {
629e86b7adfSTim Harvey {IOMUX_PADS(PAD_CSI0_VSYNC__GPIO5_IO21) },
630e86b7adfSTim Harvey IMX_GPIO_NR(5, 21),
631e86b7adfSTim Harvey { 0, 0 },
632e86b7adfSTim Harvey 0
633e86b7adfSTim Harvey },
634e86b7adfSTim Harvey {
635e86b7adfSTim Harvey {IOMUX_PADS(PAD_CSI0_DAT4__GPIO5_IO22) },
636e86b7adfSTim Harvey IMX_GPIO_NR(5, 22),
637e86b7adfSTim Harvey { 0, 0 },
638e86b7adfSTim Harvey 0
639e86b7adfSTim Harvey },
640e86b7adfSTim Harvey {
641e86b7adfSTim Harvey {IOMUX_PADS(PAD_CSI0_DAT5__GPIO5_IO23) },
642e86b7adfSTim Harvey IMX_GPIO_NR(5, 23),
643e86b7adfSTim Harvey { 0, 0 },
644e86b7adfSTim Harvey 0
645e86b7adfSTim Harvey },
646e86b7adfSTim Harvey {
647e86b7adfSTim Harvey {IOMUX_PADS(PAD_CSI0_DAT7__GPIO5_IO25) },
648e86b7adfSTim Harvey IMX_GPIO_NR(5, 25),
649e86b7adfSTim Harvey { 0, 0 },
650e86b7adfSTim Harvey 0
651e86b7adfSTim Harvey },
6521800ffa8STim Harvey };
6531800ffa8STim Harvey
6541800ffa8STim Harvey struct dio_cfg gw553x_dio[] = {
6551800ffa8STim Harvey {
6561800ffa8STim Harvey { IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) },
6571800ffa8STim Harvey IMX_GPIO_NR(1, 16),
6581800ffa8STim Harvey { 0, 0 },
6591800ffa8STim Harvey 0
6601800ffa8STim Harvey },
6611800ffa8STim Harvey {
6621800ffa8STim Harvey { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) },
6631800ffa8STim Harvey IMX_GPIO_NR(1, 19),
6641800ffa8STim Harvey { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) },
6651800ffa8STim Harvey 2
6661800ffa8STim Harvey },
6671800ffa8STim Harvey {
6681800ffa8STim Harvey { IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) },
6691800ffa8STim Harvey IMX_GPIO_NR(1, 17),
6701800ffa8STim Harvey { IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) },
6711800ffa8STim Harvey 3
6721800ffa8STim Harvey },
6731800ffa8STim Harvey {
6741800ffa8STim Harvey { IOMUX_PADS(PAD_SD1_CMD__GPIO1_IO18) },
6751800ffa8STim Harvey IMX_GPIO_NR(1, 18),
6761800ffa8STim Harvey { IOMUX_PADS(PAD_SD1_CMD__PWM4_OUT) },
6771800ffa8STim Harvey 4
6781800ffa8STim Harvey },
6791800ffa8STim Harvey };
6801800ffa8STim Harvey
68194a1d6c6STim Harvey struct dio_cfg gw560x_dio[] = {
68294a1d6c6STim Harvey {
68394a1d6c6STim Harvey { IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) },
68494a1d6c6STim Harvey IMX_GPIO_NR(1, 16),
68594a1d6c6STim Harvey { 0, 0 },
68694a1d6c6STim Harvey 0
68794a1d6c6STim Harvey },
68894a1d6c6STim Harvey {
68994a1d6c6STim Harvey { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) },
69094a1d6c6STim Harvey IMX_GPIO_NR(1, 19),
69194a1d6c6STim Harvey { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) },
69294a1d6c6STim Harvey 2
69394a1d6c6STim Harvey },
69494a1d6c6STim Harvey {
69594a1d6c6STim Harvey { IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) },
69694a1d6c6STim Harvey IMX_GPIO_NR(1, 17),
69794a1d6c6STim Harvey { IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) },
69894a1d6c6STim Harvey 3
69994a1d6c6STim Harvey },
70094a1d6c6STim Harvey {
70194a1d6c6STim Harvey {IOMUX_PADS(PAD_SD1_CLK__GPIO1_IO20) },
70294a1d6c6STim Harvey IMX_GPIO_NR(1, 20),
70394a1d6c6STim Harvey { 0, 0 },
70494a1d6c6STim Harvey 0
70594a1d6c6STim Harvey },
70694a1d6c6STim Harvey };
70794a1d6c6STim Harvey
708214fb19bSTim Harvey struct dio_cfg gw5903_dio[] = {
709214fb19bSTim Harvey };
710214fb19bSTim Harvey
7118d1a6ff8STim Harvey struct dio_cfg gw5904_dio[] = {
7128d1a6ff8STim Harvey {
7138d1a6ff8STim Harvey { IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) },
7148d1a6ff8STim Harvey IMX_GPIO_NR(1, 16),
7158d1a6ff8STim Harvey { 0, 0 },
7168d1a6ff8STim Harvey 0
7178d1a6ff8STim Harvey },
7188d1a6ff8STim Harvey {
7198d1a6ff8STim Harvey { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) },
7208d1a6ff8STim Harvey IMX_GPIO_NR(1, 19),
7218d1a6ff8STim Harvey { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) },
7228d1a6ff8STim Harvey 2
7238d1a6ff8STim Harvey },
7248d1a6ff8STim Harvey {
7258d1a6ff8STim Harvey { IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) },
7268d1a6ff8STim Harvey IMX_GPIO_NR(1, 17),
7278d1a6ff8STim Harvey { IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) },
7288d1a6ff8STim Harvey 3
7298d1a6ff8STim Harvey },
7308d1a6ff8STim Harvey {
7318d1a6ff8STim Harvey {IOMUX_PADS(PAD_SD1_CLK__GPIO1_IO20) },
7328d1a6ff8STim Harvey IMX_GPIO_NR(1, 20),
7338d1a6ff8STim Harvey { 0, 0 },
7348d1a6ff8STim Harvey 0
7358d1a6ff8STim Harvey },
7368d1a6ff8STim Harvey {
7378d1a6ff8STim Harvey {IOMUX_PADS(PAD_NANDF_D0__GPIO2_IO00) },
7388d1a6ff8STim Harvey IMX_GPIO_NR(2, 0),
7398d1a6ff8STim Harvey { 0, 0 },
7408d1a6ff8STim Harvey 0
7418d1a6ff8STim Harvey },
7428d1a6ff8STim Harvey {
7438d1a6ff8STim Harvey {IOMUX_PADS(PAD_NANDF_D1__GPIO2_IO01) },
7448d1a6ff8STim Harvey IMX_GPIO_NR(2, 1),
7458d1a6ff8STim Harvey { 0, 0 },
7468d1a6ff8STim Harvey 0
7478d1a6ff8STim Harvey },
7488d1a6ff8STim Harvey {
7498d1a6ff8STim Harvey {IOMUX_PADS(PAD_NANDF_D2__GPIO2_IO02) },
7508d1a6ff8STim Harvey IMX_GPIO_NR(2, 2),
7518d1a6ff8STim Harvey { 0, 0 },
7528d1a6ff8STim Harvey 0
7538d1a6ff8STim Harvey },
7548d1a6ff8STim Harvey {
7558d1a6ff8STim Harvey {IOMUX_PADS(PAD_NANDF_D3__GPIO2_IO03) },
7568d1a6ff8STim Harvey IMX_GPIO_NR(2, 3),
7578d1a6ff8STim Harvey { 0, 0 },
7588d1a6ff8STim Harvey 0
7598d1a6ff8STim Harvey },
7608d1a6ff8STim Harvey {
7618d1a6ff8STim Harvey {IOMUX_PADS(PAD_NANDF_D4__GPIO2_IO04) },
7628d1a6ff8STim Harvey IMX_GPIO_NR(2, 4),
7638d1a6ff8STim Harvey { 0, 0 },
7648d1a6ff8STim Harvey 0
7658d1a6ff8STim Harvey },
7668d1a6ff8STim Harvey {
7678d1a6ff8STim Harvey {IOMUX_PADS(PAD_NANDF_D5__GPIO2_IO05) },
7688d1a6ff8STim Harvey IMX_GPIO_NR(2, 5),
7698d1a6ff8STim Harvey { 0, 0 },
7708d1a6ff8STim Harvey 0
7718d1a6ff8STim Harvey },
7728d1a6ff8STim Harvey {
7738d1a6ff8STim Harvey {IOMUX_PADS(PAD_NANDF_D6__GPIO2_IO06) },
7748d1a6ff8STim Harvey IMX_GPIO_NR(2, 6),
7758d1a6ff8STim Harvey { 0, 0 },
7768d1a6ff8STim Harvey 0
7778d1a6ff8STim Harvey },
7788d1a6ff8STim Harvey {
7798d1a6ff8STim Harvey {IOMUX_PADS(PAD_NANDF_D7__GPIO2_IO07) },
7808d1a6ff8STim Harvey IMX_GPIO_NR(2, 7),
7818d1a6ff8STim Harvey { 0, 0 },
7828d1a6ff8STim Harvey 0
7838d1a6ff8STim Harvey },
7848d1a6ff8STim Harvey };
7858d1a6ff8STim Harvey
7861800ffa8STim Harvey /*
7871800ffa8STim Harvey * Board Specific GPIO
7881800ffa8STim Harvey */
7891800ffa8STim Harvey struct ventana gpio_cfg[GW_UNKNOWN] = {
7901800ffa8STim Harvey /* GW5400proto */
7911800ffa8STim Harvey {
7921800ffa8STim Harvey .gpio_pads = gw54xx_gpio_pads,
7931800ffa8STim Harvey .num_pads = ARRAY_SIZE(gw54xx_gpio_pads)/2,
7941800ffa8STim Harvey .dio_cfg = gw54xx_dio,
7951800ffa8STim Harvey .dio_num = ARRAY_SIZE(gw54xx_dio),
7961800ffa8STim Harvey .leds = {
7971800ffa8STim Harvey IMX_GPIO_NR(4, 6),
7981800ffa8STim Harvey IMX_GPIO_NR(4, 10),
7991800ffa8STim Harvey IMX_GPIO_NR(4, 15),
8001800ffa8STim Harvey },
8011800ffa8STim Harvey .pcie_rst = IMX_GPIO_NR(1, 29),
8021800ffa8STim Harvey .mezz_pwren = IMX_GPIO_NR(4, 7),
8031800ffa8STim Harvey .mezz_irq = IMX_GPIO_NR(4, 9),
8041800ffa8STim Harvey .rs485en = IMX_GPIO_NR(3, 24),
8051800ffa8STim Harvey .dioi2c_en = IMX_GPIO_NR(4, 5),
8061800ffa8STim Harvey .pcie_sson = IMX_GPIO_NR(1, 20),
807f938500fSTim Harvey .otgpwr_en = IMX_GPIO_NR(3, 22),
8088d1a6ff8STim Harvey .mmc_cd = IMX_GPIO_NR(7, 0),
8091800ffa8STim Harvey },
8101800ffa8STim Harvey
8111800ffa8STim Harvey /* GW51xx */
8121800ffa8STim Harvey {
8131800ffa8STim Harvey .gpio_pads = gw51xx_gpio_pads,
8141800ffa8STim Harvey .num_pads = ARRAY_SIZE(gw51xx_gpio_pads)/2,
8151800ffa8STim Harvey .dio_cfg = gw51xx_dio,
8161800ffa8STim Harvey .dio_num = ARRAY_SIZE(gw51xx_dio),
8171800ffa8STim Harvey .leds = {
8181800ffa8STim Harvey IMX_GPIO_NR(4, 6),
8191800ffa8STim Harvey IMX_GPIO_NR(4, 10),
8201800ffa8STim Harvey },
8211800ffa8STim Harvey .pcie_rst = IMX_GPIO_NR(1, 0),
8221800ffa8STim Harvey .mezz_pwren = IMX_GPIO_NR(2, 19),
8231800ffa8STim Harvey .mezz_irq = IMX_GPIO_NR(2, 18),
8241800ffa8STim Harvey .gps_shdn = IMX_GPIO_NR(1, 2),
8251800ffa8STim Harvey .vidin_en = IMX_GPIO_NR(5, 20),
8261800ffa8STim Harvey .wdis = IMX_GPIO_NR(7, 12),
827f938500fSTim Harvey .otgpwr_en = IMX_GPIO_NR(3, 22),
8281800ffa8STim Harvey },
8291800ffa8STim Harvey
8301800ffa8STim Harvey /* GW52xx */
8311800ffa8STim Harvey {
8321800ffa8STim Harvey .gpio_pads = gw52xx_gpio_pads,
8331800ffa8STim Harvey .num_pads = ARRAY_SIZE(gw52xx_gpio_pads)/2,
8341800ffa8STim Harvey .dio_cfg = gw52xx_dio,
8351800ffa8STim Harvey .dio_num = ARRAY_SIZE(gw52xx_dio),
8361800ffa8STim Harvey .leds = {
8371800ffa8STim Harvey IMX_GPIO_NR(4, 6),
8381800ffa8STim Harvey IMX_GPIO_NR(4, 7),
8391800ffa8STim Harvey IMX_GPIO_NR(4, 15),
8401800ffa8STim Harvey },
8411800ffa8STim Harvey .pcie_rst = IMX_GPIO_NR(1, 29),
8421800ffa8STim Harvey .mezz_pwren = IMX_GPIO_NR(2, 19),
8431800ffa8STim Harvey .mezz_irq = IMX_GPIO_NR(2, 18),
8441800ffa8STim Harvey .gps_shdn = IMX_GPIO_NR(1, 27),
8451800ffa8STim Harvey .vidin_en = IMX_GPIO_NR(3, 31),
8461800ffa8STim Harvey .usb_sel = IMX_GPIO_NR(1, 2),
8471800ffa8STim Harvey .wdis = IMX_GPIO_NR(7, 12),
8481800ffa8STim Harvey .msata_en = GP_MSATA_SEL,
8491800ffa8STim Harvey .rs232_en = GP_RS232_EN,
850f938500fSTim Harvey .otgpwr_en = IMX_GPIO_NR(3, 22),
851f3a8546bSTim Harvey .vsel_pin = IMX_GPIO_NR(6, 14),
8528d1a6ff8STim Harvey .mmc_cd = IMX_GPIO_NR(7, 0),
8531800ffa8STim Harvey },
8541800ffa8STim Harvey
8551800ffa8STim Harvey /* GW53xx */
8561800ffa8STim Harvey {
8571800ffa8STim Harvey .gpio_pads = gw53xx_gpio_pads,
8581800ffa8STim Harvey .num_pads = ARRAY_SIZE(gw53xx_gpio_pads)/2,
8591800ffa8STim Harvey .dio_cfg = gw53xx_dio,
8601800ffa8STim Harvey .dio_num = ARRAY_SIZE(gw53xx_dio),
8611800ffa8STim Harvey .leds = {
8621800ffa8STim Harvey IMX_GPIO_NR(4, 6),
8631800ffa8STim Harvey IMX_GPIO_NR(4, 7),
8641800ffa8STim Harvey IMX_GPIO_NR(4, 15),
8651800ffa8STim Harvey },
8661800ffa8STim Harvey .pcie_rst = IMX_GPIO_NR(1, 29),
8671800ffa8STim Harvey .mezz_pwren = IMX_GPIO_NR(2, 19),
8681800ffa8STim Harvey .mezz_irq = IMX_GPIO_NR(2, 18),
8691800ffa8STim Harvey .gps_shdn = IMX_GPIO_NR(1, 27),
8701800ffa8STim Harvey .vidin_en = IMX_GPIO_NR(3, 31),
8711800ffa8STim Harvey .wdis = IMX_GPIO_NR(7, 12),
8721800ffa8STim Harvey .msata_en = GP_MSATA_SEL,
8731800ffa8STim Harvey .rs232_en = GP_RS232_EN,
874f938500fSTim Harvey .otgpwr_en = IMX_GPIO_NR(3, 22),
875f3a8546bSTim Harvey .vsel_pin = IMX_GPIO_NR(6, 14),
8768d1a6ff8STim Harvey .mmc_cd = IMX_GPIO_NR(7, 0),
8771800ffa8STim Harvey },
8781800ffa8STim Harvey
8791800ffa8STim Harvey /* GW54xx */
8801800ffa8STim Harvey {
8811800ffa8STim Harvey .gpio_pads = gw54xx_gpio_pads,
8821800ffa8STim Harvey .num_pads = ARRAY_SIZE(gw54xx_gpio_pads)/2,
8831800ffa8STim Harvey .dio_cfg = gw54xx_dio,
8841800ffa8STim Harvey .dio_num = ARRAY_SIZE(gw54xx_dio),
885e56c5791STim Harvey .leds = {
886e56c5791STim Harvey IMX_GPIO_NR(4, 6),
887e56c5791STim Harvey IMX_GPIO_NR(4, 7),
888e56c5791STim Harvey IMX_GPIO_NR(4, 15),
889e56c5791STim Harvey },
890e56c5791STim Harvey .pcie_rst = IMX_GPIO_NR(1, 29),
891e56c5791STim Harvey .mezz_pwren = IMX_GPIO_NR(2, 19),
892e56c5791STim Harvey .mezz_irq = IMX_GPIO_NR(2, 18),
893e56c5791STim Harvey .rs485en = IMX_GPIO_NR(7, 1),
894e56c5791STim Harvey .vidin_en = IMX_GPIO_NR(3, 31),
895e56c5791STim Harvey .dioi2c_en = IMX_GPIO_NR(4, 5),
896e56c5791STim Harvey .pcie_sson = IMX_GPIO_NR(1, 20),
897e56c5791STim Harvey .wdis = IMX_GPIO_NR(5, 17),
8985c55572fSTim Harvey .msata_en = GP_MSATA_SEL,
899e49621b3STim Harvey .rs232_en = GP_RS232_EN,
900f938500fSTim Harvey .otgpwr_en = IMX_GPIO_NR(3, 22),
901f3a8546bSTim Harvey .vsel_pin = IMX_GPIO_NR(6, 14),
9028d1a6ff8STim Harvey .mmc_cd = IMX_GPIO_NR(7, 0),
903e56c5791STim Harvey },
904e56c5791STim Harvey
905e56c5791STim Harvey /* GW551x */
906e56c5791STim Harvey {
907e56c5791STim Harvey .gpio_pads = gw551x_gpio_pads,
908e56c5791STim Harvey .num_pads = ARRAY_SIZE(gw551x_gpio_pads)/2,
9091800ffa8STim Harvey .dio_cfg = gw551x_dio,
9101800ffa8STim Harvey .dio_num = ARRAY_SIZE(gw551x_dio),
9119a83a815STim Harvey .leds = {
9129a83a815STim Harvey IMX_GPIO_NR(4, 7),
9139a83a815STim Harvey },
9149a83a815STim Harvey .pcie_rst = IMX_GPIO_NR(1, 0),
9159a83a815STim Harvey .wdis = IMX_GPIO_NR(7, 12),
9169a83a815STim Harvey },
9179a83a815STim Harvey
9189a83a815STim Harvey /* GW552x */
9199a83a815STim Harvey {
9209a83a815STim Harvey .gpio_pads = gw552x_gpio_pads,
9219a83a815STim Harvey .num_pads = ARRAY_SIZE(gw552x_gpio_pads)/2,
9221800ffa8STim Harvey .dio_cfg = gw552x_dio,
9231800ffa8STim Harvey .dio_num = ARRAY_SIZE(gw552x_dio),
924e56c5791STim Harvey .leds = {
925e56c5791STim Harvey IMX_GPIO_NR(4, 6),
926e56c5791STim Harvey IMX_GPIO_NR(4, 7),
927e56c5791STim Harvey IMX_GPIO_NR(4, 15),
928e56c5791STim Harvey },
929e56c5791STim Harvey .pcie_rst = IMX_GPIO_NR(1, 29),
9309a83a815STim Harvey .usb_sel = IMX_GPIO_NR(1, 7),
931e56c5791STim Harvey .wdis = IMX_GPIO_NR(7, 12),
9325c55572fSTim Harvey .msata_en = GP_MSATA_SEL,
933e56c5791STim Harvey },
934385575bcSTim Harvey
935385575bcSTim Harvey /* GW553x */
936385575bcSTim Harvey {
937385575bcSTim Harvey .gpio_pads = gw553x_gpio_pads,
938385575bcSTim Harvey .num_pads = ARRAY_SIZE(gw553x_gpio_pads)/2,
9391800ffa8STim Harvey .dio_cfg = gw553x_dio,
9401800ffa8STim Harvey .dio_num = ARRAY_SIZE(gw553x_dio),
941385575bcSTim Harvey .leds = {
942385575bcSTim Harvey IMX_GPIO_NR(4, 10),
943385575bcSTim Harvey IMX_GPIO_NR(4, 11),
944385575bcSTim Harvey },
945385575bcSTim Harvey .pcie_rst = IMX_GPIO_NR(1, 0),
946385575bcSTim Harvey .vidin_en = IMX_GPIO_NR(5, 20),
947385575bcSTim Harvey .wdis = IMX_GPIO_NR(7, 12),
948f938500fSTim Harvey .otgpwr_en = IMX_GPIO_NR(3, 22),
949f3a8546bSTim Harvey .vsel_pin = IMX_GPIO_NR(6, 14),
9508d1a6ff8STim Harvey .mmc_cd = IMX_GPIO_NR(7, 0),
9518d1a6ff8STim Harvey },
9528d1a6ff8STim Harvey
95394a1d6c6STim Harvey /* GW560x */
95494a1d6c6STim Harvey {
95594a1d6c6STim Harvey .gpio_pads = gw560x_gpio_pads,
95694a1d6c6STim Harvey .num_pads = ARRAY_SIZE(gw560x_gpio_pads)/2,
95794a1d6c6STim Harvey .dio_cfg = gw560x_dio,
95894a1d6c6STim Harvey .dio_num = ARRAY_SIZE(gw560x_dio),
95994a1d6c6STim Harvey .leds = {
96094a1d6c6STim Harvey IMX_GPIO_NR(4, 6),
96194a1d6c6STim Harvey IMX_GPIO_NR(4, 7),
96294a1d6c6STim Harvey IMX_GPIO_NR(4, 15),
96394a1d6c6STim Harvey },
96494a1d6c6STim Harvey .pcie_rst = IMX_GPIO_NR(4, 31),
96594a1d6c6STim Harvey .mezz_pwren = IMX_GPIO_NR(2, 19),
96694a1d6c6STim Harvey .mezz_irq = IMX_GPIO_NR(2, 18),
96794a1d6c6STim Harvey .rs232_en = GP_RS232_EN,
96894a1d6c6STim Harvey .vidin_en = IMX_GPIO_NR(3, 31),
96994a1d6c6STim Harvey .wdis = IMX_GPIO_NR(7, 12),
97094a1d6c6STim Harvey .otgpwr_en = IMX_GPIO_NR(4, 15),
97194a1d6c6STim Harvey .mmc_cd = IMX_GPIO_NR(7, 0),
97294a1d6c6STim Harvey },
97394a1d6c6STim Harvey
974214fb19bSTim Harvey /* GW5903 */
975214fb19bSTim Harvey {
976214fb19bSTim Harvey .gpio_pads = gw5903_gpio_pads,
977214fb19bSTim Harvey .num_pads = ARRAY_SIZE(gw5903_gpio_pads)/2,
978214fb19bSTim Harvey .dio_cfg = gw5903_dio,
979214fb19bSTim Harvey .dio_num = ARRAY_SIZE(gw5903_dio),
980214fb19bSTim Harvey .leds = {
981214fb19bSTim Harvey IMX_GPIO_NR(6, 14),
982214fb19bSTim Harvey },
983214fb19bSTim Harvey .otgpwr_en = IMX_GPIO_NR(4, 15),
984214fb19bSTim Harvey .mmc_cd = IMX_GPIO_NR(6, 11),
985214fb19bSTim Harvey },
986214fb19bSTim Harvey
9878d1a6ff8STim Harvey /* GW5904 */
9888d1a6ff8STim Harvey {
9898d1a6ff8STim Harvey .gpio_pads = gw5904_gpio_pads,
9908d1a6ff8STim Harvey .num_pads = ARRAY_SIZE(gw5904_gpio_pads)/2,
9918d1a6ff8STim Harvey .dio_cfg = gw5904_dio,
9928d1a6ff8STim Harvey .dio_num = ARRAY_SIZE(gw5904_dio),
9938d1a6ff8STim Harvey .leds = {
9948d1a6ff8STim Harvey IMX_GPIO_NR(4, 6),
9958d1a6ff8STim Harvey IMX_GPIO_NR(4, 7),
9968d1a6ff8STim Harvey IMX_GPIO_NR(4, 15),
9978d1a6ff8STim Harvey },
9988d1a6ff8STim Harvey .pcie_rst = IMX_GPIO_NR(1, 0),
9998d1a6ff8STim Harvey .mezz_pwren = IMX_GPIO_NR(2, 19),
10008d1a6ff8STim Harvey .mezz_irq = IMX_GPIO_NR(2, 18),
10018d1a6ff8STim Harvey .otgpwr_en = IMX_GPIO_NR(3, 22),
1002385575bcSTim Harvey },
1003e56c5791STim Harvey };
1004e56c5791STim Harvey
setup_iomux_gpio(int board,struct ventana_board_info * info)1005e56c5791STim Harvey void setup_iomux_gpio(int board, struct ventana_board_info *info)
1006e56c5791STim Harvey {
1007e56c5791STim Harvey int i;
1008e56c5791STim Harvey
1009e56c5791STim Harvey if (board >= GW_UNKNOWN)
1010e56c5791STim Harvey return;
1011e56c5791STim Harvey
1012e56c5791STim Harvey /* board specific iomux */
1013e56c5791STim Harvey imx_iomux_v3_setup_multiple_pads(gpio_cfg[board].gpio_pads,
1014e56c5791STim Harvey gpio_cfg[board].num_pads);
1015e56c5791STim Harvey
1016e49621b3STim Harvey /* RS232_EN# */
1017e49621b3STim Harvey if (gpio_cfg[board].rs232_en) {
1018095968f1STim Harvey gpio_request(gpio_cfg[board].rs232_en, "rs232_en#");
1019e49621b3STim Harvey gpio_direction_output(gpio_cfg[board].rs232_en, 0);
1020e49621b3STim Harvey }
1021e49621b3STim Harvey
1022e56c5791STim Harvey /* GW522x Uses GPIO3_IO23 for PCIE_RST# */
1023e56c5791STim Harvey if (board == GW52xx && info->model[4] == '2')
1024e56c5791STim Harvey gpio_cfg[board].pcie_rst = IMX_GPIO_NR(3, 23);
1025e56c5791STim Harvey
1026e56c5791STim Harvey /* assert PCI_RST# */
1027e56c5791STim Harvey gpio_request(gpio_cfg[board].pcie_rst, "pci_rst#");
1028e56c5791STim Harvey gpio_direction_output(gpio_cfg[board].pcie_rst, 0);
1029e56c5791STim Harvey
1030e56c5791STim Harvey /* turn off (active-high) user LED's */
1031e56c5791STim Harvey for (i = 0; i < ARRAY_SIZE(gpio_cfg[board].leds); i++) {
1032e56c5791STim Harvey char name[16];
1033e56c5791STim Harvey if (gpio_cfg[board].leds[i]) {
1034e56c5791STim Harvey sprintf(name, "led_user%d", i);
1035e56c5791STim Harvey gpio_request(gpio_cfg[board].leds[i], name);
1036e56c5791STim Harvey gpio_direction_output(gpio_cfg[board].leds[i], 1);
1037e56c5791STim Harvey }
1038e56c5791STim Harvey }
1039e56c5791STim Harvey
10405c55572fSTim Harvey /* MSATA Enable - default to PCI */
10415c55572fSTim Harvey if (gpio_cfg[board].msata_en) {
10425c55572fSTim Harvey gpio_request(gpio_cfg[board].msata_en, "msata_en");
10435c55572fSTim Harvey gpio_direction_output(gpio_cfg[board].msata_en, 0);
10445c55572fSTim Harvey }
10455c55572fSTim Harvey
1046e56c5791STim Harvey /* Expansion Mezzanine IO */
1047e56c5791STim Harvey if (gpio_cfg[board].mezz_pwren) {
1048e56c5791STim Harvey gpio_request(gpio_cfg[board].mezz_pwren, "mezz_pwr");
1049e56c5791STim Harvey gpio_direction_output(gpio_cfg[board].mezz_pwren, 0);
1050e56c5791STim Harvey }
1051e56c5791STim Harvey if (gpio_cfg[board].mezz_irq) {
1052e56c5791STim Harvey gpio_request(gpio_cfg[board].mezz_irq, "mezz_irq#");
1053e56c5791STim Harvey gpio_direction_input(gpio_cfg[board].mezz_irq);
1054e56c5791STim Harvey }
1055e56c5791STim Harvey
1056e56c5791STim Harvey /* RS485 Transmit Enable */
1057e56c5791STim Harvey if (gpio_cfg[board].rs485en) {
1058e56c5791STim Harvey gpio_request(gpio_cfg[board].rs485en, "rs485_en");
1059e56c5791STim Harvey gpio_direction_output(gpio_cfg[board].rs485en, 0);
1060e56c5791STim Harvey }
1061e56c5791STim Harvey
1062e56c5791STim Harvey /* GPS_SHDN */
1063e56c5791STim Harvey if (gpio_cfg[board].gps_shdn) {
1064e56c5791STim Harvey gpio_request(gpio_cfg[board].gps_shdn, "gps_shdn");
1065e56c5791STim Harvey gpio_direction_output(gpio_cfg[board].gps_shdn, 1);
1066e56c5791STim Harvey }
1067e56c5791STim Harvey
1068e56c5791STim Harvey /* Analog video codec power enable */
1069e56c5791STim Harvey if (gpio_cfg[board].vidin_en) {
1070e56c5791STim Harvey gpio_request(gpio_cfg[board].vidin_en, "anavidin_en");
1071e56c5791STim Harvey gpio_direction_output(gpio_cfg[board].vidin_en, 1);
1072e56c5791STim Harvey }
1073e56c5791STim Harvey
1074e56c5791STim Harvey /* DIOI2C_DIS# */
1075e56c5791STim Harvey if (gpio_cfg[board].dioi2c_en) {
1076e56c5791STim Harvey gpio_request(gpio_cfg[board].dioi2c_en, "dioi2c_dis#");
1077e56c5791STim Harvey gpio_direction_output(gpio_cfg[board].dioi2c_en, 0);
1078e56c5791STim Harvey }
1079e56c5791STim Harvey
1080e56c5791STim Harvey /* PCICK_SSON: disable spread-spectrum clock */
1081e56c5791STim Harvey if (gpio_cfg[board].pcie_sson) {
1082e56c5791STim Harvey gpio_request(gpio_cfg[board].pcie_sson, "pci_sson");
1083e56c5791STim Harvey gpio_direction_output(gpio_cfg[board].pcie_sson, 0);
1084e56c5791STim Harvey }
1085e56c5791STim Harvey
1086e56c5791STim Harvey /* USBOTG mux routing */
1087e56c5791STim Harvey if (gpio_cfg[board].usb_sel) {
1088e56c5791STim Harvey gpio_request(gpio_cfg[board].usb_sel, "usb_pcisel");
1089e56c5791STim Harvey gpio_direction_output(gpio_cfg[board].usb_sel, 0);
1090e56c5791STim Harvey }
1091e56c5791STim Harvey
1092e56c5791STim Harvey /* PCISKT_WDIS# (Wireless disable GPIO to miniPCIe sockets) */
1093e56c5791STim Harvey if (gpio_cfg[board].wdis) {
1094e56c5791STim Harvey gpio_request(gpio_cfg[board].wdis, "wlan_dis");
1095e56c5791STim Harvey gpio_direction_output(gpio_cfg[board].wdis, 1);
1096e56c5791STim Harvey }
109734b080b7STim Harvey
1098f938500fSTim Harvey /* OTG power off */
1099f938500fSTim Harvey if (gpio_cfg[board].otgpwr_en) {
1100f938500fSTim Harvey gpio_request(gpio_cfg[board].otgpwr_en, "usbotg_pwr");
1101f938500fSTim Harvey gpio_direction_output(gpio_cfg[board].otgpwr_en, 0);
1102f938500fSTim Harvey }
1103f938500fSTim Harvey
110434b080b7STim Harvey /* sense vselect pin to see if we support uhs-i */
1105f3a8546bSTim Harvey if (gpio_cfg[board].vsel_pin) {
1106f3a8546bSTim Harvey gpio_request(gpio_cfg[board].vsel_pin, "sd3_vselect");
1107f3a8546bSTim Harvey gpio_direction_input(gpio_cfg[board].vsel_pin);
1108f3a8546bSTim Harvey gpio_cfg[board].usd_vsel = !gpio_get_value(gpio_cfg[board].vsel_pin);
1109f3a8546bSTim Harvey }
11108d1a6ff8STim Harvey
11118d1a6ff8STim Harvey /* microSD CD */
11128d1a6ff8STim Harvey if (gpio_cfg[board].mmc_cd) {
11138d1a6ff8STim Harvey gpio_request(gpio_cfg[board].mmc_cd, "sd_cd");
11148d1a6ff8STim Harvey gpio_direction_input(gpio_cfg[board].mmc_cd);
11158d1a6ff8STim Harvey }
11168d1a6ff8STim Harvey
11178d1a6ff8STim Harvey /* Anything else board specific */
11188d1a6ff8STim Harvey switch(board) {
111994a1d6c6STim Harvey case GW560x:
112094a1d6c6STim Harvey gpio_request(IMX_GPIO_NR(4, 26), "12p0_en");
112194a1d6c6STim Harvey gpio_direction_output(IMX_GPIO_NR(4, 26), 1);
112294a1d6c6STim Harvey break;
1123214fb19bSTim Harvey case GW5903:
1124214fb19bSTim Harvey gpio_request(IMX_GPIO_NR(3, 31) , "usbh1-ehci_pwr");
1125214fb19bSTim Harvey gpio_direction_output(IMX_GPIO_NR(3, 31), 1);
1126214fb19bSTim Harvey gpio_request(IMX_GPIO_NR(4, 15) , "usbh2-otg_pwr");
1127214fb19bSTim Harvey gpio_direction_output(IMX_GPIO_NR(4, 15), 1);
1128214fb19bSTim Harvey gpio_request(IMX_GPIO_NR(4, 7) , "usbdpc_pwr");
1129214fb19bSTim Harvey gpio_direction_output(IMX_GPIO_NR(4, 15), 1);
1130214fb19bSTim Harvey gpio_request(IMX_GPIO_NR(1, 25) , "rgmii_en");
1131214fb19bSTim Harvey gpio_direction_output(IMX_GPIO_NR(1, 25), 1);
1132214fb19bSTim Harvey gpio_request(IMX_GPIO_NR(4, 6) , "touch_irq#");
1133214fb19bSTim Harvey gpio_direction_input(IMX_GPIO_NR(4, 6));
1134214fb19bSTim Harvey gpio_request(IMX_GPIO_NR(4, 8) , "touch_rst");
1135214fb19bSTim Harvey gpio_direction_output(IMX_GPIO_NR(4, 8), 1);
1136214fb19bSTim Harvey gpio_request(IMX_GPIO_NR(1, 7) , "bklt_12ven");
1137214fb19bSTim Harvey gpio_direction_output(IMX_GPIO_NR(1, 7), 1);
1138214fb19bSTim Harvey break;
11398d1a6ff8STim Harvey case GW5904:
11408d1a6ff8STim Harvey gpio_request(IMX_GPIO_NR(5, 11), "skt1_wdis#");
11418d1a6ff8STim Harvey gpio_direction_output(IMX_GPIO_NR(5, 11), 1);
11428d1a6ff8STim Harvey gpio_request(IMX_GPIO_NR(5, 12), "skt1_rst#");
11438d1a6ff8STim Harvey gpio_direction_output(IMX_GPIO_NR(5, 12), 1);
11448d1a6ff8STim Harvey gpio_request(IMX_GPIO_NR(5, 13), "skt2_wdis#");
11458d1a6ff8STim Harvey gpio_direction_output(IMX_GPIO_NR(5, 13), 1);
11468d1a6ff8STim Harvey gpio_request(IMX_GPIO_NR(1, 15), "m2_off#");
11478d1a6ff8STim Harvey gpio_direction_output(IMX_GPIO_NR(1, 15), 1);
11488d1a6ff8STim Harvey gpio_request(IMX_GPIO_NR(1, 14), "m2_wdis#");
11498d1a6ff8STim Harvey gpio_direction_output(IMX_GPIO_NR(1, 14), 1);
11508d1a6ff8STim Harvey gpio_request(IMX_GPIO_NR(1, 13), "m2_rst#");
11518d1a6ff8STim Harvey gpio_direction_output(IMX_GPIO_NR(1, 13), 1);
11528d1a6ff8STim Harvey break;
11538d1a6ff8STim Harvey }
1154e56c5791STim Harvey }
1155e56c5791STim Harvey
1156e56c5791STim Harvey /* setup GPIO pinmux and default configuration per baseboard and env */
setup_board_gpio(int board,struct ventana_board_info * info)1157e56c5791STim Harvey void setup_board_gpio(int board, struct ventana_board_info *info)
1158e56c5791STim Harvey {
1159e56c5791STim Harvey const char *s;
1160e56c5791STim Harvey char arg[10];
1161e56c5791STim Harvey size_t len;
1162e56c5791STim Harvey int i;
1163*00caae6dSSimon Glass int quiet = simple_strtol(env_get("quiet"), NULL, 10);
1164e56c5791STim Harvey
1165e56c5791STim Harvey if (board >= GW_UNKNOWN)
1166e56c5791STim Harvey return;
1167e56c5791STim Harvey
1168e56c5791STim Harvey /* RS232_EN# */
1169e49621b3STim Harvey if (gpio_cfg[board].rs232_en) {
1170e49621b3STim Harvey gpio_direction_output(gpio_cfg[board].rs232_en,
1171e49621b3STim Harvey (hwconfig("rs232")) ? 0 : 1);
1172e49621b3STim Harvey }
1173e56c5791STim Harvey
1174e56c5791STim Harvey /* MSATA Enable */
11755c55572fSTim Harvey if (gpio_cfg[board].msata_en && is_cpu_type(MXC_CPU_MX6Q)) {
1176e56c5791STim Harvey gpio_direction_output(GP_MSATA_SEL,
1177e56c5791STim Harvey (hwconfig("msata")) ? 1 : 0);
1178e56c5791STim Harvey }
1179e56c5791STim Harvey
1180e56c5791STim Harvey /* USBOTG Select (PCISKT or FrontPanel) */
1181e56c5791STim Harvey if (gpio_cfg[board].usb_sel) {
1182e56c5791STim Harvey gpio_direction_output(gpio_cfg[board].usb_sel,
1183e56c5791STim Harvey (hwconfig("usb_pcisel")) ? 1 : 0);
1184e56c5791STim Harvey }
1185e56c5791STim Harvey
1186e56c5791STim Harvey /*
1187e56c5791STim Harvey * Configure DIO pinmux/padctl registers
1188e56c5791STim Harvey * see IMX6DQRM/IMX6SDLRM IOMUXC_SW_PAD_CTL_PAD_* register definitions
1189e56c5791STim Harvey */
11901800ffa8STim Harvey for (i = 0; i < gpio_cfg[board].dio_num; i++) {
1191e56c5791STim Harvey struct dio_cfg *cfg = &gpio_cfg[board].dio_cfg[i];
1192e56c5791STim Harvey iomux_v3_cfg_t ctrl = DIO_PAD_CFG;
1193e56c5791STim Harvey unsigned cputype = is_cpu_type(MXC_CPU_MX6Q) ? 0 : 1;
1194e56c5791STim Harvey
1195e56c5791STim Harvey if (!cfg->gpio_padmux[0] && !cfg->gpio_padmux[1])
1196e56c5791STim Harvey continue;
1197e56c5791STim Harvey sprintf(arg, "dio%d", i);
1198e56c5791STim Harvey if (!hwconfig(arg))
1199e56c5791STim Harvey continue;
1200e56c5791STim Harvey s = hwconfig_subarg(arg, "padctrl", &len);
1201e56c5791STim Harvey if (s) {
1202e56c5791STim Harvey ctrl = MUX_PAD_CTRL(simple_strtoul(s, NULL, 16)
1203e56c5791STim Harvey & 0x1ffff) | MUX_MODE_SION;
1204e56c5791STim Harvey }
1205e56c5791STim Harvey if (hwconfig_subarg_cmp(arg, "mode", "gpio")) {
1206e56c5791STim Harvey if (!quiet) {
1207e56c5791STim Harvey printf("DIO%d: GPIO%d_IO%02d (gpio-%d)\n", i,
1208e56c5791STim Harvey (cfg->gpio_param/32)+1,
1209e56c5791STim Harvey cfg->gpio_param%32,
1210e56c5791STim Harvey cfg->gpio_param);
1211e56c5791STim Harvey }
1212e56c5791STim Harvey imx_iomux_v3_setup_pad(cfg->gpio_padmux[cputype] |
1213e56c5791STim Harvey ctrl);
1214e56c5791STim Harvey gpio_requestf(cfg->gpio_param, "dio%d", i);
1215e56c5791STim Harvey gpio_direction_input(cfg->gpio_param);
121683e00f19STim Harvey } else if (hwconfig_subarg_cmp(arg, "mode", "pwm") &&
1217e56c5791STim Harvey cfg->pwm_padmux) {
1218f17a9af8STim Harvey if (!cfg->pwm_param) {
1219f17a9af8STim Harvey printf("DIO%d: Error: pwm config invalid\n",
1220f17a9af8STim Harvey i);
1221f17a9af8STim Harvey continue;
1222f17a9af8STim Harvey }
1223e56c5791STim Harvey if (!quiet)
1224e56c5791STim Harvey printf("DIO%d: pwm%d\n", i, cfg->pwm_param);
1225e56c5791STim Harvey imx_iomux_v3_setup_pad(cfg->pwm_padmux[cputype] |
1226e56c5791STim Harvey MUX_PAD_CTRL(ctrl));
1227e56c5791STim Harvey }
1228e56c5791STim Harvey }
1229e56c5791STim Harvey
1230e56c5791STim Harvey if (!quiet) {
12315c55572fSTim Harvey if (gpio_cfg[board].msata_en && is_cpu_type(MXC_CPU_MX6Q)) {
1232e56c5791STim Harvey printf("MSATA: %s\n", (hwconfig("msata") ?
1233e56c5791STim Harvey "enabled" : "disabled"));
1234e56c5791STim Harvey }
1235e49621b3STim Harvey if (gpio_cfg[board].rs232_en) {
1236e56c5791STim Harvey printf("RS232: %s\n", (hwconfig("rs232")) ?
1237e56c5791STim Harvey "enabled" : "disabled");
1238e56c5791STim Harvey }
1239e56c5791STim Harvey }
1240e49621b3STim Harvey }
1241e56c5791STim Harvey
1242e56c5791STim Harvey /* setup board specific PMIC */
setup_pmic(void)12436d38f3a8STim Harvey void setup_pmic(void)
1244e56c5791STim Harvey {
1245e56c5791STim Harvey struct pmic *p;
124694a1d6c6STim Harvey struct ventana_board_info ventana_info;
124794a1d6c6STim Harvey int board = read_eeprom(CONFIG_I2C_GSC, &ventana_info);
12480fd28b1fSSimon Glass const int i2c_pmic = 1;
1249e56c5791STim Harvey u32 reg;
1250e56c5791STim Harvey
12510fd28b1fSSimon Glass i2c_set_bus_num(i2c_pmic);
12526d38f3a8STim Harvey
1253e56c5791STim Harvey /* configure PFUZE100 PMIC */
12546d38f3a8STim Harvey if (!i2c_probe(CONFIG_POWER_PFUZE100_I2C_ADDR)) {
12556d38f3a8STim Harvey debug("probed PFUZE100@0x%x\n", CONFIG_POWER_PFUZE100_I2C_ADDR);
12560fd28b1fSSimon Glass power_pfuze100_init(i2c_pmic);
1257e56c5791STim Harvey p = pmic_get("PFUZE100");
1258e56c5791STim Harvey if (p && !pmic_probe(p)) {
1259e56c5791STim Harvey pmic_reg_read(p, PFUZE100_DEVICEID, ®);
1260e56c5791STim Harvey printf("PMIC: PFUZE100 ID=0x%02x\n", reg);
1261e56c5791STim Harvey
1262e56c5791STim Harvey /* Set VGEN1 to 1.5V and enable */
1263e56c5791STim Harvey pmic_reg_read(p, PFUZE100_VGEN1VOL, ®);
1264e56c5791STim Harvey reg &= ~(LDO_VOL_MASK);
1265e56c5791STim Harvey reg |= (LDOA_1_50V | LDO_EN);
1266e56c5791STim Harvey pmic_reg_write(p, PFUZE100_VGEN1VOL, reg);
1267e56c5791STim Harvey
1268e56c5791STim Harvey /* Set SWBST to 5.0V and enable */
1269e56c5791STim Harvey pmic_reg_read(p, PFUZE100_SWBSTCON1, ®);
1270e56c5791STim Harvey reg &= ~(SWBST_MODE_MASK | SWBST_VOL_MASK);
127118e02ffeSMarek Vasut reg |= (SWBST_5_00V | (SWBST_MODE_AUTO << SWBST_MODE_SHIFT));
1272e56c5791STim Harvey pmic_reg_write(p, PFUZE100_SWBSTCON1, reg);
1273e56c5791STim Harvey }
1274e56c5791STim Harvey }
1275e56c5791STim Harvey
1276e56c5791STim Harvey /* configure LTC3676 PMIC */
12776d38f3a8STim Harvey else if (!i2c_probe(CONFIG_POWER_LTC3676_I2C_ADDR)) {
12786d38f3a8STim Harvey debug("probed LTC3676@0x%x\n", CONFIG_POWER_LTC3676_I2C_ADDR);
12790fd28b1fSSimon Glass power_ltc3676_init(i2c_pmic);
1280e56c5791STim Harvey p = pmic_get("LTC3676_PMIC");
128194a1d6c6STim Harvey if (!p || pmic_probe(p))
128294a1d6c6STim Harvey return;
1283e56c5791STim Harvey puts("PMIC: LTC3676\n");
1284e56c5791STim Harvey /*
1285e56c5791STim Harvey * set board-specific scalar for max CPU frequency
1286e56c5791STim Harvey * per CPU based on the LDO enabled Operating Ranges
1287e56c5791STim Harvey * defined in the respective IMX6DQ and IMX6SDL
1288e56c5791STim Harvey * datasheets. The voltage resulting from the R1/R2
1289e56c5791STim Harvey * feedback inputs on Ventana is 1308mV. Note that this
1290e56c5791STim Harvey * is a bit shy of the Vmin of 1350mV in the datasheet
1291e56c5791STim Harvey * for LDO enabled mode but is as high as we can go.
1292e56c5791STim Harvey */
129394a1d6c6STim Harvey switch (board) {
129494a1d6c6STim Harvey case GW560x:
129594a1d6c6STim Harvey /* mask PGOOD during SW3 transition */
129694a1d6c6STim Harvey pmic_reg_write(p, LTC3676_DVB3B,
129794a1d6c6STim Harvey 0x1f | LTC3676_PGOOD_MASK);
129894a1d6c6STim Harvey /* set SW3 (VDD_ARM) */
129994a1d6c6STim Harvey pmic_reg_write(p, LTC3676_DVB3A, 0x1f);
130094a1d6c6STim Harvey break;
1301214fb19bSTim Harvey case GW5903:
1302d576d6f3STim Harvey /* mask PGOOD during SW1 transition */
1303d576d6f3STim Harvey pmic_reg_write(p, LTC3676_DVB3B,
1304d576d6f3STim Harvey 0x1f | LTC3676_PGOOD_MASK);
1305d576d6f3STim Harvey /* set SW3 (VDD_ARM) */
1306d576d6f3STim Harvey pmic_reg_write(p, LTC3676_DVB3A, 0x1f);
1307d576d6f3STim Harvey
1308214fb19bSTim Harvey /* mask PGOOD during SW4 transition */
1309214fb19bSTim Harvey pmic_reg_write(p, LTC3676_DVB4B,
1310214fb19bSTim Harvey 0x1f | LTC3676_PGOOD_MASK);
1311214fb19bSTim Harvey /* set SW4 (VDD_SOC) */
1312214fb19bSTim Harvey pmic_reg_write(p, LTC3676_DVB4A, 0x1f);
1313214fb19bSTim Harvey break;
131494a1d6c6STim Harvey default:
1315e56c5791STim Harvey /* mask PGOOD during SW1 transition */
1316e56c5791STim Harvey pmic_reg_write(p, LTC3676_DVB1B,
1317e56c5791STim Harvey 0x1f | LTC3676_PGOOD_MASK);
1318e56c5791STim Harvey /* set SW1 (VDD_SOC) */
1319e56c5791STim Harvey pmic_reg_write(p, LTC3676_DVB1A, 0x1f);
1320e56c5791STim Harvey
1321e56c5791STim Harvey /* mask PGOOD during SW3 transition */
1322e56c5791STim Harvey pmic_reg_write(p, LTC3676_DVB3B,
1323e56c5791STim Harvey 0x1f | LTC3676_PGOOD_MASK);
1324e56c5791STim Harvey /* set SW3 (VDD_ARM) */
1325e56c5791STim Harvey pmic_reg_write(p, LTC3676_DVB3A, 0x1f);
1326e56c5791STim Harvey }
1327e56c5791STim Harvey }
1328e56c5791STim Harvey }
132965da5c3bSTim Harvey
133065da5c3bSTim Harvey #ifdef CONFIG_FSL_ESDHC
133194a1d6c6STim Harvey static struct fsl_esdhc_cfg usdhc_cfg[2];
133265da5c3bSTim Harvey
board_mmc_init(bd_t * bis)133365da5c3bSTim Harvey int board_mmc_init(bd_t *bis)
133465da5c3bSTim Harvey {
13358d1a6ff8STim Harvey struct ventana_board_info ventana_info;
13368d1a6ff8STim Harvey int board_type = read_eeprom(CONFIG_I2C_GSC, &ventana_info);
13378d1a6ff8STim Harvey int ret;
13388d1a6ff8STim Harvey
13398d1a6ff8STim Harvey switch (board_type) {
13408d1a6ff8STim Harvey case GW52xx:
13418d1a6ff8STim Harvey case GW53xx:
13428d1a6ff8STim Harvey case GW54xx:
13438d1a6ff8STim Harvey case GW553x:
13448d1a6ff8STim Harvey /* usdhc3: 4bit microSD */
134565da5c3bSTim Harvey SETUP_IOMUX_PADS(usdhc3_pads);
134694a1d6c6STim Harvey usdhc_cfg[0].esdhc_base = USDHC3_BASE_ADDR;
134794a1d6c6STim Harvey usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK);
134894a1d6c6STim Harvey usdhc_cfg[0].max_bus_width = 4;
134994a1d6c6STim Harvey return fsl_esdhc_initialize(bis, &usdhc_cfg[0]);
135094a1d6c6STim Harvey case GW560x:
135194a1d6c6STim Harvey /* usdhc2: 8-bit eMMC */
135294a1d6c6STim Harvey SETUP_IOMUX_PADS(gw560x_emmc_sd2_pads);
135394a1d6c6STim Harvey usdhc_cfg[0].esdhc_base = USDHC2_BASE_ADDR;
135494a1d6c6STim Harvey usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC2_CLK);
135594a1d6c6STim Harvey usdhc_cfg[0].max_bus_width = 8;
135694a1d6c6STim Harvey ret = fsl_esdhc_initialize(bis, &usdhc_cfg[0]);
135794a1d6c6STim Harvey if (ret)
135894a1d6c6STim Harvey return ret;
135994a1d6c6STim Harvey /* usdhc3: 4-bit microSD */
136094a1d6c6STim Harvey SETUP_IOMUX_PADS(usdhc3_pads);
136194a1d6c6STim Harvey usdhc_cfg[1].esdhc_base = USDHC3_BASE_ADDR;
136294a1d6c6STim Harvey usdhc_cfg[1].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK);
136394a1d6c6STim Harvey usdhc_cfg[1].max_bus_width = 4;
136494a1d6c6STim Harvey return fsl_esdhc_initialize(bis, &usdhc_cfg[1]);
1365214fb19bSTim Harvey case GW5903:
1366214fb19bSTim Harvey /* usdhc3: 8-bit eMMC */
1367214fb19bSTim Harvey SETUP_IOMUX_PADS(gw5904_emmc_pads);
1368214fb19bSTim Harvey usdhc_cfg[0].esdhc_base = USDHC3_BASE_ADDR;
1369214fb19bSTim Harvey usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK);
1370214fb19bSTim Harvey usdhc_cfg[0].max_bus_width = 8;
1371214fb19bSTim Harvey ret = fsl_esdhc_initialize(bis, &usdhc_cfg[0]);
1372214fb19bSTim Harvey if (ret)
1373214fb19bSTim Harvey return ret;
1374214fb19bSTim Harvey /* usdhc2: 4-bit microSD */
1375214fb19bSTim Harvey SETUP_IOMUX_PADS(gw5904_mmc_pads);
1376214fb19bSTim Harvey usdhc_cfg[1].esdhc_base = USDHC2_BASE_ADDR;
1377214fb19bSTim Harvey usdhc_cfg[1].sdhc_clk = mxc_get_clock(MXC_ESDHC2_CLK);
1378214fb19bSTim Harvey usdhc_cfg[1].max_bus_width = 4;
1379214fb19bSTim Harvey return fsl_esdhc_initialize(bis, &usdhc_cfg[1]);
13808d1a6ff8STim Harvey case GW5904:
13818d1a6ff8STim Harvey /* usdhc3: 8bit eMMC */
13828d1a6ff8STim Harvey SETUP_IOMUX_PADS(gw5904_emmc_pads);
138394a1d6c6STim Harvey usdhc_cfg[0].esdhc_base = USDHC3_BASE_ADDR;
138494a1d6c6STim Harvey usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK);
138594a1d6c6STim Harvey usdhc_cfg[0].max_bus_width = 8;
138694a1d6c6STim Harvey return fsl_esdhc_initialize(bis, &usdhc_cfg[0]);
13878d1a6ff8STim Harvey default:
13888d1a6ff8STim Harvey /* doesn't have MMC */
13898d1a6ff8STim Harvey return -1;
13908d1a6ff8STim Harvey }
139165da5c3bSTim Harvey }
139265da5c3bSTim Harvey
board_mmc_getcd(struct mmc * mmc)139365da5c3bSTim Harvey int board_mmc_getcd(struct mmc *mmc)
139465da5c3bSTim Harvey {
13958d1a6ff8STim Harvey struct ventana_board_info ventana_info;
13968d1a6ff8STim Harvey struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv;
13978d1a6ff8STim Harvey int board = read_eeprom(CONFIG_I2C_GSC, &ventana_info);
13988d1a6ff8STim Harvey int gpio = gpio_cfg[board].mmc_cd;
13998d1a6ff8STim Harvey
140065da5c3bSTim Harvey /* Card Detect */
14018d1a6ff8STim Harvey switch (board) {
140294a1d6c6STim Harvey case GW560x:
140394a1d6c6STim Harvey /* emmc is always present */
140494a1d6c6STim Harvey if (cfg->esdhc_base == USDHC2_BASE_ADDR)
140594a1d6c6STim Harvey return 1;
140694a1d6c6STim Harvey break;
1407214fb19bSTim Harvey case GW5903:
14088d1a6ff8STim Harvey case GW5904:
14098d1a6ff8STim Harvey /* emmc is always present */
14108d1a6ff8STim Harvey if (cfg->esdhc_base == USDHC3_BASE_ADDR)
14118d1a6ff8STim Harvey return 1;
14128d1a6ff8STim Harvey break;
141365da5c3bSTim Harvey }
14148d1a6ff8STim Harvey
14158d1a6ff8STim Harvey if (gpio) {
14168d1a6ff8STim Harvey debug("%s: gpio%d=%d\n", __func__, gpio, gpio_get_value(gpio));
14178d1a6ff8STim Harvey return !gpio_get_value(gpio);
14188d1a6ff8STim Harvey }
14198d1a6ff8STim Harvey
14208d1a6ff8STim Harvey return -1;
14218d1a6ff8STim Harvey }
14228d1a6ff8STim Harvey
142365da5c3bSTim Harvey #endif /* CONFIG_FSL_ESDHC */
1424