xref: /rk3399_rockchip-uboot/board/gateworks/gw_ventana/common.c (revision 385575bcb6013e8151fd98d80b8dc2b5bd732cfb)
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 
9e56c5791STim Harvey #include <asm/arch/mx6-pins.h>
10e56c5791STim Harvey #include <asm/arch/sys_proto.h>
11e56c5791STim Harvey #include <asm/gpio.h>
12e56c5791STim Harvey #include <asm/imx-common/mxc_i2c.h>
13e56c5791STim Harvey #include <hwconfig.h>
14e56c5791STim Harvey #include <power/pmic.h>
15e56c5791STim Harvey #include <power/ltc3676_pmic.h>
16e56c5791STim Harvey #include <power/pfuze100_pmic.h>
17e56c5791STim Harvey 
18e56c5791STim Harvey #include "common.h"
19e56c5791STim Harvey 
20e56c5791STim Harvey /* UART1: Function varies per baseboard */
21e56c5791STim Harvey static iomux_v3_cfg_t const uart1_pads[] = {
22e56c5791STim Harvey 	IOMUX_PADS(PAD_SD3_DAT6__UART1_RX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL)),
23e56c5791STim Harvey 	IOMUX_PADS(PAD_SD3_DAT7__UART1_TX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL)),
24e56c5791STim Harvey };
25e56c5791STim Harvey 
26e56c5791STim Harvey /* UART2: Serial Console */
27e56c5791STim Harvey static iomux_v3_cfg_t const uart2_pads[] = {
28e56c5791STim Harvey 	IOMUX_PADS(PAD_SD4_DAT7__UART2_TX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL)),
29e56c5791STim Harvey 	IOMUX_PADS(PAD_SD4_DAT4__UART2_RX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL)),
30e56c5791STim Harvey };
31e56c5791STim Harvey 
32e56c5791STim Harvey void setup_iomux_uart(void)
33e56c5791STim Harvey {
34e56c5791STim Harvey 	SETUP_IOMUX_PADS(uart1_pads);
35e56c5791STim Harvey 	SETUP_IOMUX_PADS(uart2_pads);
36e56c5791STim Harvey }
37e56c5791STim Harvey 
38e56c5791STim Harvey /* I2C1: GSC */
39e56c5791STim Harvey static struct i2c_pads_info mx6q_i2c_pad_info0 = {
40e56c5791STim Harvey 	.scl = {
41e56c5791STim Harvey 		.i2c_mode = MX6Q_PAD_EIM_D21__I2C1_SCL | PC,
42e56c5791STim Harvey 		.gpio_mode = MX6Q_PAD_EIM_D21__GPIO3_IO21 | PC,
43e56c5791STim Harvey 		.gp = IMX_GPIO_NR(3, 21)
44e56c5791STim Harvey 	},
45e56c5791STim Harvey 	.sda = {
46e56c5791STim Harvey 		.i2c_mode = MX6Q_PAD_EIM_D28__I2C1_SDA | PC,
47e56c5791STim Harvey 		.gpio_mode = MX6Q_PAD_EIM_D28__GPIO3_IO28 | PC,
48e56c5791STim Harvey 		.gp = IMX_GPIO_NR(3, 28)
49e56c5791STim Harvey 	}
50e56c5791STim Harvey };
51e56c5791STim Harvey static struct i2c_pads_info mx6dl_i2c_pad_info0 = {
52e56c5791STim Harvey 	.scl = {
53e56c5791STim Harvey 		.i2c_mode = MX6DL_PAD_EIM_D21__I2C1_SCL | PC,
54e56c5791STim Harvey 		.gpio_mode = MX6DL_PAD_EIM_D21__GPIO3_IO21 | PC,
55e56c5791STim Harvey 		.gp = IMX_GPIO_NR(3, 21)
56e56c5791STim Harvey 	},
57e56c5791STim Harvey 	.sda = {
58e56c5791STim Harvey 		.i2c_mode = MX6DL_PAD_EIM_D28__I2C1_SDA | PC,
59e56c5791STim Harvey 		.gpio_mode = MX6DL_PAD_EIM_D28__GPIO3_IO28 | PC,
60e56c5791STim Harvey 		.gp = IMX_GPIO_NR(3, 28)
61e56c5791STim Harvey 	}
62e56c5791STim Harvey };
63e56c5791STim Harvey 
64e56c5791STim Harvey /* I2C2: PMIC/PCIe Switch/PCIe Clock/Mezz */
65e56c5791STim Harvey static struct i2c_pads_info mx6q_i2c_pad_info1 = {
66e56c5791STim Harvey 	.scl = {
67e56c5791STim Harvey 		.i2c_mode = MX6Q_PAD_KEY_COL3__I2C2_SCL | PC,
68e56c5791STim Harvey 		.gpio_mode = MX6Q_PAD_KEY_COL3__GPIO4_IO12 | PC,
69e56c5791STim Harvey 		.gp = IMX_GPIO_NR(4, 12)
70e56c5791STim Harvey 	},
71e56c5791STim Harvey 	.sda = {
72e56c5791STim Harvey 		.i2c_mode = MX6Q_PAD_KEY_ROW3__I2C2_SDA | PC,
73e56c5791STim Harvey 		.gpio_mode = MX6Q_PAD_KEY_ROW3__GPIO4_IO13 | PC,
74e56c5791STim Harvey 		.gp = IMX_GPIO_NR(4, 13)
75e56c5791STim Harvey 	}
76e56c5791STim Harvey };
77e56c5791STim Harvey static struct i2c_pads_info mx6dl_i2c_pad_info1 = {
78e56c5791STim Harvey 	.scl = {
79e56c5791STim Harvey 		.i2c_mode = MX6DL_PAD_KEY_COL3__I2C2_SCL | PC,
80e56c5791STim Harvey 		.gpio_mode = MX6DL_PAD_KEY_COL3__GPIO4_IO12 | PC,
81e56c5791STim Harvey 		.gp = IMX_GPIO_NR(4, 12)
82e56c5791STim Harvey 	},
83e56c5791STim Harvey 	.sda = {
84e56c5791STim Harvey 		.i2c_mode = MX6DL_PAD_KEY_ROW3__I2C2_SDA | PC,
85e56c5791STim Harvey 		.gpio_mode = MX6DL_PAD_KEY_ROW3__GPIO4_IO13 | PC,
86e56c5791STim Harvey 		.gp = IMX_GPIO_NR(4, 13)
87e56c5791STim Harvey 	}
88e56c5791STim Harvey };
89e56c5791STim Harvey 
90e56c5791STim Harvey /* I2C3: Misc/Expansion */
91e56c5791STim Harvey static struct i2c_pads_info mx6q_i2c_pad_info2 = {
92e56c5791STim Harvey 	.scl = {
93e56c5791STim Harvey 		.i2c_mode = MX6Q_PAD_GPIO_3__I2C3_SCL | PC,
94e56c5791STim Harvey 		.gpio_mode = MX6Q_PAD_GPIO_3__GPIO1_IO03 | PC,
95e56c5791STim Harvey 		.gp = IMX_GPIO_NR(1, 3)
96e56c5791STim Harvey 	},
97e56c5791STim Harvey 	.sda = {
98e56c5791STim Harvey 		.i2c_mode = MX6Q_PAD_GPIO_6__I2C3_SDA | PC,
99e56c5791STim Harvey 		.gpio_mode = MX6Q_PAD_GPIO_6__GPIO1_IO06 | PC,
100e56c5791STim Harvey 		.gp = IMX_GPIO_NR(1, 6)
101e56c5791STim Harvey 	}
102e56c5791STim Harvey };
103e56c5791STim Harvey static struct i2c_pads_info mx6dl_i2c_pad_info2 = {
104e56c5791STim Harvey 	.scl = {
105e56c5791STim Harvey 		.i2c_mode = MX6DL_PAD_GPIO_3__I2C3_SCL | PC,
106e56c5791STim Harvey 		.gpio_mode = MX6DL_PAD_GPIO_3__GPIO1_IO03 | PC,
107e56c5791STim Harvey 		.gp = IMX_GPIO_NR(1, 3)
108e56c5791STim Harvey 	},
109e56c5791STim Harvey 	.sda = {
110e56c5791STim Harvey 		.i2c_mode = MX6DL_PAD_GPIO_6__I2C3_SDA | PC,
111e56c5791STim Harvey 		.gpio_mode = MX6DL_PAD_GPIO_6__GPIO1_IO06 | PC,
112e56c5791STim Harvey 		.gp = IMX_GPIO_NR(1, 6)
113e56c5791STim Harvey 	}
114e56c5791STim Harvey };
115e56c5791STim Harvey 
116e56c5791STim Harvey void setup_ventana_i2c(void)
117e56c5791STim Harvey {
118e56c5791STim Harvey 	if (is_cpu_type(MXC_CPU_MX6Q)) {
119e56c5791STim Harvey 		setup_i2c(0, CONFIG_SYS_I2C_SPEED, 0x7f, &mx6q_i2c_pad_info0);
120e56c5791STim Harvey 		setup_i2c(1, CONFIG_SYS_I2C_SPEED, 0x7f, &mx6q_i2c_pad_info1);
121e56c5791STim Harvey 		setup_i2c(2, CONFIG_SYS_I2C_SPEED, 0x7f, &mx6q_i2c_pad_info2);
122e56c5791STim Harvey 	} else {
123e56c5791STim Harvey 		setup_i2c(0, CONFIG_SYS_I2C_SPEED, 0x7f, &mx6dl_i2c_pad_info0);
124e56c5791STim Harvey 		setup_i2c(1, CONFIG_SYS_I2C_SPEED, 0x7f, &mx6dl_i2c_pad_info1);
125e56c5791STim Harvey 		setup_i2c(2, CONFIG_SYS_I2C_SPEED, 0x7f, &mx6dl_i2c_pad_info2);
126e56c5791STim Harvey 	}
127e56c5791STim Harvey }
128e56c5791STim Harvey 
129e56c5791STim Harvey /*
130e56c5791STim Harvey  * Baseboard specific GPIO
131e56c5791STim Harvey  */
132e56c5791STim Harvey 
133e56c5791STim Harvey /* common to add baseboards */
134e56c5791STim Harvey static iomux_v3_cfg_t const gw_gpio_pads[] = {
135e56c5791STim Harvey 	/* RS232_EN# */
136e56c5791STim Harvey 	IOMUX_PADS(PAD_SD4_DAT3__GPIO2_IO11 | DIO_PAD_CFG),
137e56c5791STim Harvey };
138e56c5791STim Harvey 
139e56c5791STim Harvey /* prototype */
140e56c5791STim Harvey static iomux_v3_cfg_t const gwproto_gpio_pads[] = {
141e56c5791STim Harvey 	/* PANLEDG# */
142e56c5791STim Harvey 	IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG),
143e56c5791STim Harvey 	/* PANLEDR# */
144e56c5791STim Harvey 	IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG),
145e56c5791STim Harvey 	/* LOCLED# */
146e56c5791STim Harvey 	IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG),
147e56c5791STim Harvey 	/* RS485_EN */
148e56c5791STim Harvey 	IOMUX_PADS(PAD_SD3_DAT4__GPIO7_IO01 | DIO_PAD_CFG),
149e56c5791STim Harvey 	/* IOEXP_PWREN# */
150e56c5791STim Harvey 	IOMUX_PADS(PAD_EIM_A19__GPIO2_IO19 | DIO_PAD_CFG),
151e56c5791STim Harvey 	/* IOEXP_IRQ# */
152e56c5791STim Harvey 	IOMUX_PADS(PAD_EIM_A20__GPIO2_IO18 | MUX_PAD_CTRL(IRQ_PAD_CTRL)),
153e56c5791STim Harvey 	/* VID_EN */
154e56c5791STim Harvey 	IOMUX_PADS(PAD_EIM_D31__GPIO3_IO31 | DIO_PAD_CFG),
155e56c5791STim Harvey 	/* DIOI2C_DIS# */
156e56c5791STim Harvey 	IOMUX_PADS(PAD_GPIO_19__GPIO4_IO05 | DIO_PAD_CFG),
157e56c5791STim Harvey 	/* PCICK_SSON */
158e56c5791STim Harvey 	IOMUX_PADS(PAD_SD1_CLK__GPIO1_IO20 | DIO_PAD_CFG),
159e56c5791STim Harvey 	/* PCI_RST# */
160e56c5791STim Harvey 	IOMUX_PADS(PAD_ENET_TXD1__GPIO1_IO29 | DIO_PAD_CFG),
161e56c5791STim Harvey };
162e56c5791STim Harvey 
163e56c5791STim Harvey static iomux_v3_cfg_t const gw51xx_gpio_pads[] = {
164e56c5791STim Harvey 	/* PANLEDG# */
165e56c5791STim Harvey 	IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG),
166e56c5791STim Harvey 	/* PANLEDR# */
167e56c5791STim Harvey 	IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG),
168e56c5791STim Harvey 	/* IOEXP_PWREN# */
169e56c5791STim Harvey 	IOMUX_PADS(PAD_EIM_A19__GPIO2_IO19 | DIO_PAD_CFG),
170e56c5791STim Harvey 	/* IOEXP_IRQ# */
171e56c5791STim Harvey 	IOMUX_PADS(PAD_EIM_A20__GPIO2_IO18 | MUX_PAD_CTRL(IRQ_PAD_CTRL)),
172e56c5791STim Harvey 
173e56c5791STim Harvey 	/* GPS_SHDN */
174e56c5791STim Harvey 	IOMUX_PADS(PAD_GPIO_2__GPIO1_IO02 | DIO_PAD_CFG),
175e56c5791STim Harvey 	/* VID_PWR */
176e56c5791STim Harvey 	IOMUX_PADS(PAD_CSI0_DATA_EN__GPIO5_IO20 | DIO_PAD_CFG),
177e56c5791STim Harvey 	/* PCI_RST# */
178e56c5791STim Harvey 	IOMUX_PADS(PAD_GPIO_0__GPIO1_IO00 | DIO_PAD_CFG),
179e56c5791STim Harvey 	/* PCIESKT_WDIS# */
180e56c5791STim Harvey 	IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG),
181e56c5791STim Harvey };
182e56c5791STim Harvey 
183e56c5791STim Harvey static iomux_v3_cfg_t const gw52xx_gpio_pads[] = {
1845c55572fSTim Harvey 	/* MSATA_EN */
1855c55572fSTim Harvey 	IOMUX_PADS(PAD_SD4_DAT0__GPIO2_IO08 | DIO_PAD_CFG),
186e56c5791STim Harvey 	/* PANLEDG# */
187e56c5791STim Harvey 	IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG),
188e56c5791STim Harvey 	/* PANLEDR# */
189e56c5791STim Harvey 	IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG),
190e56c5791STim Harvey 	/* IOEXP_PWREN# */
191e56c5791STim Harvey 	IOMUX_PADS(PAD_EIM_A19__GPIO2_IO19 | DIO_PAD_CFG),
192e56c5791STim Harvey 	/* IOEXP_IRQ# */
193e56c5791STim Harvey 	IOMUX_PADS(PAD_EIM_A20__GPIO2_IO18 | MUX_PAD_CTRL(IRQ_PAD_CTRL)),
1949a83a815STim Harvey 	/* CAN_STBY */
1959a83a815STim Harvey 	IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09 | DIO_PAD_CFG),
196e56c5791STim Harvey 	/* MX6_LOCLED# */
197e56c5791STim Harvey 	IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG),
198e56c5791STim Harvey 	/* GPS_SHDN */
199e56c5791STim Harvey 	IOMUX_PADS(PAD_ENET_RXD0__GPIO1_IO27 | DIO_PAD_CFG),
200e56c5791STim Harvey 	/* USBOTG_SEL */
201e56c5791STim Harvey 	IOMUX_PADS(PAD_GPIO_2__GPIO1_IO02 | DIO_PAD_CFG),
202e56c5791STim Harvey 	/* VID_PWR */
203e56c5791STim Harvey 	IOMUX_PADS(PAD_EIM_D31__GPIO3_IO31 | DIO_PAD_CFG),
204e56c5791STim Harvey 	/* PCI_RST# */
205e56c5791STim Harvey 	IOMUX_PADS(PAD_ENET_TXD1__GPIO1_IO29 | DIO_PAD_CFG),
206e56c5791STim Harvey 	/* PCI_RST# (GW522x) */
207e56c5791STim Harvey 	IOMUX_PADS(PAD_EIM_D23__GPIO3_IO23 | DIO_PAD_CFG),
2089a83a815STim Harvey 	/* RS485_EN */
2099a83a815STim Harvey 	IOMUX_PADS(PAD_SD3_DAT4__GPIO7_IO01 | DIO_PAD_CFG),
210e56c5791STim Harvey 	/* PCIESKT_WDIS# */
211e56c5791STim Harvey 	IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG),
212e56c5791STim Harvey };
213e56c5791STim Harvey 
214e56c5791STim Harvey static iomux_v3_cfg_t const gw53xx_gpio_pads[] = {
2155c55572fSTim Harvey 	/* MSATA_EN */
2165c55572fSTim Harvey 	IOMUX_PADS(PAD_SD4_DAT0__GPIO2_IO08 | DIO_PAD_CFG),
2179a83a815STim Harvey 	/* CAN_STBY */
2189a83a815STim Harvey 	IOMUX_PADS(PAD_GPIO_2__GPIO1_IO02 | DIO_PAD_CFG),
2199a83a815STim Harvey 	/* USB_HUBRST# */
2209a83a815STim Harvey 	IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09 | DIO_PAD_CFG),
221e56c5791STim Harvey 	/* PANLEDG# */
222e56c5791STim Harvey 	IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG),
223e56c5791STim Harvey 	/* PANLEDR# */
224e56c5791STim Harvey 	IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG),
225e56c5791STim Harvey 	/* MX6_LOCLED# */
226e56c5791STim Harvey 	IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG),
227e56c5791STim Harvey 	/* IOEXP_PWREN# */
228e56c5791STim Harvey 	IOMUX_PADS(PAD_EIM_A19__GPIO2_IO19 | DIO_PAD_CFG),
229e56c5791STim Harvey 	/* IOEXP_IRQ# */
230e56c5791STim Harvey 	IOMUX_PADS(PAD_EIM_A20__GPIO2_IO18 | MUX_PAD_CTRL(IRQ_PAD_CTRL)),
231e56c5791STim Harvey 	/* DIOI2C_DIS# */
232e56c5791STim Harvey 	IOMUX_PADS(PAD_GPIO_19__GPIO4_IO05 | DIO_PAD_CFG),
233e56c5791STim Harvey 	/* GPS_SHDN */
234e56c5791STim Harvey 	IOMUX_PADS(PAD_ENET_RXD0__GPIO1_IO27 | DIO_PAD_CFG),
235e56c5791STim Harvey 	/* VID_EN */
236e56c5791STim Harvey 	IOMUX_PADS(PAD_EIM_D31__GPIO3_IO31 | DIO_PAD_CFG),
237e56c5791STim Harvey 	/* PCI_RST# */
238e56c5791STim Harvey 	IOMUX_PADS(PAD_ENET_TXD1__GPIO1_IO29 | DIO_PAD_CFG),
2399a83a815STim Harvey 	/* RS485_EN */
2409a83a815STim Harvey 	IOMUX_PADS(PAD_SD3_DAT4__GPIO7_IO01 | DIO_PAD_CFG),
241e56c5791STim Harvey 	/* PCIESKT_WDIS# */
242e56c5791STim Harvey 	IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG),
243e56c5791STim Harvey };
244e56c5791STim Harvey 
245e56c5791STim Harvey static iomux_v3_cfg_t const gw54xx_gpio_pads[] = {
2465c55572fSTim Harvey 	/* MSATA_EN */
2475c55572fSTim Harvey 	IOMUX_PADS(PAD_SD4_DAT0__GPIO2_IO08 | DIO_PAD_CFG),
2489a83a815STim Harvey 	/* CAN_STBY */
2499a83a815STim Harvey 	IOMUX_PADS(PAD_GPIO_2__GPIO1_IO02 | DIO_PAD_CFG),
250e56c5791STim Harvey 	/* PANLEDG# */
251e56c5791STim Harvey 	IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG),
252e56c5791STim Harvey 	/* PANLEDR# */
2539a83a815STim Harvey 	IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG),
254e56c5791STim Harvey 	/* MX6_LOCLED# */
255e56c5791STim Harvey 	IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG),
2569a83a815STim Harvey 	/* USB_HUBRST# */
2579a83a815STim Harvey 	IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16 | DIO_PAD_CFG),
258e56c5791STim Harvey 	/* MIPI_DIO */
259e56c5791STim Harvey 	IOMUX_PADS(PAD_SD1_DAT3__GPIO1_IO21 | DIO_PAD_CFG),
260e56c5791STim Harvey 	/* RS485_EN */
261e56c5791STim Harvey 	IOMUX_PADS(PAD_EIM_D24__GPIO3_IO24 | DIO_PAD_CFG),
262e56c5791STim Harvey 	/* IOEXP_PWREN# */
2639a83a815STim Harvey 	IOMUX_PADS(PAD_EIM_A19__GPIO2_IO19 | DIO_PAD_CFG),
264e56c5791STim Harvey 	/* IOEXP_IRQ# */
2659a83a815STim Harvey 	IOMUX_PADS(PAD_EIM_A20__GPIO2_IO18 | MUX_PAD_CTRL(IRQ_PAD_CTRL)),
266e56c5791STim Harvey 	/* DIOI2C_DIS# */
267e56c5791STim Harvey 	IOMUX_PADS(PAD_GPIO_19__GPIO4_IO05 | DIO_PAD_CFG),
268e56c5791STim Harvey 	/* PCI_RST# */
269e56c5791STim Harvey 	IOMUX_PADS(PAD_ENET_TXD1__GPIO1_IO29 | DIO_PAD_CFG),
270e56c5791STim Harvey 	/* VID_EN */
271e56c5791STim Harvey 	IOMUX_PADS(PAD_EIM_D31__GPIO3_IO31 | DIO_PAD_CFG),
2729a83a815STim Harvey 	/* RS485_EN */
2739a83a815STim Harvey 	IOMUX_PADS(PAD_SD3_DAT4__GPIO7_IO01 | DIO_PAD_CFG),
274e56c5791STim Harvey 	/* PCIESKT_WDIS# */
275e56c5791STim Harvey 	IOMUX_PADS(PAD_DISP0_DAT23__GPIO5_IO17 | DIO_PAD_CFG),
276e56c5791STim Harvey };
277e56c5791STim Harvey 
278e56c5791STim Harvey static iomux_v3_cfg_t const gw551x_gpio_pads[] = {
2799a83a815STim Harvey 	/* CAN_STBY */
2809a83a815STim Harvey 	IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09 | DIO_PAD_CFG),
281e56c5791STim Harvey 	/* PANLED# */
282e56c5791STim Harvey 	IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG),
283e56c5791STim Harvey 	/* PCI_RST# */
284e56c5791STim Harvey 	IOMUX_PADS(PAD_GPIO_0__GPIO1_IO00 | DIO_PAD_CFG),
285e56c5791STim Harvey 	/* PCIESKT_WDIS# */
286e56c5791STim Harvey 	IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG),
287e56c5791STim Harvey };
288e56c5791STim Harvey 
289e56c5791STim Harvey static iomux_v3_cfg_t const gw552x_gpio_pads[] = {
2905c55572fSTim Harvey 	/* MSATA_EN */
2915c55572fSTim Harvey 	IOMUX_PADS(PAD_SD4_DAT0__GPIO2_IO08 | DIO_PAD_CFG),
2929a83a815STim Harvey 	/* USBOTG_SEL */
2939a83a815STim Harvey 	IOMUX_PADS(PAD_GPIO_7__GPIO1_IO07 | DIO_PAD_CFG),
2949a83a815STim Harvey 	/* USB_HUBRST# */
2959a83a815STim Harvey 	IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09 | DIO_PAD_CFG),
296e56c5791STim Harvey 	/* PANLEDG# */
297e56c5791STim Harvey 	IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG),
298e56c5791STim Harvey 	/* PANLEDR# */
299e56c5791STim Harvey 	IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG),
300e56c5791STim Harvey 	/* MX6_LOCLED# */
301e56c5791STim Harvey 	IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG),
302e56c5791STim Harvey 	/* PCI_RST# */
303e56c5791STim Harvey 	IOMUX_PADS(PAD_ENET_TXD1__GPIO1_IO29 | DIO_PAD_CFG),
304e56c5791STim Harvey 	/* MX6_DIO[4:9] */
305e56c5791STim Harvey 	IOMUX_PADS(PAD_CSI0_PIXCLK__GPIO5_IO18 | DIO_PAD_CFG),
306e56c5791STim Harvey 	IOMUX_PADS(PAD_CSI0_DATA_EN__GPIO5_IO20 | DIO_PAD_CFG),
307e56c5791STim Harvey 	IOMUX_PADS(PAD_CSI0_VSYNC__GPIO5_IO21 | DIO_PAD_CFG),
308e56c5791STim Harvey 	IOMUX_PADS(PAD_CSI0_DAT4__GPIO5_IO22 | DIO_PAD_CFG),
309e56c5791STim Harvey 	IOMUX_PADS(PAD_CSI0_DAT5__GPIO5_IO23 | DIO_PAD_CFG),
310e56c5791STim Harvey 	IOMUX_PADS(PAD_CSI0_DAT7__GPIO5_IO25 | DIO_PAD_CFG),
311e56c5791STim Harvey 	/* PCIEGBE1_OFF# */
312e56c5791STim Harvey 	IOMUX_PADS(PAD_GPIO_1__GPIO1_IO01 | DIO_PAD_CFG),
313e56c5791STim Harvey 	/* PCIEGBE2_OFF# */
314e56c5791STim Harvey 	IOMUX_PADS(PAD_GPIO_2__GPIO1_IO02 | DIO_PAD_CFG),
315e56c5791STim Harvey 	/* PCIESKT_WDIS# */
316e56c5791STim Harvey 	IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG),
317e56c5791STim Harvey };
318e56c5791STim Harvey 
319*385575bcSTim Harvey static iomux_v3_cfg_t const gw553x_gpio_pads[] = {
320*385575bcSTim Harvey 	/* PANLEDG# */
321*385575bcSTim Harvey 	IOMUX_PADS(PAD_KEY_COL2__GPIO4_IO10 | DIO_PAD_CFG),
322*385575bcSTim Harvey 	/* PANLEDR# */
323*385575bcSTim Harvey 	IOMUX_PADS(PAD_KEY_ROW2__GPIO4_IO11 | DIO_PAD_CFG),
324*385575bcSTim Harvey 
325*385575bcSTim Harvey 	/* VID_PWR */
326*385575bcSTim Harvey 	IOMUX_PADS(PAD_CSI0_DATA_EN__GPIO5_IO20 | DIO_PAD_CFG),
327*385575bcSTim Harvey 	/* PCI_RST# */
328*385575bcSTim Harvey 	IOMUX_PADS(PAD_GPIO_0__GPIO1_IO00 | DIO_PAD_CFG),
329*385575bcSTim Harvey 	/* PCIESKT_WDIS# */
330*385575bcSTim Harvey 	IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG),
331*385575bcSTim Harvey };
332*385575bcSTim Harvey 
333e56c5791STim Harvey 
334e56c5791STim Harvey /*
335e56c5791STim Harvey  * Board Specific GPIO
336e56c5791STim Harvey  */
337e56c5791STim Harvey struct ventana gpio_cfg[GW_UNKNOWN] = {
338e56c5791STim Harvey 	/* GW5400proto */
339e56c5791STim Harvey 	{
340e56c5791STim Harvey 		.gpio_pads = gw54xx_gpio_pads,
341e56c5791STim Harvey 		.num_pads = ARRAY_SIZE(gw54xx_gpio_pads)/2,
342e56c5791STim Harvey 		.dio_cfg = {
343e56c5791STim Harvey 			{
344e56c5791STim Harvey 				{ IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09) },
345e56c5791STim Harvey 				IMX_GPIO_NR(1, 9),
346e56c5791STim Harvey 				{ IOMUX_PADS(PAD_GPIO_9__PWM1_OUT) },
347e56c5791STim Harvey 				1
348e56c5791STim Harvey 			},
349e56c5791STim Harvey 			{
350e56c5791STim Harvey 				{ IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) },
351e56c5791STim Harvey 				IMX_GPIO_NR(1, 19),
352e56c5791STim Harvey 				{ IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) },
353e56c5791STim Harvey 				2
354e56c5791STim Harvey 			},
355e56c5791STim Harvey 			{
356e56c5791STim Harvey 				{ IOMUX_PADS(PAD_SD4_DAT1__GPIO2_IO09) },
357e56c5791STim Harvey 				IMX_GPIO_NR(2, 9),
358e56c5791STim Harvey 				{ IOMUX_PADS(PAD_SD4_DAT1__PWM3_OUT) },
359e56c5791STim Harvey 				3
360e56c5791STim Harvey 			},
361e56c5791STim Harvey 			{
362e56c5791STim Harvey 				{ IOMUX_PADS(PAD_SD4_DAT2__GPIO2_IO10) },
363e56c5791STim Harvey 				IMX_GPIO_NR(2, 10),
364e56c5791STim Harvey 				{ IOMUX_PADS(PAD_SD4_DAT2__PWM4_OUT) },
365e56c5791STim Harvey 				4
366e56c5791STim Harvey 			},
367e56c5791STim Harvey 		},
368e56c5791STim Harvey 		.num_gpios = 4,
369e56c5791STim Harvey 		.leds = {
370e56c5791STim Harvey 			IMX_GPIO_NR(4, 6),
371e56c5791STim Harvey 			IMX_GPIO_NR(4, 10),
372e56c5791STim Harvey 			IMX_GPIO_NR(4, 15),
373e56c5791STim Harvey 		},
374e56c5791STim Harvey 		.pcie_rst = IMX_GPIO_NR(1, 29),
375e56c5791STim Harvey 		.mezz_pwren = IMX_GPIO_NR(4, 7),
376e56c5791STim Harvey 		.mezz_irq = IMX_GPIO_NR(4, 9),
377e56c5791STim Harvey 		.rs485en = IMX_GPIO_NR(3, 24),
378e56c5791STim Harvey 		.dioi2c_en = IMX_GPIO_NR(4,  5),
379e56c5791STim Harvey 		.pcie_sson = IMX_GPIO_NR(1, 20),
380e56c5791STim Harvey 	},
381e56c5791STim Harvey 
382e56c5791STim Harvey 	/* GW51xx */
383e56c5791STim Harvey 	{
384e56c5791STim Harvey 		.gpio_pads = gw51xx_gpio_pads,
385e56c5791STim Harvey 		.num_pads = ARRAY_SIZE(gw51xx_gpio_pads)/2,
386e56c5791STim Harvey 		.dio_cfg = {
387e56c5791STim Harvey 			{
388e56c5791STim Harvey 				{ IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) },
389e56c5791STim Harvey 				IMX_GPIO_NR(1, 16),
390e56c5791STim Harvey 				{ 0, 0 },
391e56c5791STim Harvey 				0
392e56c5791STim Harvey 			},
393e56c5791STim Harvey 			{
394e56c5791STim Harvey 				{ IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) },
395e56c5791STim Harvey 				IMX_GPIO_NR(1, 19),
396e56c5791STim Harvey 				{ IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) },
397e56c5791STim Harvey 				2
398e56c5791STim Harvey 			},
399e56c5791STim Harvey 			{
400e56c5791STim Harvey 				{ IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) },
401e56c5791STim Harvey 				IMX_GPIO_NR(1, 17),
402e56c5791STim Harvey 				{ IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) },
403e56c5791STim Harvey 				3
404e56c5791STim Harvey 			},
405e56c5791STim Harvey 			{
406e56c5791STim Harvey 				{ IOMUX_PADS(PAD_SD1_CMD__GPIO1_IO18) },
407e56c5791STim Harvey 				IMX_GPIO_NR(1, 18),
408e56c5791STim Harvey 				{ IOMUX_PADS(PAD_SD1_CMD__PWM4_OUT) },
409e56c5791STim Harvey 				4
410e56c5791STim Harvey 			},
411e56c5791STim Harvey 		},
412e56c5791STim Harvey 		.num_gpios = 4,
413e56c5791STim Harvey 		.leds = {
414e56c5791STim Harvey 			IMX_GPIO_NR(4, 6),
415e56c5791STim Harvey 			IMX_GPIO_NR(4, 10),
416e56c5791STim Harvey 		},
417e56c5791STim Harvey 		.pcie_rst = IMX_GPIO_NR(1, 0),
418e56c5791STim Harvey 		.mezz_pwren = IMX_GPIO_NR(2, 19),
419e56c5791STim Harvey 		.mezz_irq = IMX_GPIO_NR(2, 18),
420e56c5791STim Harvey 		.gps_shdn = IMX_GPIO_NR(1, 2),
421e56c5791STim Harvey 		.vidin_en = IMX_GPIO_NR(5, 20),
422e56c5791STim Harvey 		.wdis = IMX_GPIO_NR(7, 12),
423e56c5791STim Harvey 	},
424e56c5791STim Harvey 
425e56c5791STim Harvey 	/* GW52xx */
426e56c5791STim Harvey 	{
427e56c5791STim Harvey 		.gpio_pads = gw52xx_gpio_pads,
428e56c5791STim Harvey 		.num_pads = ARRAY_SIZE(gw52xx_gpio_pads)/2,
429e56c5791STim Harvey 		.dio_cfg = {
430e56c5791STim Harvey 			{
431e56c5791STim Harvey 				{ IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) },
432e56c5791STim Harvey 				IMX_GPIO_NR(1, 16),
433e56c5791STim Harvey 				{ 0, 0 },
434e56c5791STim Harvey 				0
435e56c5791STim Harvey 			},
436e56c5791STim Harvey 			{
437e56c5791STim Harvey 				{ IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) },
438e56c5791STim Harvey 				IMX_GPIO_NR(1, 19),
439e56c5791STim Harvey 				{ IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) },
440e56c5791STim Harvey 				2
441e56c5791STim Harvey 			},
442e56c5791STim Harvey 			{
443e56c5791STim Harvey 				{ IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) },
444e56c5791STim Harvey 				IMX_GPIO_NR(1, 17),
445e56c5791STim Harvey 				{ IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) },
446e56c5791STim Harvey 				3
447e56c5791STim Harvey 			},
448e56c5791STim Harvey 			{
449e56c5791STim Harvey 				{ IOMUX_PADS(PAD_SD1_CLK__GPIO1_IO20) },
450e56c5791STim Harvey 				IMX_GPIO_NR(1, 20),
451e56c5791STim Harvey 				{ 0, 0 },
452e56c5791STim Harvey 				0
453e56c5791STim Harvey 			},
454e56c5791STim Harvey 		},
455e56c5791STim Harvey 		.num_gpios = 4,
456e56c5791STim Harvey 		.leds = {
457e56c5791STim Harvey 			IMX_GPIO_NR(4, 6),
458e56c5791STim Harvey 			IMX_GPIO_NR(4, 7),
459e56c5791STim Harvey 			IMX_GPIO_NR(4, 15),
460e56c5791STim Harvey 		},
461e56c5791STim Harvey 		.pcie_rst = IMX_GPIO_NR(1, 29),
462e56c5791STim Harvey 		.mezz_pwren = IMX_GPIO_NR(2, 19),
463e56c5791STim Harvey 		.mezz_irq = IMX_GPIO_NR(2, 18),
464e56c5791STim Harvey 		.gps_shdn = IMX_GPIO_NR(1, 27),
465e56c5791STim Harvey 		.vidin_en = IMX_GPIO_NR(3, 31),
466e56c5791STim Harvey 		.usb_sel = IMX_GPIO_NR(1, 2),
467e56c5791STim Harvey 		.wdis = IMX_GPIO_NR(7, 12),
4685c55572fSTim Harvey 		.msata_en = GP_MSATA_SEL,
469e56c5791STim Harvey 	},
470e56c5791STim Harvey 
471e56c5791STim Harvey 	/* GW53xx */
472e56c5791STim Harvey 	{
473e56c5791STim Harvey 		.gpio_pads = gw53xx_gpio_pads,
474e56c5791STim Harvey 		.num_pads = ARRAY_SIZE(gw53xx_gpio_pads)/2,
475e56c5791STim Harvey 		.dio_cfg = {
476e56c5791STim Harvey 			{
477e56c5791STim Harvey 				{ IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) },
478e56c5791STim Harvey 				IMX_GPIO_NR(1, 16),
479e56c5791STim Harvey 				{ 0, 0 },
480e56c5791STim Harvey 				0
481e56c5791STim Harvey 			},
482e56c5791STim Harvey 			{
483e56c5791STim Harvey 				{ IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) },
484e56c5791STim Harvey 				IMX_GPIO_NR(1, 19),
485e56c5791STim Harvey 				{ IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) },
486e56c5791STim Harvey 				2
487e56c5791STim Harvey 			},
488e56c5791STim Harvey 			{
489e56c5791STim Harvey 				{ IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) },
490e56c5791STim Harvey 				IMX_GPIO_NR(1, 17),
491e56c5791STim Harvey 				{ IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) },
492e56c5791STim Harvey 				3
493e56c5791STim Harvey 			},
494e56c5791STim Harvey 			{
495e56c5791STim Harvey 				{IOMUX_PADS(PAD_SD1_CLK__GPIO1_IO20) },
496e56c5791STim Harvey 				IMX_GPIO_NR(1, 20),
497e56c5791STim Harvey 				{ 0, 0 },
498e56c5791STim Harvey 				0
499e56c5791STim Harvey 			},
500e56c5791STim Harvey 		},
501e56c5791STim Harvey 		.num_gpios = 4,
502e56c5791STim Harvey 		.leds = {
503e56c5791STim Harvey 			IMX_GPIO_NR(4, 6),
504e56c5791STim Harvey 			IMX_GPIO_NR(4, 7),
505e56c5791STim Harvey 			IMX_GPIO_NR(4, 15),
506e56c5791STim Harvey 		},
507e56c5791STim Harvey 		.pcie_rst = IMX_GPIO_NR(1, 29),
508e56c5791STim Harvey 		.mezz_pwren = IMX_GPIO_NR(2, 19),
509e56c5791STim Harvey 		.mezz_irq = IMX_GPIO_NR(2, 18),
510e56c5791STim Harvey 		.gps_shdn = IMX_GPIO_NR(1, 27),
511e56c5791STim Harvey 		.vidin_en = IMX_GPIO_NR(3, 31),
512e56c5791STim Harvey 		.wdis = IMX_GPIO_NR(7, 12),
5135c55572fSTim Harvey 		.msata_en = GP_MSATA_SEL,
514e56c5791STim Harvey 	},
515e56c5791STim Harvey 
516e56c5791STim Harvey 	/* GW54xx */
517e56c5791STim Harvey 	{
518e56c5791STim Harvey 		.gpio_pads = gw54xx_gpio_pads,
519e56c5791STim Harvey 		.num_pads = ARRAY_SIZE(gw54xx_gpio_pads)/2,
520e56c5791STim Harvey 		.dio_cfg = {
521e56c5791STim Harvey 			{
522e56c5791STim Harvey 				{ IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09) },
523e56c5791STim Harvey 				IMX_GPIO_NR(1, 9),
524e56c5791STim Harvey 				{ IOMUX_PADS(PAD_GPIO_9__PWM1_OUT) },
525e56c5791STim Harvey 				1
526e56c5791STim Harvey 			},
527e56c5791STim Harvey 			{
528e56c5791STim Harvey 				{ IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) },
529e56c5791STim Harvey 				IMX_GPIO_NR(1, 19),
530e56c5791STim Harvey 				{ IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) },
531e56c5791STim Harvey 				2
532e56c5791STim Harvey 			},
533e56c5791STim Harvey 			{
534e56c5791STim Harvey 				{ IOMUX_PADS(PAD_SD4_DAT1__GPIO2_IO09) },
535e56c5791STim Harvey 				IMX_GPIO_NR(2, 9),
536e56c5791STim Harvey 				{ IOMUX_PADS(PAD_SD4_DAT1__PWM3_OUT) },
537e56c5791STim Harvey 				3
538e56c5791STim Harvey 			},
539e56c5791STim Harvey 			{
540e56c5791STim Harvey 				{ IOMUX_PADS(PAD_SD4_DAT2__GPIO2_IO10) },
541e56c5791STim Harvey 				IMX_GPIO_NR(2, 10),
542e56c5791STim Harvey 				{ IOMUX_PADS(PAD_SD4_DAT2__PWM4_OUT) },
543e56c5791STim Harvey 				4
544e56c5791STim Harvey 			},
545e56c5791STim Harvey 		},
546e56c5791STim Harvey 		.num_gpios = 4,
547e56c5791STim Harvey 		.leds = {
548e56c5791STim Harvey 			IMX_GPIO_NR(4, 6),
549e56c5791STim Harvey 			IMX_GPIO_NR(4, 7),
550e56c5791STim Harvey 			IMX_GPIO_NR(4, 15),
551e56c5791STim Harvey 		},
552e56c5791STim Harvey 		.pcie_rst = IMX_GPIO_NR(1, 29),
553e56c5791STim Harvey 		.mezz_pwren = IMX_GPIO_NR(2, 19),
554e56c5791STim Harvey 		.mezz_irq = IMX_GPIO_NR(2, 18),
555e56c5791STim Harvey 		.rs485en = IMX_GPIO_NR(7, 1),
556e56c5791STim Harvey 		.vidin_en = IMX_GPIO_NR(3, 31),
557e56c5791STim Harvey 		.dioi2c_en = IMX_GPIO_NR(4,  5),
558e56c5791STim Harvey 		.pcie_sson = IMX_GPIO_NR(1, 20),
559e56c5791STim Harvey 		.wdis = IMX_GPIO_NR(5, 17),
5605c55572fSTim Harvey 		.msata_en = GP_MSATA_SEL,
561e56c5791STim Harvey 	},
562e56c5791STim Harvey 
563e56c5791STim Harvey 	/* GW551x */
564e56c5791STim Harvey 	{
565e56c5791STim Harvey 		.gpio_pads = gw551x_gpio_pads,
566e56c5791STim Harvey 		.num_pads = ARRAY_SIZE(gw551x_gpio_pads)/2,
567e56c5791STim Harvey 		.dio_cfg = {
568e56c5791STim Harvey 			{
5699a83a815STim Harvey 				{ IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) },
5709a83a815STim Harvey 				IMX_GPIO_NR(1, 19),
5719a83a815STim Harvey 				{ IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) },
5729a83a815STim Harvey 				2
5739a83a815STim Harvey 			},
5749a83a815STim Harvey 			{
5759a83a815STim Harvey 				{ IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) },
5769a83a815STim Harvey 				IMX_GPIO_NR(1, 17),
5779a83a815STim Harvey 				{ IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) },
5789a83a815STim Harvey 				3
5799a83a815STim Harvey 			},
5809a83a815STim Harvey 		},
5819a83a815STim Harvey 		.num_gpios = 2,
5829a83a815STim Harvey 		.leds = {
5839a83a815STim Harvey 			IMX_GPIO_NR(4, 7),
5849a83a815STim Harvey 		},
5859a83a815STim Harvey 		.pcie_rst = IMX_GPIO_NR(1, 0),
5869a83a815STim Harvey 		.wdis = IMX_GPIO_NR(7, 12),
5879a83a815STim Harvey 	},
5889a83a815STim Harvey 
5899a83a815STim Harvey 	/* GW552x */
5909a83a815STim Harvey 	{
5919a83a815STim Harvey 		.gpio_pads = gw552x_gpio_pads,
5929a83a815STim Harvey 		.num_pads = ARRAY_SIZE(gw552x_gpio_pads)/2,
5939a83a815STim Harvey 		.dio_cfg = {
5949a83a815STim Harvey 			{
595e56c5791STim Harvey 				{ IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) },
596e56c5791STim Harvey 				IMX_GPIO_NR(1, 16),
597e56c5791STim Harvey 				{ 0, 0 },
598e56c5791STim Harvey 				0
599e56c5791STim Harvey 			},
600e56c5791STim Harvey 			{
601e56c5791STim Harvey 				{ IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) },
602e56c5791STim Harvey 				IMX_GPIO_NR(1, 19),
603e56c5791STim Harvey 				{ IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) },
604e56c5791STim Harvey 				2
605e56c5791STim Harvey 			},
606e56c5791STim Harvey 			{
607e56c5791STim Harvey 				{ IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) },
608e56c5791STim Harvey 				IMX_GPIO_NR(1, 17),
609e56c5791STim Harvey 				{ IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) },
610e56c5791STim Harvey 				3
611e56c5791STim Harvey 			},
612e56c5791STim Harvey 			{
6139a83a815STim Harvey 				{IOMUX_PADS(PAD_SD1_CLK__GPIO1_IO20) },
6149a83a815STim Harvey 				IMX_GPIO_NR(1, 20),
6159a83a815STim Harvey 				{ 0, 0 },
6169a83a815STim Harvey 				0
617e56c5791STim Harvey 			},
618e56c5791STim Harvey 		},
619e56c5791STim Harvey 		.num_gpios = 4,
620e56c5791STim Harvey 		.leds = {
621e56c5791STim Harvey 			IMX_GPIO_NR(4, 6),
622e56c5791STim Harvey 			IMX_GPIO_NR(4, 7),
623e56c5791STim Harvey 			IMX_GPIO_NR(4, 15),
624e56c5791STim Harvey 		},
625e56c5791STim Harvey 		.pcie_rst = IMX_GPIO_NR(1, 29),
6269a83a815STim Harvey 		.usb_sel = IMX_GPIO_NR(1, 7),
627e56c5791STim Harvey 		.wdis = IMX_GPIO_NR(7, 12),
6285c55572fSTim Harvey 		.msata_en = GP_MSATA_SEL,
629e56c5791STim Harvey 	},
630*385575bcSTim Harvey 
631*385575bcSTim Harvey 	/* GW553x */
632*385575bcSTim Harvey 	{
633*385575bcSTim Harvey 		.gpio_pads = gw553x_gpio_pads,
634*385575bcSTim Harvey 		.num_pads = ARRAY_SIZE(gw553x_gpio_pads)/2,
635*385575bcSTim Harvey 		.dio_cfg = {
636*385575bcSTim Harvey 			{
637*385575bcSTim Harvey 				{ IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) },
638*385575bcSTim Harvey 				IMX_GPIO_NR(1, 16),
639*385575bcSTim Harvey 				{ 0, 0 },
640*385575bcSTim Harvey 				0
641*385575bcSTim Harvey 			},
642*385575bcSTim Harvey 			{
643*385575bcSTim Harvey 				{ IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) },
644*385575bcSTim Harvey 				IMX_GPIO_NR(1, 19),
645*385575bcSTim Harvey 				{ IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) },
646*385575bcSTim Harvey 				2
647*385575bcSTim Harvey 			},
648*385575bcSTim Harvey 			{
649*385575bcSTim Harvey 				{ IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) },
650*385575bcSTim Harvey 				IMX_GPIO_NR(1, 17),
651*385575bcSTim Harvey 				{ IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) },
652*385575bcSTim Harvey 				3
653*385575bcSTim Harvey 			},
654*385575bcSTim Harvey 			{
655*385575bcSTim Harvey 				{ IOMUX_PADS(PAD_SD1_CMD__GPIO1_IO18) },
656*385575bcSTim Harvey 				IMX_GPIO_NR(1, 18),
657*385575bcSTim Harvey 				{ IOMUX_PADS(PAD_SD1_CMD__PWM4_OUT) },
658*385575bcSTim Harvey 				4
659*385575bcSTim Harvey 			},
660*385575bcSTim Harvey 		},
661*385575bcSTim Harvey 		.num_gpios = 4,
662*385575bcSTim Harvey 		.leds = {
663*385575bcSTim Harvey 			IMX_GPIO_NR(4, 10),
664*385575bcSTim Harvey 			IMX_GPIO_NR(4, 11),
665*385575bcSTim Harvey 		},
666*385575bcSTim Harvey 		.pcie_rst = IMX_GPIO_NR(1, 0),
667*385575bcSTim Harvey 		.vidin_en = IMX_GPIO_NR(5, 20),
668*385575bcSTim Harvey 		.wdis = IMX_GPIO_NR(7, 12),
669*385575bcSTim Harvey 	},
670e56c5791STim Harvey };
671e56c5791STim Harvey 
672e56c5791STim Harvey void setup_iomux_gpio(int board, struct ventana_board_info *info)
673e56c5791STim Harvey {
674e56c5791STim Harvey 	int i;
675e56c5791STim Harvey 
676e56c5791STim Harvey 	/* iomux common to all Ventana boards */
677e56c5791STim Harvey 	SETUP_IOMUX_PADS(gw_gpio_pads);
678e56c5791STim Harvey 
679e56c5791STim Harvey 	/* OTG power off */
680e56c5791STim Harvey 	gpio_request(GP_USB_OTG_PWR, "usbotg_pwr");
681e56c5791STim Harvey 	gpio_direction_output(GP_USB_OTG_PWR, 0);
682e56c5791STim Harvey 
683e56c5791STim Harvey 	/* RS232_EN# */
684e56c5791STim Harvey 	gpio_request(GP_RS232_EN, "rs232_en");
685e56c5791STim Harvey 	gpio_direction_output(GP_RS232_EN, 0);
686e56c5791STim Harvey 
687e56c5791STim Harvey 	if (board >= GW_UNKNOWN)
688e56c5791STim Harvey 		return;
689e56c5791STim Harvey 
690e56c5791STim Harvey 	/* board specific iomux */
691e56c5791STim Harvey 	imx_iomux_v3_setup_multiple_pads(gpio_cfg[board].gpio_pads,
692e56c5791STim Harvey 					 gpio_cfg[board].num_pads);
693e56c5791STim Harvey 
694e56c5791STim Harvey 	/* GW522x Uses GPIO3_IO23 for PCIE_RST# */
695e56c5791STim Harvey 	if (board == GW52xx && info->model[4] == '2')
696e56c5791STim Harvey 		gpio_cfg[board].pcie_rst = IMX_GPIO_NR(3, 23);
697e56c5791STim Harvey 
698e56c5791STim Harvey 	/* assert PCI_RST# */
699e56c5791STim Harvey 	gpio_request(gpio_cfg[board].pcie_rst, "pci_rst#");
700e56c5791STim Harvey 	gpio_direction_output(gpio_cfg[board].pcie_rst, 0);
701e56c5791STim Harvey 
702e56c5791STim Harvey 	/* turn off (active-high) user LED's */
703e56c5791STim Harvey 	for (i = 0; i < ARRAY_SIZE(gpio_cfg[board].leds); i++) {
704e56c5791STim Harvey 		char name[16];
705e56c5791STim Harvey 		if (gpio_cfg[board].leds[i]) {
706e56c5791STim Harvey 			sprintf(name, "led_user%d", i);
707e56c5791STim Harvey 			gpio_request(gpio_cfg[board].leds[i], name);
708e56c5791STim Harvey 			gpio_direction_output(gpio_cfg[board].leds[i], 1);
709e56c5791STim Harvey 		}
710e56c5791STim Harvey 	}
711e56c5791STim Harvey 
7125c55572fSTim Harvey 	/* MSATA Enable - default to PCI */
7135c55572fSTim Harvey 	if (gpio_cfg[board].msata_en) {
7145c55572fSTim Harvey 		gpio_request(gpio_cfg[board].msata_en, "msata_en");
7155c55572fSTim Harvey 		gpio_direction_output(gpio_cfg[board].msata_en, 0);
7165c55572fSTim Harvey 	}
7175c55572fSTim Harvey 
718e56c5791STim Harvey 	/* Expansion Mezzanine IO */
719e56c5791STim Harvey 	if (gpio_cfg[board].mezz_pwren) {
720e56c5791STim Harvey 		gpio_request(gpio_cfg[board].mezz_pwren, "mezz_pwr");
721e56c5791STim Harvey 		gpio_direction_output(gpio_cfg[board].mezz_pwren, 0);
722e56c5791STim Harvey 	}
723e56c5791STim Harvey 	if (gpio_cfg[board].mezz_irq) {
724e56c5791STim Harvey 		gpio_request(gpio_cfg[board].mezz_irq, "mezz_irq#");
725e56c5791STim Harvey 		gpio_direction_input(gpio_cfg[board].mezz_irq);
726e56c5791STim Harvey 	}
727e56c5791STim Harvey 
728e56c5791STim Harvey 	/* RS485 Transmit Enable */
729e56c5791STim Harvey 	if (gpio_cfg[board].rs485en) {
730e56c5791STim Harvey 		gpio_request(gpio_cfg[board].rs485en, "rs485_en");
731e56c5791STim Harvey 		gpio_direction_output(gpio_cfg[board].rs485en, 0);
732e56c5791STim Harvey 	}
733e56c5791STim Harvey 
734e56c5791STim Harvey 	/* GPS_SHDN */
735e56c5791STim Harvey 	if (gpio_cfg[board].gps_shdn) {
736e56c5791STim Harvey 		gpio_request(gpio_cfg[board].gps_shdn, "gps_shdn");
737e56c5791STim Harvey 		gpio_direction_output(gpio_cfg[board].gps_shdn, 1);
738e56c5791STim Harvey 	}
739e56c5791STim Harvey 
740e56c5791STim Harvey 	/* Analog video codec power enable */
741e56c5791STim Harvey 	if (gpio_cfg[board].vidin_en) {
742e56c5791STim Harvey 		gpio_request(gpio_cfg[board].vidin_en, "anavidin_en");
743e56c5791STim Harvey 		gpio_direction_output(gpio_cfg[board].vidin_en, 1);
744e56c5791STim Harvey 	}
745e56c5791STim Harvey 
746e56c5791STim Harvey 	/* DIOI2C_DIS# */
747e56c5791STim Harvey 	if (gpio_cfg[board].dioi2c_en) {
748e56c5791STim Harvey 		gpio_request(gpio_cfg[board].dioi2c_en, "dioi2c_dis#");
749e56c5791STim Harvey 		gpio_direction_output(gpio_cfg[board].dioi2c_en, 0);
750e56c5791STim Harvey 	}
751e56c5791STim Harvey 
752e56c5791STim Harvey 	/* PCICK_SSON: disable spread-spectrum clock */
753e56c5791STim Harvey 	if (gpio_cfg[board].pcie_sson) {
754e56c5791STim Harvey 		gpio_request(gpio_cfg[board].pcie_sson, "pci_sson");
755e56c5791STim Harvey 		gpio_direction_output(gpio_cfg[board].pcie_sson, 0);
756e56c5791STim Harvey 	}
757e56c5791STim Harvey 
758e56c5791STim Harvey 	/* USBOTG mux routing */
759e56c5791STim Harvey 	if (gpio_cfg[board].usb_sel) {
760e56c5791STim Harvey 		gpio_request(gpio_cfg[board].usb_sel, "usb_pcisel");
761e56c5791STim Harvey 		gpio_direction_output(gpio_cfg[board].usb_sel, 0);
762e56c5791STim Harvey 	}
763e56c5791STim Harvey 
764e56c5791STim Harvey 	/* PCISKT_WDIS# (Wireless disable GPIO to miniPCIe sockets) */
765e56c5791STim Harvey 	if (gpio_cfg[board].wdis) {
766e56c5791STim Harvey 		gpio_request(gpio_cfg[board].wdis, "wlan_dis");
767e56c5791STim Harvey 		gpio_direction_output(gpio_cfg[board].wdis, 1);
768e56c5791STim Harvey 	}
769e56c5791STim Harvey }
770e56c5791STim Harvey 
771e56c5791STim Harvey /* setup GPIO pinmux and default configuration per baseboard and env */
772e56c5791STim Harvey void setup_board_gpio(int board, struct ventana_board_info *info)
773e56c5791STim Harvey {
774e56c5791STim Harvey 	const char *s;
775e56c5791STim Harvey 	char arg[10];
776e56c5791STim Harvey 	size_t len;
777e56c5791STim Harvey 	int i;
778e56c5791STim Harvey 	int quiet = simple_strtol(getenv("quiet"), NULL, 10);
779e56c5791STim Harvey 
780e56c5791STim Harvey 	if (board >= GW_UNKNOWN)
781e56c5791STim Harvey 		return;
782e56c5791STim Harvey 
783e56c5791STim Harvey 	/* RS232_EN# */
784e56c5791STim Harvey 	gpio_direction_output(GP_RS232_EN, (hwconfig("rs232")) ? 0 : 1);
785e56c5791STim Harvey 
786e56c5791STim Harvey 	/* MSATA Enable */
7875c55572fSTim Harvey 	if (gpio_cfg[board].msata_en && is_cpu_type(MXC_CPU_MX6Q)) {
788e56c5791STim Harvey 		gpio_direction_output(GP_MSATA_SEL,
789e56c5791STim Harvey 				      (hwconfig("msata")) ? 1 : 0);
790e56c5791STim Harvey 	}
791e56c5791STim Harvey 
792e56c5791STim Harvey 	/* USBOTG Select (PCISKT or FrontPanel) */
793e56c5791STim Harvey 	if (gpio_cfg[board].usb_sel) {
794e56c5791STim Harvey 		gpio_direction_output(gpio_cfg[board].usb_sel,
795e56c5791STim Harvey 				      (hwconfig("usb_pcisel")) ? 1 : 0);
796e56c5791STim Harvey 	}
797e56c5791STim Harvey 
798e56c5791STim Harvey 	/*
799e56c5791STim Harvey 	 * Configure DIO pinmux/padctl registers
800e56c5791STim Harvey 	 * see IMX6DQRM/IMX6SDLRM IOMUXC_SW_PAD_CTL_PAD_* register definitions
801e56c5791STim Harvey 	 */
8029a83a815STim Harvey 	for (i = 0; i < gpio_cfg[board].num_gpios; i++) {
803e56c5791STim Harvey 		struct dio_cfg *cfg = &gpio_cfg[board].dio_cfg[i];
804e56c5791STim Harvey 		iomux_v3_cfg_t ctrl = DIO_PAD_CFG;
805e56c5791STim Harvey 		unsigned cputype = is_cpu_type(MXC_CPU_MX6Q) ? 0 : 1;
806e56c5791STim Harvey 
807e56c5791STim Harvey 		if (!cfg->gpio_padmux[0] && !cfg->gpio_padmux[1])
808e56c5791STim Harvey 			continue;
809e56c5791STim Harvey 		sprintf(arg, "dio%d", i);
810e56c5791STim Harvey 		if (!hwconfig(arg))
811e56c5791STim Harvey 			continue;
812e56c5791STim Harvey 		s = hwconfig_subarg(arg, "padctrl", &len);
813e56c5791STim Harvey 		if (s) {
814e56c5791STim Harvey 			ctrl = MUX_PAD_CTRL(simple_strtoul(s, NULL, 16)
815e56c5791STim Harvey 					    & 0x1ffff) | MUX_MODE_SION;
816e56c5791STim Harvey 		}
817e56c5791STim Harvey 		if (hwconfig_subarg_cmp(arg, "mode", "gpio")) {
818e56c5791STim Harvey 			if (!quiet) {
819e56c5791STim Harvey 				printf("DIO%d:  GPIO%d_IO%02d (gpio-%d)\n", i,
820e56c5791STim Harvey 				       (cfg->gpio_param/32)+1,
821e56c5791STim Harvey 				       cfg->gpio_param%32,
822e56c5791STim Harvey 				       cfg->gpio_param);
823e56c5791STim Harvey 			}
824e56c5791STim Harvey 			imx_iomux_v3_setup_pad(cfg->gpio_padmux[cputype] |
825e56c5791STim Harvey 					       ctrl);
826e56c5791STim Harvey 			gpio_requestf(cfg->gpio_param, "dio%d", i);
827e56c5791STim Harvey 			gpio_direction_input(cfg->gpio_param);
82883e00f19STim Harvey 		} else if (hwconfig_subarg_cmp(arg, "mode", "pwm") &&
829e56c5791STim Harvey 			   cfg->pwm_padmux) {
830f17a9af8STim Harvey 			if (!cfg->pwm_param) {
831f17a9af8STim Harvey 				printf("DIO%d:  Error: pwm config invalid\n",
832f17a9af8STim Harvey 					i);
833f17a9af8STim Harvey 				continue;
834f17a9af8STim Harvey 			}
835e56c5791STim Harvey 			if (!quiet)
836e56c5791STim Harvey 				printf("DIO%d:  pwm%d\n", i, cfg->pwm_param);
837e56c5791STim Harvey 			imx_iomux_v3_setup_pad(cfg->pwm_padmux[cputype] |
838e56c5791STim Harvey 					       MUX_PAD_CTRL(ctrl));
839e56c5791STim Harvey 		}
840e56c5791STim Harvey 	}
841e56c5791STim Harvey 
842e56c5791STim Harvey 	if (!quiet) {
8435c55572fSTim Harvey 		if (gpio_cfg[board].msata_en && is_cpu_type(MXC_CPU_MX6Q)) {
844e56c5791STim Harvey 			printf("MSATA: %s\n", (hwconfig("msata") ?
845e56c5791STim Harvey 			       "enabled" : "disabled"));
846e56c5791STim Harvey 		}
847e56c5791STim Harvey 		printf("RS232: %s\n", (hwconfig("rs232")) ?
848e56c5791STim Harvey 		       "enabled" : "disabled");
849e56c5791STim Harvey 	}
850e56c5791STim Harvey }
851e56c5791STim Harvey 
852e56c5791STim Harvey /* setup board specific PMIC */
8536d38f3a8STim Harvey void setup_pmic(void)
854e56c5791STim Harvey {
855e56c5791STim Harvey 	struct pmic *p;
856e56c5791STim Harvey 	u32 reg;
857e56c5791STim Harvey 
8586d38f3a8STim Harvey 	i2c_set_bus_num(CONFIG_I2C_PMIC);
8596d38f3a8STim Harvey 
860e56c5791STim Harvey 	/* configure PFUZE100 PMIC */
8616d38f3a8STim Harvey 	if (!i2c_probe(CONFIG_POWER_PFUZE100_I2C_ADDR)) {
8626d38f3a8STim Harvey 		debug("probed PFUZE100@0x%x\n", CONFIG_POWER_PFUZE100_I2C_ADDR);
863e56c5791STim Harvey 		power_pfuze100_init(CONFIG_I2C_PMIC);
864e56c5791STim Harvey 		p = pmic_get("PFUZE100");
865e56c5791STim Harvey 		if (p && !pmic_probe(p)) {
866e56c5791STim Harvey 			pmic_reg_read(p, PFUZE100_DEVICEID, &reg);
867e56c5791STim Harvey 			printf("PMIC:  PFUZE100 ID=0x%02x\n", reg);
868e56c5791STim Harvey 
869e56c5791STim Harvey 			/* Set VGEN1 to 1.5V and enable */
870e56c5791STim Harvey 			pmic_reg_read(p, PFUZE100_VGEN1VOL, &reg);
871e56c5791STim Harvey 			reg &= ~(LDO_VOL_MASK);
872e56c5791STim Harvey 			reg |= (LDOA_1_50V | LDO_EN);
873e56c5791STim Harvey 			pmic_reg_write(p, PFUZE100_VGEN1VOL, reg);
874e56c5791STim Harvey 
875e56c5791STim Harvey 			/* Set SWBST to 5.0V and enable */
876e56c5791STim Harvey 			pmic_reg_read(p, PFUZE100_SWBSTCON1, &reg);
877e56c5791STim Harvey 			reg &= ~(SWBST_MODE_MASK | SWBST_VOL_MASK);
87818e02ffeSMarek Vasut 			reg |= (SWBST_5_00V | (SWBST_MODE_AUTO << SWBST_MODE_SHIFT));
879e56c5791STim Harvey 			pmic_reg_write(p, PFUZE100_SWBSTCON1, reg);
880e56c5791STim Harvey 		}
881e56c5791STim Harvey 	}
882e56c5791STim Harvey 
883e56c5791STim Harvey 	/* configure LTC3676 PMIC */
8846d38f3a8STim Harvey 	else if (!i2c_probe(CONFIG_POWER_LTC3676_I2C_ADDR)) {
8856d38f3a8STim Harvey 		debug("probed LTC3676@0x%x\n", CONFIG_POWER_LTC3676_I2C_ADDR);
886e56c5791STim Harvey 		power_ltc3676_init(CONFIG_I2C_PMIC);
887e56c5791STim Harvey 		p = pmic_get("LTC3676_PMIC");
888e56c5791STim Harvey 		if (p && !pmic_probe(p)) {
889e56c5791STim Harvey 			puts("PMIC:  LTC3676\n");
890e56c5791STim Harvey 			/*
891e56c5791STim Harvey 			 * set board-specific scalar for max CPU frequency
892e56c5791STim Harvey 			 * per CPU based on the LDO enabled Operating Ranges
893e56c5791STim Harvey 			 * defined in the respective IMX6DQ and IMX6SDL
894e56c5791STim Harvey 			 * datasheets. The voltage resulting from the R1/R2
895e56c5791STim Harvey 			 * feedback inputs on Ventana is 1308mV. Note that this
896e56c5791STim Harvey 			 * is a bit shy of the Vmin of 1350mV in the datasheet
897e56c5791STim Harvey 			 * for LDO enabled mode but is as high as we can go.
898e56c5791STim Harvey 			 *
899e56c5791STim Harvey 			 * We will rely on an OS kernel driver to properly
900e56c5791STim Harvey 			 * regulate these per CPU operating point and use LDO
901e56c5791STim Harvey 			 * bypass mode when using the higher frequency
902e56c5791STim Harvey 			 * operating points to compensate as LDO bypass mode
903e56c5791STim Harvey 			 * allows the rails be 125mV lower.
904e56c5791STim Harvey 			 */
905e56c5791STim Harvey 			/* mask PGOOD during SW1 transition */
906e56c5791STim Harvey 			pmic_reg_write(p, LTC3676_DVB1B,
907e56c5791STim Harvey 				       0x1f | LTC3676_PGOOD_MASK);
908e56c5791STim Harvey 			/* set SW1 (VDD_SOC) */
909e56c5791STim Harvey 			pmic_reg_write(p, LTC3676_DVB1A, 0x1f);
910e56c5791STim Harvey 
911e56c5791STim Harvey 			/* mask PGOOD during SW3 transition */
912e56c5791STim Harvey 			pmic_reg_write(p, LTC3676_DVB3B,
913e56c5791STim Harvey 				       0x1f | LTC3676_PGOOD_MASK);
914e56c5791STim Harvey 			/* set SW3 (VDD_ARM) */
915e56c5791STim Harvey 			pmic_reg_write(p, LTC3676_DVB3A, 0x1f);
916e56c5791STim Harvey 		}
917e56c5791STim Harvey 	}
918e56c5791STim Harvey }
919