]> git.sur5r.net Git - u-boot/blob - board/gateworks/gw_ventana/common.c
imx: ventana: make OTG VBUS power enable board specific
[u-boot] / board / gateworks / gw_ventana / common.c
1 /*
2  * Copyright (C) 2013 Gateworks Corporation
3  *
4  * Author: Tim Harvey <tharvey@gateworks.com>
5  *
6  * SPDX-License-Identifier: GPL-2.0+
7  */
8
9 #include <asm/arch/clock.h>
10 #include <asm/arch/mx6-pins.h>
11 #include <asm/arch/sys_proto.h>
12 #include <asm/gpio.h>
13 #include <asm/imx-common/mxc_i2c.h>
14 #include <fsl_esdhc.h>
15 #include <hwconfig.h>
16 #include <power/pmic.h>
17 #include <power/ltc3676_pmic.h>
18 #include <power/pfuze100_pmic.h>
19
20 #include "common.h"
21
22 /* UART1: Function varies per baseboard */
23 static iomux_v3_cfg_t const uart1_pads[] = {
24         IOMUX_PADS(PAD_SD3_DAT6__UART1_RX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL)),
25         IOMUX_PADS(PAD_SD3_DAT7__UART1_TX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL)),
26 };
27
28 /* UART2: Serial Console */
29 static iomux_v3_cfg_t const uart2_pads[] = {
30         IOMUX_PADS(PAD_SD4_DAT7__UART2_TX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL)),
31         IOMUX_PADS(PAD_SD4_DAT4__UART2_RX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL)),
32 };
33
34 void setup_iomux_uart(void)
35 {
36         SETUP_IOMUX_PADS(uart1_pads);
37         SETUP_IOMUX_PADS(uart2_pads);
38 }
39
40 /* MMC */
41 static iomux_v3_cfg_t const usdhc3_pads[] = {
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_DAT0__SD3_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
45         IOMUX_PADS(PAD_SD3_DAT1__SD3_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
46         IOMUX_PADS(PAD_SD3_DAT2__SD3_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
47         IOMUX_PADS(PAD_SD3_DAT3__SD3_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
48         IOMUX_PADS(PAD_SD3_DAT5__GPIO7_IO00  | MUX_PAD_CTRL(USDHC_PAD_CTRL)),
49 };
50
51 /* I2C1: GSC */
52 static struct i2c_pads_info mx6q_i2c_pad_info0 = {
53         .scl = {
54                 .i2c_mode = MX6Q_PAD_EIM_D21__I2C1_SCL | PC,
55                 .gpio_mode = MX6Q_PAD_EIM_D21__GPIO3_IO21 | PC,
56                 .gp = IMX_GPIO_NR(3, 21)
57         },
58         .sda = {
59                 .i2c_mode = MX6Q_PAD_EIM_D28__I2C1_SDA | PC,
60                 .gpio_mode = MX6Q_PAD_EIM_D28__GPIO3_IO28 | PC,
61                 .gp = IMX_GPIO_NR(3, 28)
62         }
63 };
64 static struct i2c_pads_info mx6dl_i2c_pad_info0 = {
65         .scl = {
66                 .i2c_mode = MX6DL_PAD_EIM_D21__I2C1_SCL | PC,
67                 .gpio_mode = MX6DL_PAD_EIM_D21__GPIO3_IO21 | PC,
68                 .gp = IMX_GPIO_NR(3, 21)
69         },
70         .sda = {
71                 .i2c_mode = MX6DL_PAD_EIM_D28__I2C1_SDA | PC,
72                 .gpio_mode = MX6DL_PAD_EIM_D28__GPIO3_IO28 | PC,
73                 .gp = IMX_GPIO_NR(3, 28)
74         }
75 };
76
77 /* I2C2: PMIC/PCIe Switch/PCIe Clock/Mezz */
78 static struct i2c_pads_info mx6q_i2c_pad_info1 = {
79         .scl = {
80                 .i2c_mode = MX6Q_PAD_KEY_COL3__I2C2_SCL | PC,
81                 .gpio_mode = MX6Q_PAD_KEY_COL3__GPIO4_IO12 | PC,
82                 .gp = IMX_GPIO_NR(4, 12)
83         },
84         .sda = {
85                 .i2c_mode = MX6Q_PAD_KEY_ROW3__I2C2_SDA | PC,
86                 .gpio_mode = MX6Q_PAD_KEY_ROW3__GPIO4_IO13 | PC,
87                 .gp = IMX_GPIO_NR(4, 13)
88         }
89 };
90 static struct i2c_pads_info mx6dl_i2c_pad_info1 = {
91         .scl = {
92                 .i2c_mode = MX6DL_PAD_KEY_COL3__I2C2_SCL | PC,
93                 .gpio_mode = MX6DL_PAD_KEY_COL3__GPIO4_IO12 | PC,
94                 .gp = IMX_GPIO_NR(4, 12)
95         },
96         .sda = {
97                 .i2c_mode = MX6DL_PAD_KEY_ROW3__I2C2_SDA | PC,
98                 .gpio_mode = MX6DL_PAD_KEY_ROW3__GPIO4_IO13 | PC,
99                 .gp = IMX_GPIO_NR(4, 13)
100         }
101 };
102
103 /* I2C3: Misc/Expansion */
104 static struct i2c_pads_info mx6q_i2c_pad_info2 = {
105         .scl = {
106                 .i2c_mode = MX6Q_PAD_GPIO_3__I2C3_SCL | PC,
107                 .gpio_mode = MX6Q_PAD_GPIO_3__GPIO1_IO03 | PC,
108                 .gp = IMX_GPIO_NR(1, 3)
109         },
110         .sda = {
111                 .i2c_mode = MX6Q_PAD_GPIO_6__I2C3_SDA | PC,
112                 .gpio_mode = MX6Q_PAD_GPIO_6__GPIO1_IO06 | PC,
113                 .gp = IMX_GPIO_NR(1, 6)
114         }
115 };
116 static struct i2c_pads_info mx6dl_i2c_pad_info2 = {
117         .scl = {
118                 .i2c_mode = MX6DL_PAD_GPIO_3__I2C3_SCL | PC,
119                 .gpio_mode = MX6DL_PAD_GPIO_3__GPIO1_IO03 | PC,
120                 .gp = IMX_GPIO_NR(1, 3)
121         },
122         .sda = {
123                 .i2c_mode = MX6DL_PAD_GPIO_6__I2C3_SDA | PC,
124                 .gpio_mode = MX6DL_PAD_GPIO_6__GPIO1_IO06 | PC,
125                 .gp = IMX_GPIO_NR(1, 6)
126         }
127 };
128
129 void setup_ventana_i2c(void)
130 {
131         if (is_cpu_type(MXC_CPU_MX6Q)) {
132                 setup_i2c(0, CONFIG_SYS_I2C_SPEED, 0x7f, &mx6q_i2c_pad_info0);
133                 setup_i2c(1, CONFIG_SYS_I2C_SPEED, 0x7f, &mx6q_i2c_pad_info1);
134                 setup_i2c(2, CONFIG_SYS_I2C_SPEED, 0x7f, &mx6q_i2c_pad_info2);
135         } else {
136                 setup_i2c(0, CONFIG_SYS_I2C_SPEED, 0x7f, &mx6dl_i2c_pad_info0);
137                 setup_i2c(1, CONFIG_SYS_I2C_SPEED, 0x7f, &mx6dl_i2c_pad_info1);
138                 setup_i2c(2, CONFIG_SYS_I2C_SPEED, 0x7f, &mx6dl_i2c_pad_info2);
139         }
140 }
141
142 /*
143  * Baseboard specific GPIO
144  */
145
146 /* common to add baseboards */
147 static iomux_v3_cfg_t const gw_gpio_pads[] = {
148         /* SD3_VSELECT */
149         IOMUX_PADS(PAD_NANDF_CS1__GPIO6_IO14 | DIO_PAD_CFG),
150 };
151
152 /* prototype */
153 static iomux_v3_cfg_t const gwproto_gpio_pads[] = {
154         /* RS232_EN# */
155         IOMUX_PADS(PAD_SD4_DAT3__GPIO2_IO11 | DIO_PAD_CFG),
156         /* PANLEDG# */
157         IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG),
158         /* PANLEDR# */
159         IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG),
160         /* LOCLED# */
161         IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG),
162         /* RS485_EN */
163         IOMUX_PADS(PAD_SD3_DAT4__GPIO7_IO01 | DIO_PAD_CFG),
164         /* IOEXP_PWREN# */
165         IOMUX_PADS(PAD_EIM_A19__GPIO2_IO19 | DIO_PAD_CFG),
166         /* IOEXP_IRQ# */
167         IOMUX_PADS(PAD_EIM_A20__GPIO2_IO18 | MUX_PAD_CTRL(IRQ_PAD_CTRL)),
168         /* VID_EN */
169         IOMUX_PADS(PAD_EIM_D31__GPIO3_IO31 | DIO_PAD_CFG),
170         /* DIOI2C_DIS# */
171         IOMUX_PADS(PAD_GPIO_19__GPIO4_IO05 | DIO_PAD_CFG),
172         /* PCICK_SSON */
173         IOMUX_PADS(PAD_SD1_CLK__GPIO1_IO20 | DIO_PAD_CFG),
174         /* PCI_RST# */
175         IOMUX_PADS(PAD_ENET_TXD1__GPIO1_IO29 | DIO_PAD_CFG),
176 };
177
178 static iomux_v3_cfg_t const gw51xx_gpio_pads[] = {
179         /* PANLEDG# */
180         IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG),
181         /* PANLEDR# */
182         IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG),
183         /* IOEXP_PWREN# */
184         IOMUX_PADS(PAD_EIM_A19__GPIO2_IO19 | DIO_PAD_CFG),
185         /* IOEXP_IRQ# */
186         IOMUX_PADS(PAD_EIM_A20__GPIO2_IO18 | MUX_PAD_CTRL(IRQ_PAD_CTRL)),
187
188         /* GPS_SHDN */
189         IOMUX_PADS(PAD_GPIO_2__GPIO1_IO02 | DIO_PAD_CFG),
190         /* VID_PWR */
191         IOMUX_PADS(PAD_CSI0_DATA_EN__GPIO5_IO20 | DIO_PAD_CFG),
192         /* PCI_RST# */
193         IOMUX_PADS(PAD_GPIO_0__GPIO1_IO00 | DIO_PAD_CFG),
194         /* PCIESKT_WDIS# */
195         IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG),
196 };
197
198 static iomux_v3_cfg_t const gw52xx_gpio_pads[] = {
199         /* RS232_EN# */
200         IOMUX_PADS(PAD_SD4_DAT3__GPIO2_IO11 | DIO_PAD_CFG),
201         /* MSATA_EN */
202         IOMUX_PADS(PAD_SD4_DAT0__GPIO2_IO08 | DIO_PAD_CFG),
203         /* 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)),
211         /* CAN_STBY */
212         IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09 | DIO_PAD_CFG),
213         /* 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),
225         /* RS485_EN */
226         IOMUX_PADS(PAD_SD3_DAT4__GPIO7_IO01 | DIO_PAD_CFG),
227         /* PCIESKT_WDIS# */
228         IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG),
229 };
230
231 static iomux_v3_cfg_t const gw53xx_gpio_pads[] = {
232         /* RS232_EN# */
233         IOMUX_PADS(PAD_SD4_DAT3__GPIO2_IO11 | DIO_PAD_CFG),
234         /* MSATA_EN */
235         IOMUX_PADS(PAD_SD4_DAT0__GPIO2_IO08 | DIO_PAD_CFG),
236         /* CAN_STBY */
237         IOMUX_PADS(PAD_GPIO_2__GPIO1_IO02 | DIO_PAD_CFG),
238         /* USB_HUBRST# */
239         IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09 | DIO_PAD_CFG),
240         /* PANLEDG# */
241         IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG),
242         /* PANLEDR# */
243         IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG),
244         /* MX6_LOCLED# */
245         IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG),
246         /* IOEXP_PWREN# */
247         IOMUX_PADS(PAD_EIM_A19__GPIO2_IO19 | DIO_PAD_CFG),
248         /* IOEXP_IRQ# */
249         IOMUX_PADS(PAD_EIM_A20__GPIO2_IO18 | MUX_PAD_CTRL(IRQ_PAD_CTRL)),
250         /* DIOI2C_DIS# */
251         IOMUX_PADS(PAD_GPIO_19__GPIO4_IO05 | DIO_PAD_CFG),
252         /* GPS_SHDN */
253         IOMUX_PADS(PAD_ENET_RXD0__GPIO1_IO27 | DIO_PAD_CFG),
254         /* VID_EN */
255         IOMUX_PADS(PAD_EIM_D31__GPIO3_IO31 | DIO_PAD_CFG),
256         /* PCI_RST# */
257         IOMUX_PADS(PAD_ENET_TXD1__GPIO1_IO29 | DIO_PAD_CFG),
258         /* RS485_EN */
259         IOMUX_PADS(PAD_SD3_DAT4__GPIO7_IO01 | DIO_PAD_CFG),
260         /* PCIESKT_WDIS# */
261         IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG),
262 };
263
264 static iomux_v3_cfg_t const gw54xx_gpio_pads[] = {
265         /* RS232_EN# */
266         IOMUX_PADS(PAD_SD4_DAT3__GPIO2_IO11 | DIO_PAD_CFG),
267         /* MSATA_EN */
268         IOMUX_PADS(PAD_SD4_DAT0__GPIO2_IO08 | DIO_PAD_CFG),
269         /* CAN_STBY */
270         IOMUX_PADS(PAD_GPIO_2__GPIO1_IO02 | DIO_PAD_CFG),
271         /* PANLEDG# */
272         IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG),
273         /* PANLEDR# */
274         IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG),
275         /* MX6_LOCLED# */
276         IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG),
277         /* USB_HUBRST# */
278         IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16 | DIO_PAD_CFG),
279         /* MIPI_DIO */
280         IOMUX_PADS(PAD_SD1_DAT3__GPIO1_IO21 | DIO_PAD_CFG),
281         /* RS485_EN */
282         IOMUX_PADS(PAD_EIM_D24__GPIO3_IO24 | DIO_PAD_CFG),
283         /* IOEXP_PWREN# */
284         IOMUX_PADS(PAD_EIM_A19__GPIO2_IO19 | DIO_PAD_CFG),
285         /* IOEXP_IRQ# */
286         IOMUX_PADS(PAD_EIM_A20__GPIO2_IO18 | MUX_PAD_CTRL(IRQ_PAD_CTRL)),
287         /* DIOI2C_DIS# */
288         IOMUX_PADS(PAD_GPIO_19__GPIO4_IO05 | DIO_PAD_CFG),
289         /* PCI_RST# */
290         IOMUX_PADS(PAD_ENET_TXD1__GPIO1_IO29 | DIO_PAD_CFG),
291         /* VID_EN */
292         IOMUX_PADS(PAD_EIM_D31__GPIO3_IO31 | DIO_PAD_CFG),
293         /* RS485_EN */
294         IOMUX_PADS(PAD_SD3_DAT4__GPIO7_IO01 | DIO_PAD_CFG),
295         /* PCIESKT_WDIS# */
296         IOMUX_PADS(PAD_DISP0_DAT23__GPIO5_IO17 | DIO_PAD_CFG),
297 };
298
299 static iomux_v3_cfg_t const gw551x_gpio_pads[] = {
300         /* CAN_STBY */
301         IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09 | DIO_PAD_CFG),
302         /* PANLED# */
303         IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG),
304         /* PCI_RST# */
305         IOMUX_PADS(PAD_GPIO_0__GPIO1_IO00 | DIO_PAD_CFG),
306         /* PCIESKT_WDIS# */
307         IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG),
308 };
309
310 static iomux_v3_cfg_t const gw552x_gpio_pads[] = {
311         /* MSATA_EN */
312         IOMUX_PADS(PAD_SD4_DAT0__GPIO2_IO08 | DIO_PAD_CFG),
313         /* USBOTG_SEL */
314         IOMUX_PADS(PAD_GPIO_7__GPIO1_IO07 | DIO_PAD_CFG),
315         /* USB_HUBRST# */
316         IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09 | DIO_PAD_CFG),
317         /* PANLEDG# */
318         IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG),
319         /* PANLEDR# */
320         IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG),
321         /* MX6_LOCLED# */
322         IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG),
323         /* PCI_RST# */
324         IOMUX_PADS(PAD_ENET_TXD1__GPIO1_IO29 | DIO_PAD_CFG),
325         /* MX6_DIO[4:9] */
326         IOMUX_PADS(PAD_CSI0_PIXCLK__GPIO5_IO18 | DIO_PAD_CFG),
327         IOMUX_PADS(PAD_CSI0_DATA_EN__GPIO5_IO20 | DIO_PAD_CFG),
328         IOMUX_PADS(PAD_CSI0_VSYNC__GPIO5_IO21 | DIO_PAD_CFG),
329         IOMUX_PADS(PAD_CSI0_DAT4__GPIO5_IO22 | DIO_PAD_CFG),
330         IOMUX_PADS(PAD_CSI0_DAT5__GPIO5_IO23 | DIO_PAD_CFG),
331         IOMUX_PADS(PAD_CSI0_DAT7__GPIO5_IO25 | DIO_PAD_CFG),
332         /* PCIEGBE1_OFF# */
333         IOMUX_PADS(PAD_GPIO_1__GPIO1_IO01 | DIO_PAD_CFG),
334         /* PCIEGBE2_OFF# */
335         IOMUX_PADS(PAD_GPIO_2__GPIO1_IO02 | DIO_PAD_CFG),
336         /* PCIESKT_WDIS# */
337         IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG),
338 };
339
340 static iomux_v3_cfg_t const gw553x_gpio_pads[] = {
341         /* PANLEDG# */
342         IOMUX_PADS(PAD_KEY_COL2__GPIO4_IO10 | DIO_PAD_CFG),
343         /* PANLEDR# */
344         IOMUX_PADS(PAD_KEY_ROW2__GPIO4_IO11 | DIO_PAD_CFG),
345
346         /* VID_PWR */
347         IOMUX_PADS(PAD_CSI0_DATA_EN__GPIO5_IO20 | DIO_PAD_CFG),
348         /* PCI_RST# */
349         IOMUX_PADS(PAD_GPIO_0__GPIO1_IO00 | DIO_PAD_CFG),
350         /* PCIESKT_WDIS# */
351         IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG),
352 };
353
354 /* Digital I/O */
355 struct dio_cfg gw51xx_dio[] = {
356         {
357                 { IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) },
358                 IMX_GPIO_NR(1, 16),
359                 { 0, 0 },
360                 0
361         },
362         {
363                 { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) },
364                 IMX_GPIO_NR(1, 19),
365                 { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) },
366                 2
367         },
368         {
369                 { IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) },
370                 IMX_GPIO_NR(1, 17),
371                 { IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) },
372                 3
373         },
374         {
375                 { IOMUX_PADS(PAD_SD1_CMD__GPIO1_IO18) },
376                 IMX_GPIO_NR(1, 18),
377                 { IOMUX_PADS(PAD_SD1_CMD__PWM4_OUT) },
378                 4
379         },
380 };
381
382 struct dio_cfg gw52xx_dio[] = {
383         {
384                 { IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) },
385                 IMX_GPIO_NR(1, 16),
386                 { 0, 0 },
387                 0
388         },
389         {
390                 { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) },
391                 IMX_GPIO_NR(1, 19),
392                 { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) },
393                 2
394         },
395         {
396                 { IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) },
397                 IMX_GPIO_NR(1, 17),
398                 { IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) },
399                 3
400         },
401         {
402                 { IOMUX_PADS(PAD_SD1_CLK__GPIO1_IO20) },
403                 IMX_GPIO_NR(1, 20),
404                 { 0, 0 },
405                 0
406         },
407 };
408
409 struct dio_cfg gw53xx_dio[] = {
410         {
411                 { IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) },
412                 IMX_GPIO_NR(1, 16),
413                 { 0, 0 },
414                 0
415         },
416         {
417                 { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) },
418                 IMX_GPIO_NR(1, 19),
419                 { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) },
420                 2
421         },
422         {
423                 { IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) },
424                 IMX_GPIO_NR(1, 17),
425                 { IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) },
426                 3
427         },
428         {
429                 {IOMUX_PADS(PAD_SD1_CLK__GPIO1_IO20) },
430                 IMX_GPIO_NR(1, 20),
431                 { 0, 0 },
432                 0
433         },
434 };
435
436 struct dio_cfg gw54xx_dio[] = {
437         {
438                 { IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09) },
439                 IMX_GPIO_NR(1, 9),
440                 { IOMUX_PADS(PAD_GPIO_9__PWM1_OUT) },
441                 1
442         },
443         {
444                 { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) },
445                 IMX_GPIO_NR(1, 19),
446                 { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) },
447                 2
448         },
449         {
450                 { IOMUX_PADS(PAD_SD4_DAT1__GPIO2_IO09) },
451                 IMX_GPIO_NR(2, 9),
452                 { IOMUX_PADS(PAD_SD4_DAT1__PWM3_OUT) },
453                 3
454         },
455         {
456                 { IOMUX_PADS(PAD_SD4_DAT2__GPIO2_IO10) },
457                 IMX_GPIO_NR(2, 10),
458                 { IOMUX_PADS(PAD_SD4_DAT2__PWM4_OUT) },
459                 4
460         },
461 };
462
463 struct dio_cfg gw551x_dio[] = {
464         {
465                 { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) },
466                 IMX_GPIO_NR(1, 19),
467                 { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) },
468                 2
469         },
470         {
471                 { IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) },
472                 IMX_GPIO_NR(1, 17),
473                 { IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) },
474                 3
475         },
476 };
477
478 struct dio_cfg gw552x_dio[] = {
479         {
480                 { IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) },
481                 IMX_GPIO_NR(1, 16),
482                 { 0, 0 },
483                 0
484         },
485         {
486                 { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) },
487                 IMX_GPIO_NR(1, 19),
488                 { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) },
489                 2
490         },
491         {
492                 { IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) },
493                 IMX_GPIO_NR(1, 17),
494                 { IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) },
495                 3
496         },
497         {
498                 {IOMUX_PADS(PAD_SD1_CLK__GPIO1_IO20) },
499                 IMX_GPIO_NR(1, 20),
500                 { 0, 0 },
501                 0
502         },
503         {
504                 {IOMUX_PADS(PAD_CSI0_PIXCLK__GPIO5_IO18) },
505                 IMX_GPIO_NR(5, 18),
506                 { 0, 0 },
507                 0
508         },
509         {
510                 {IOMUX_PADS(PAD_CSI0_DATA_EN__GPIO5_IO20) },
511                 IMX_GPIO_NR(5, 20),
512                 { 0, 0 },
513                 0
514         },
515         {
516                 {IOMUX_PADS(PAD_CSI0_VSYNC__GPIO5_IO21) },
517                 IMX_GPIO_NR(5, 21),
518                 { 0, 0 },
519                 0
520         },
521         {
522                 {IOMUX_PADS(PAD_CSI0_DAT4__GPIO5_IO22) },
523                 IMX_GPIO_NR(5, 22),
524                 { 0, 0 },
525                 0
526         },
527         {
528                 {IOMUX_PADS(PAD_CSI0_DAT5__GPIO5_IO23) },
529                 IMX_GPIO_NR(5, 23),
530                 { 0, 0 },
531                 0
532         },
533         {
534                 {IOMUX_PADS(PAD_CSI0_DAT7__GPIO5_IO25) },
535                 IMX_GPIO_NR(5, 25),
536                 { 0, 0 },
537                 0
538         },
539 };
540
541 struct dio_cfg gw553x_dio[] = {
542         {
543                 { IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) },
544                 IMX_GPIO_NR(1, 16),
545                 { 0, 0 },
546                 0
547         },
548         {
549                 { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) },
550                 IMX_GPIO_NR(1, 19),
551                 { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) },
552                 2
553         },
554         {
555                 { IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) },
556                 IMX_GPIO_NR(1, 17),
557                 { IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) },
558                 3
559         },
560         {
561                 { IOMUX_PADS(PAD_SD1_CMD__GPIO1_IO18) },
562                 IMX_GPIO_NR(1, 18),
563                 { IOMUX_PADS(PAD_SD1_CMD__PWM4_OUT) },
564                 4
565         },
566 };
567
568 /*
569  * Board Specific GPIO
570  */
571 struct ventana gpio_cfg[GW_UNKNOWN] = {
572         /* GW5400proto */
573         {
574                 .gpio_pads = gw54xx_gpio_pads,
575                 .num_pads = ARRAY_SIZE(gw54xx_gpio_pads)/2,
576                 .dio_cfg = gw54xx_dio,
577                 .dio_num = ARRAY_SIZE(gw54xx_dio),
578                 .leds = {
579                         IMX_GPIO_NR(4, 6),
580                         IMX_GPIO_NR(4, 10),
581                         IMX_GPIO_NR(4, 15),
582                 },
583                 .pcie_rst = IMX_GPIO_NR(1, 29),
584                 .mezz_pwren = IMX_GPIO_NR(4, 7),
585                 .mezz_irq = IMX_GPIO_NR(4, 9),
586                 .rs485en = IMX_GPIO_NR(3, 24),
587                 .dioi2c_en = IMX_GPIO_NR(4,  5),
588                 .pcie_sson = IMX_GPIO_NR(1, 20),
589                 .otgpwr_en = IMX_GPIO_NR(3, 22),
590         },
591
592         /* GW51xx */
593         {
594                 .gpio_pads = gw51xx_gpio_pads,
595                 .num_pads = ARRAY_SIZE(gw51xx_gpio_pads)/2,
596                 .dio_cfg = gw51xx_dio,
597                 .dio_num = ARRAY_SIZE(gw51xx_dio),
598                 .leds = {
599                         IMX_GPIO_NR(4, 6),
600                         IMX_GPIO_NR(4, 10),
601                 },
602                 .pcie_rst = IMX_GPIO_NR(1, 0),
603                 .mezz_pwren = IMX_GPIO_NR(2, 19),
604                 .mezz_irq = IMX_GPIO_NR(2, 18),
605                 .gps_shdn = IMX_GPIO_NR(1, 2),
606                 .vidin_en = IMX_GPIO_NR(5, 20),
607                 .wdis = IMX_GPIO_NR(7, 12),
608                 .otgpwr_en = IMX_GPIO_NR(3, 22),
609         },
610
611         /* GW52xx */
612         {
613                 .gpio_pads = gw52xx_gpio_pads,
614                 .num_pads = ARRAY_SIZE(gw52xx_gpio_pads)/2,
615                 .dio_cfg = gw52xx_dio,
616                 .dio_num = ARRAY_SIZE(gw52xx_dio),
617                 .leds = {
618                         IMX_GPIO_NR(4, 6),
619                         IMX_GPIO_NR(4, 7),
620                         IMX_GPIO_NR(4, 15),
621                 },
622                 .pcie_rst = IMX_GPIO_NR(1, 29),
623                 .mezz_pwren = IMX_GPIO_NR(2, 19),
624                 .mezz_irq = IMX_GPIO_NR(2, 18),
625                 .gps_shdn = IMX_GPIO_NR(1, 27),
626                 .vidin_en = IMX_GPIO_NR(3, 31),
627                 .usb_sel = IMX_GPIO_NR(1, 2),
628                 .wdis = IMX_GPIO_NR(7, 12),
629                 .msata_en = GP_MSATA_SEL,
630                 .rs232_en = GP_RS232_EN,
631                 .otgpwr_en = IMX_GPIO_NR(3, 22),
632         },
633
634         /* GW53xx */
635         {
636                 .gpio_pads = gw53xx_gpio_pads,
637                 .num_pads = ARRAY_SIZE(gw53xx_gpio_pads)/2,
638                 .dio_cfg = gw53xx_dio,
639                 .dio_num = ARRAY_SIZE(gw53xx_dio),
640                 .leds = {
641                         IMX_GPIO_NR(4, 6),
642                         IMX_GPIO_NR(4, 7),
643                         IMX_GPIO_NR(4, 15),
644                 },
645                 .pcie_rst = IMX_GPIO_NR(1, 29),
646                 .mezz_pwren = IMX_GPIO_NR(2, 19),
647                 .mezz_irq = IMX_GPIO_NR(2, 18),
648                 .gps_shdn = IMX_GPIO_NR(1, 27),
649                 .vidin_en = IMX_GPIO_NR(3, 31),
650                 .wdis = IMX_GPIO_NR(7, 12),
651                 .msata_en = GP_MSATA_SEL,
652                 .rs232_en = GP_RS232_EN,
653                 .otgpwr_en = IMX_GPIO_NR(3, 22),
654         },
655
656         /* GW54xx */
657         {
658                 .gpio_pads = gw54xx_gpio_pads,
659                 .num_pads = ARRAY_SIZE(gw54xx_gpio_pads)/2,
660                 .dio_cfg = gw54xx_dio,
661                 .dio_num = ARRAY_SIZE(gw54xx_dio),
662                 .leds = {
663                         IMX_GPIO_NR(4, 6),
664                         IMX_GPIO_NR(4, 7),
665                         IMX_GPIO_NR(4, 15),
666                 },
667                 .pcie_rst = IMX_GPIO_NR(1, 29),
668                 .mezz_pwren = IMX_GPIO_NR(2, 19),
669                 .mezz_irq = IMX_GPIO_NR(2, 18),
670                 .rs485en = IMX_GPIO_NR(7, 1),
671                 .vidin_en = IMX_GPIO_NR(3, 31),
672                 .dioi2c_en = IMX_GPIO_NR(4,  5),
673                 .pcie_sson = IMX_GPIO_NR(1, 20),
674                 .wdis = IMX_GPIO_NR(5, 17),
675                 .msata_en = GP_MSATA_SEL,
676                 .rs232_en = GP_RS232_EN,
677                 .otgpwr_en = IMX_GPIO_NR(3, 22),
678         },
679
680         /* GW551x */
681         {
682                 .gpio_pads = gw551x_gpio_pads,
683                 .num_pads = ARRAY_SIZE(gw551x_gpio_pads)/2,
684                 .dio_cfg = gw551x_dio,
685                 .dio_num = ARRAY_SIZE(gw551x_dio),
686                 .leds = {
687                         IMX_GPIO_NR(4, 7),
688                 },
689                 .pcie_rst = IMX_GPIO_NR(1, 0),
690                 .wdis = IMX_GPIO_NR(7, 12),
691         },
692
693         /* GW552x */
694         {
695                 .gpio_pads = gw552x_gpio_pads,
696                 .num_pads = ARRAY_SIZE(gw552x_gpio_pads)/2,
697                 .dio_cfg = gw552x_dio,
698                 .dio_num = ARRAY_SIZE(gw552x_dio),
699                 .leds = {
700                         IMX_GPIO_NR(4, 6),
701                         IMX_GPIO_NR(4, 7),
702                         IMX_GPIO_NR(4, 15),
703                 },
704                 .pcie_rst = IMX_GPIO_NR(1, 29),
705                 .usb_sel = IMX_GPIO_NR(1, 7),
706                 .wdis = IMX_GPIO_NR(7, 12),
707                 .msata_en = GP_MSATA_SEL,
708         },
709
710         /* GW553x */
711         {
712                 .gpio_pads = gw553x_gpio_pads,
713                 .num_pads = ARRAY_SIZE(gw553x_gpio_pads)/2,
714                 .dio_cfg = gw553x_dio,
715                 .dio_num = ARRAY_SIZE(gw553x_dio),
716                 .leds = {
717                         IMX_GPIO_NR(4, 10),
718                         IMX_GPIO_NR(4, 11),
719                 },
720                 .pcie_rst = IMX_GPIO_NR(1, 0),
721                 .vidin_en = IMX_GPIO_NR(5, 20),
722                 .wdis = IMX_GPIO_NR(7, 12),
723                 .otgpwr_en = IMX_GPIO_NR(3, 22),
724         },
725 };
726
727 void setup_iomux_gpio(int board, struct ventana_board_info *info)
728 {
729         int i;
730
731         /* iomux common to all Ventana boards */
732         SETUP_IOMUX_PADS(gw_gpio_pads);
733
734         if (board >= GW_UNKNOWN)
735                 return;
736
737         /* board specific iomux */
738         imx_iomux_v3_setup_multiple_pads(gpio_cfg[board].gpio_pads,
739                                          gpio_cfg[board].num_pads);
740
741         /* RS232_EN# */
742         if (gpio_cfg[board].rs232_en) {
743                 gpio_request(gpio_cfg[board].rs232_en, "rs232_en#");
744                 gpio_direction_output(gpio_cfg[board].rs232_en, 0);
745         }
746
747         /* GW522x Uses GPIO3_IO23 for PCIE_RST# */
748         if (board == GW52xx && info->model[4] == '2')
749                 gpio_cfg[board].pcie_rst = IMX_GPIO_NR(3, 23);
750
751         /* assert PCI_RST# */
752         gpio_request(gpio_cfg[board].pcie_rst, "pci_rst#");
753         gpio_direction_output(gpio_cfg[board].pcie_rst, 0);
754
755         /* turn off (active-high) user LED's */
756         for (i = 0; i < ARRAY_SIZE(gpio_cfg[board].leds); i++) {
757                 char name[16];
758                 if (gpio_cfg[board].leds[i]) {
759                         sprintf(name, "led_user%d", i);
760                         gpio_request(gpio_cfg[board].leds[i], name);
761                         gpio_direction_output(gpio_cfg[board].leds[i], 1);
762                 }
763         }
764
765         /* MSATA Enable - default to PCI */
766         if (gpio_cfg[board].msata_en) {
767                 gpio_request(gpio_cfg[board].msata_en, "msata_en");
768                 gpio_direction_output(gpio_cfg[board].msata_en, 0);
769         }
770
771         /* Expansion Mezzanine IO */
772         if (gpio_cfg[board].mezz_pwren) {
773                 gpio_request(gpio_cfg[board].mezz_pwren, "mezz_pwr");
774                 gpio_direction_output(gpio_cfg[board].mezz_pwren, 0);
775         }
776         if (gpio_cfg[board].mezz_irq) {
777                 gpio_request(gpio_cfg[board].mezz_irq, "mezz_irq#");
778                 gpio_direction_input(gpio_cfg[board].mezz_irq);
779         }
780
781         /* RS485 Transmit Enable */
782         if (gpio_cfg[board].rs485en) {
783                 gpio_request(gpio_cfg[board].rs485en, "rs485_en");
784                 gpio_direction_output(gpio_cfg[board].rs485en, 0);
785         }
786
787         /* GPS_SHDN */
788         if (gpio_cfg[board].gps_shdn) {
789                 gpio_request(gpio_cfg[board].gps_shdn, "gps_shdn");
790                 gpio_direction_output(gpio_cfg[board].gps_shdn, 1);
791         }
792
793         /* Analog video codec power enable */
794         if (gpio_cfg[board].vidin_en) {
795                 gpio_request(gpio_cfg[board].vidin_en, "anavidin_en");
796                 gpio_direction_output(gpio_cfg[board].vidin_en, 1);
797         }
798
799         /* DIOI2C_DIS# */
800         if (gpio_cfg[board].dioi2c_en) {
801                 gpio_request(gpio_cfg[board].dioi2c_en, "dioi2c_dis#");
802                 gpio_direction_output(gpio_cfg[board].dioi2c_en, 0);
803         }
804
805         /* PCICK_SSON: disable spread-spectrum clock */
806         if (gpio_cfg[board].pcie_sson) {
807                 gpio_request(gpio_cfg[board].pcie_sson, "pci_sson");
808                 gpio_direction_output(gpio_cfg[board].pcie_sson, 0);
809         }
810
811         /* USBOTG mux routing */
812         if (gpio_cfg[board].usb_sel) {
813                 gpio_request(gpio_cfg[board].usb_sel, "usb_pcisel");
814                 gpio_direction_output(gpio_cfg[board].usb_sel, 0);
815         }
816
817         /* PCISKT_WDIS# (Wireless disable GPIO to miniPCIe sockets) */
818         if (gpio_cfg[board].wdis) {
819                 gpio_request(gpio_cfg[board].wdis, "wlan_dis");
820                 gpio_direction_output(gpio_cfg[board].wdis, 1);
821         }
822
823         /* OTG power off */
824         if (gpio_cfg[board].otgpwr_en) {
825                 gpio_request(gpio_cfg[board].otgpwr_en, "usbotg_pwr");
826                 gpio_direction_output(gpio_cfg[board].otgpwr_en, 0);
827         }
828
829         /* sense vselect pin to see if we support uhs-i */
830         gpio_request(GP_SD3_VSELECT, "sd3_vselect");
831         gpio_direction_input(GP_SD3_VSELECT);
832         gpio_cfg[board].usd_vsel = !gpio_get_value(GP_SD3_VSELECT);
833 }
834
835 /* setup GPIO pinmux and default configuration per baseboard and env */
836 void setup_board_gpio(int board, struct ventana_board_info *info)
837 {
838         const char *s;
839         char arg[10];
840         size_t len;
841         int i;
842         int quiet = simple_strtol(getenv("quiet"), NULL, 10);
843
844         if (board >= GW_UNKNOWN)
845                 return;
846
847         /* RS232_EN# */
848         if (gpio_cfg[board].rs232_en) {
849                 gpio_direction_output(gpio_cfg[board].rs232_en,
850                                       (hwconfig("rs232")) ? 0 : 1);
851         }
852
853         /* MSATA Enable */
854         if (gpio_cfg[board].msata_en && is_cpu_type(MXC_CPU_MX6Q)) {
855                 gpio_direction_output(GP_MSATA_SEL,
856                                       (hwconfig("msata")) ? 1 : 0);
857         }
858
859         /* USBOTG Select (PCISKT or FrontPanel) */
860         if (gpio_cfg[board].usb_sel) {
861                 gpio_direction_output(gpio_cfg[board].usb_sel,
862                                       (hwconfig("usb_pcisel")) ? 1 : 0);
863         }
864
865         /*
866          * Configure DIO pinmux/padctl registers
867          * see IMX6DQRM/IMX6SDLRM IOMUXC_SW_PAD_CTL_PAD_* register definitions
868          */
869         for (i = 0; i < gpio_cfg[board].dio_num; i++) {
870                 struct dio_cfg *cfg = &gpio_cfg[board].dio_cfg[i];
871                 iomux_v3_cfg_t ctrl = DIO_PAD_CFG;
872                 unsigned cputype = is_cpu_type(MXC_CPU_MX6Q) ? 0 : 1;
873
874                 if (!cfg->gpio_padmux[0] && !cfg->gpio_padmux[1])
875                         continue;
876                 sprintf(arg, "dio%d", i);
877                 if (!hwconfig(arg))
878                         continue;
879                 s = hwconfig_subarg(arg, "padctrl", &len);
880                 if (s) {
881                         ctrl = MUX_PAD_CTRL(simple_strtoul(s, NULL, 16)
882                                             & 0x1ffff) | MUX_MODE_SION;
883                 }
884                 if (hwconfig_subarg_cmp(arg, "mode", "gpio")) {
885                         if (!quiet) {
886                                 printf("DIO%d:  GPIO%d_IO%02d (gpio-%d)\n", i,
887                                        (cfg->gpio_param/32)+1,
888                                        cfg->gpio_param%32,
889                                        cfg->gpio_param);
890                         }
891                         imx_iomux_v3_setup_pad(cfg->gpio_padmux[cputype] |
892                                                ctrl);
893                         gpio_requestf(cfg->gpio_param, "dio%d", i);
894                         gpio_direction_input(cfg->gpio_param);
895                 } else if (hwconfig_subarg_cmp(arg, "mode", "pwm") &&
896                            cfg->pwm_padmux) {
897                         if (!cfg->pwm_param) {
898                                 printf("DIO%d:  Error: pwm config invalid\n",
899                                         i);
900                                 continue;
901                         }
902                         if (!quiet)
903                                 printf("DIO%d:  pwm%d\n", i, cfg->pwm_param);
904                         imx_iomux_v3_setup_pad(cfg->pwm_padmux[cputype] |
905                                                MUX_PAD_CTRL(ctrl));
906                 }
907         }
908
909         if (!quiet) {
910                 if (gpio_cfg[board].msata_en && is_cpu_type(MXC_CPU_MX6Q)) {
911                         printf("MSATA: %s\n", (hwconfig("msata") ?
912                                "enabled" : "disabled"));
913                 }
914                 if (gpio_cfg[board].rs232_en) {
915                         printf("RS232: %s\n", (hwconfig("rs232")) ?
916                                "enabled" : "disabled");
917                 }
918         }
919 }
920
921 /* setup board specific PMIC */
922 void setup_pmic(void)
923 {
924         struct pmic *p;
925         u32 reg;
926
927         i2c_set_bus_num(CONFIG_I2C_PMIC);
928
929         /* configure PFUZE100 PMIC */
930         if (!i2c_probe(CONFIG_POWER_PFUZE100_I2C_ADDR)) {
931                 debug("probed PFUZE100@0x%x\n", CONFIG_POWER_PFUZE100_I2C_ADDR);
932                 power_pfuze100_init(CONFIG_I2C_PMIC);
933                 p = pmic_get("PFUZE100");
934                 if (p && !pmic_probe(p)) {
935                         pmic_reg_read(p, PFUZE100_DEVICEID, &reg);
936                         printf("PMIC:  PFUZE100 ID=0x%02x\n", reg);
937
938                         /* Set VGEN1 to 1.5V and enable */
939                         pmic_reg_read(p, PFUZE100_VGEN1VOL, &reg);
940                         reg &= ~(LDO_VOL_MASK);
941                         reg |= (LDOA_1_50V | LDO_EN);
942                         pmic_reg_write(p, PFUZE100_VGEN1VOL, reg);
943
944                         /* Set SWBST to 5.0V and enable */
945                         pmic_reg_read(p, PFUZE100_SWBSTCON1, &reg);
946                         reg &= ~(SWBST_MODE_MASK | SWBST_VOL_MASK);
947                         reg |= (SWBST_5_00V | (SWBST_MODE_AUTO << SWBST_MODE_SHIFT));
948                         pmic_reg_write(p, PFUZE100_SWBSTCON1, reg);
949                 }
950         }
951
952         /* configure LTC3676 PMIC */
953         else if (!i2c_probe(CONFIG_POWER_LTC3676_I2C_ADDR)) {
954                 debug("probed LTC3676@0x%x\n", CONFIG_POWER_LTC3676_I2C_ADDR);
955                 power_ltc3676_init(CONFIG_I2C_PMIC);
956                 p = pmic_get("LTC3676_PMIC");
957                 if (p && !pmic_probe(p)) {
958                         puts("PMIC:  LTC3676\n");
959                         /*
960                          * set board-specific scalar for max CPU frequency
961                          * per CPU based on the LDO enabled Operating Ranges
962                          * defined in the respective IMX6DQ and IMX6SDL
963                          * datasheets. The voltage resulting from the R1/R2
964                          * feedback inputs on Ventana is 1308mV. Note that this
965                          * is a bit shy of the Vmin of 1350mV in the datasheet
966                          * for LDO enabled mode but is as high as we can go.
967                          *
968                          * We will rely on an OS kernel driver to properly
969                          * regulate these per CPU operating point and use LDO
970                          * bypass mode when using the higher frequency
971                          * operating points to compensate as LDO bypass mode
972                          * allows the rails be 125mV lower.
973                          */
974                         /* mask PGOOD during SW1 transition */
975                         pmic_reg_write(p, LTC3676_DVB1B,
976                                        0x1f | LTC3676_PGOOD_MASK);
977                         /* set SW1 (VDD_SOC) */
978                         pmic_reg_write(p, LTC3676_DVB1A, 0x1f);
979
980                         /* mask PGOOD during SW3 transition */
981                         pmic_reg_write(p, LTC3676_DVB3B,
982                                        0x1f | LTC3676_PGOOD_MASK);
983                         /* set SW3 (VDD_ARM) */
984                         pmic_reg_write(p, LTC3676_DVB3A, 0x1f);
985                 }
986         }
987 }
988
989 #ifdef CONFIG_FSL_ESDHC
990 static struct fsl_esdhc_cfg usdhc_cfg = { USDHC3_BASE_ADDR };
991
992 int board_mmc_init(bd_t *bis)
993 {
994         /* Only one USDHC controller on Ventana */
995         SETUP_IOMUX_PADS(usdhc3_pads);
996         usdhc_cfg.sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK);
997         usdhc_cfg.max_bus_width = 4;
998
999         return fsl_esdhc_initialize(bis, &usdhc_cfg);
1000 }
1001
1002 int board_mmc_getcd(struct mmc *mmc)
1003 {
1004         /* Card Detect */
1005         gpio_request(GP_SD3_CD, "sd_cd");
1006         gpio_direction_input(GP_SD3_CD);
1007         return !gpio_get_value(GP_SD3_CD);
1008 }
1009 #endif /* CONFIG_FSL_ESDHC */