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