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