]> git.sur5r.net Git - u-boot/blob - board/gateworks/gw_ventana/common.c
imx: ventana: change name of rs232_en to indicate polarity
[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         },
590
591         /* GW51xx */
592         {
593                 .gpio_pads = gw51xx_gpio_pads,
594                 .num_pads = ARRAY_SIZE(gw51xx_gpio_pads)/2,
595                 .dio_cfg = gw51xx_dio,
596                 .dio_num = ARRAY_SIZE(gw51xx_dio),
597                 .leds = {
598                         IMX_GPIO_NR(4, 6),
599                         IMX_GPIO_NR(4, 10),
600                 },
601                 .pcie_rst = IMX_GPIO_NR(1, 0),
602                 .mezz_pwren = IMX_GPIO_NR(2, 19),
603                 .mezz_irq = IMX_GPIO_NR(2, 18),
604                 .gps_shdn = IMX_GPIO_NR(1, 2),
605                 .vidin_en = IMX_GPIO_NR(5, 20),
606                 .wdis = IMX_GPIO_NR(7, 12),
607         },
608
609         /* GW52xx */
610         {
611                 .gpio_pads = gw52xx_gpio_pads,
612                 .num_pads = ARRAY_SIZE(gw52xx_gpio_pads)/2,
613                 .dio_cfg = gw52xx_dio,
614                 .dio_num = ARRAY_SIZE(gw52xx_dio),
615                 .leds = {
616                         IMX_GPIO_NR(4, 6),
617                         IMX_GPIO_NR(4, 7),
618                         IMX_GPIO_NR(4, 15),
619                 },
620                 .pcie_rst = IMX_GPIO_NR(1, 29),
621                 .mezz_pwren = IMX_GPIO_NR(2, 19),
622                 .mezz_irq = IMX_GPIO_NR(2, 18),
623                 .gps_shdn = IMX_GPIO_NR(1, 27),
624                 .vidin_en = IMX_GPIO_NR(3, 31),
625                 .usb_sel = IMX_GPIO_NR(1, 2),
626                 .wdis = IMX_GPIO_NR(7, 12),
627                 .msata_en = GP_MSATA_SEL,
628                 .rs232_en = GP_RS232_EN,
629         },
630
631         /* GW53xx */
632         {
633                 .gpio_pads = gw53xx_gpio_pads,
634                 .num_pads = ARRAY_SIZE(gw53xx_gpio_pads)/2,
635                 .dio_cfg = gw53xx_dio,
636                 .dio_num = ARRAY_SIZE(gw53xx_dio),
637                 .leds = {
638                         IMX_GPIO_NR(4, 6),
639                         IMX_GPIO_NR(4, 7),
640                         IMX_GPIO_NR(4, 15),
641                 },
642                 .pcie_rst = IMX_GPIO_NR(1, 29),
643                 .mezz_pwren = IMX_GPIO_NR(2, 19),
644                 .mezz_irq = IMX_GPIO_NR(2, 18),
645                 .gps_shdn = IMX_GPIO_NR(1, 27),
646                 .vidin_en = IMX_GPIO_NR(3, 31),
647                 .wdis = IMX_GPIO_NR(7, 12),
648                 .msata_en = GP_MSATA_SEL,
649                 .rs232_en = GP_RS232_EN,
650         },
651
652         /* GW54xx */
653         {
654                 .gpio_pads = gw54xx_gpio_pads,
655                 .num_pads = ARRAY_SIZE(gw54xx_gpio_pads)/2,
656                 .dio_cfg = gw54xx_dio,
657                 .dio_num = ARRAY_SIZE(gw54xx_dio),
658                 .leds = {
659                         IMX_GPIO_NR(4, 6),
660                         IMX_GPIO_NR(4, 7),
661                         IMX_GPIO_NR(4, 15),
662                 },
663                 .pcie_rst = IMX_GPIO_NR(1, 29),
664                 .mezz_pwren = IMX_GPIO_NR(2, 19),
665                 .mezz_irq = IMX_GPIO_NR(2, 18),
666                 .rs485en = IMX_GPIO_NR(7, 1),
667                 .vidin_en = IMX_GPIO_NR(3, 31),
668                 .dioi2c_en = IMX_GPIO_NR(4,  5),
669                 .pcie_sson = IMX_GPIO_NR(1, 20),
670                 .wdis = IMX_GPIO_NR(5, 17),
671                 .msata_en = GP_MSATA_SEL,
672                 .rs232_en = GP_RS232_EN,
673         },
674
675         /* GW551x */
676         {
677                 .gpio_pads = gw551x_gpio_pads,
678                 .num_pads = ARRAY_SIZE(gw551x_gpio_pads)/2,
679                 .dio_cfg = gw551x_dio,
680                 .dio_num = ARRAY_SIZE(gw551x_dio),
681                 .leds = {
682                         IMX_GPIO_NR(4, 7),
683                 },
684                 .pcie_rst = IMX_GPIO_NR(1, 0),
685                 .wdis = IMX_GPIO_NR(7, 12),
686         },
687
688         /* GW552x */
689         {
690                 .gpio_pads = gw552x_gpio_pads,
691                 .num_pads = ARRAY_SIZE(gw552x_gpio_pads)/2,
692                 .dio_cfg = gw552x_dio,
693                 .dio_num = ARRAY_SIZE(gw552x_dio),
694                 .leds = {
695                         IMX_GPIO_NR(4, 6),
696                         IMX_GPIO_NR(4, 7),
697                         IMX_GPIO_NR(4, 15),
698                 },
699                 .pcie_rst = IMX_GPIO_NR(1, 29),
700                 .usb_sel = IMX_GPIO_NR(1, 7),
701                 .wdis = IMX_GPIO_NR(7, 12),
702                 .msata_en = GP_MSATA_SEL,
703         },
704
705         /* GW553x */
706         {
707                 .gpio_pads = gw553x_gpio_pads,
708                 .num_pads = ARRAY_SIZE(gw553x_gpio_pads)/2,
709                 .dio_cfg = gw553x_dio,
710                 .dio_num = ARRAY_SIZE(gw553x_dio),
711                 .leds = {
712                         IMX_GPIO_NR(4, 10),
713                         IMX_GPIO_NR(4, 11),
714                 },
715                 .pcie_rst = IMX_GPIO_NR(1, 0),
716                 .vidin_en = IMX_GPIO_NR(5, 20),
717                 .wdis = IMX_GPIO_NR(7, 12),
718         },
719 };
720
721 void setup_iomux_gpio(int board, struct ventana_board_info *info)
722 {
723         int i;
724
725         /* iomux common to all Ventana boards */
726         SETUP_IOMUX_PADS(gw_gpio_pads);
727
728         /* OTG power off */
729         gpio_request(GP_USB_OTG_PWR, "usbotg_pwr");
730         gpio_direction_output(GP_USB_OTG_PWR, 0);
731
732         if (board >= GW_UNKNOWN)
733                 return;
734
735         /* board specific iomux */
736         imx_iomux_v3_setup_multiple_pads(gpio_cfg[board].gpio_pads,
737                                          gpio_cfg[board].num_pads);
738
739         /* RS232_EN# */
740         if (gpio_cfg[board].rs232_en) {
741                 gpio_request(gpio_cfg[board].rs232_en, "rs232_en#");
742                 gpio_direction_output(gpio_cfg[board].rs232_en, 0);
743         }
744
745         /* GW522x Uses GPIO3_IO23 for PCIE_RST# */
746         if (board == GW52xx && info->model[4] == '2')
747                 gpio_cfg[board].pcie_rst = IMX_GPIO_NR(3, 23);
748
749         /* assert PCI_RST# */
750         gpio_request(gpio_cfg[board].pcie_rst, "pci_rst#");
751         gpio_direction_output(gpio_cfg[board].pcie_rst, 0);
752
753         /* turn off (active-high) user LED's */
754         for (i = 0; i < ARRAY_SIZE(gpio_cfg[board].leds); i++) {
755                 char name[16];
756                 if (gpio_cfg[board].leds[i]) {
757                         sprintf(name, "led_user%d", i);
758                         gpio_request(gpio_cfg[board].leds[i], name);
759                         gpio_direction_output(gpio_cfg[board].leds[i], 1);
760                 }
761         }
762
763         /* MSATA Enable - default to PCI */
764         if (gpio_cfg[board].msata_en) {
765                 gpio_request(gpio_cfg[board].msata_en, "msata_en");
766                 gpio_direction_output(gpio_cfg[board].msata_en, 0);
767         }
768
769         /* Expansion Mezzanine IO */
770         if (gpio_cfg[board].mezz_pwren) {
771                 gpio_request(gpio_cfg[board].mezz_pwren, "mezz_pwr");
772                 gpio_direction_output(gpio_cfg[board].mezz_pwren, 0);
773         }
774         if (gpio_cfg[board].mezz_irq) {
775                 gpio_request(gpio_cfg[board].mezz_irq, "mezz_irq#");
776                 gpio_direction_input(gpio_cfg[board].mezz_irq);
777         }
778
779         /* RS485 Transmit Enable */
780         if (gpio_cfg[board].rs485en) {
781                 gpio_request(gpio_cfg[board].rs485en, "rs485_en");
782                 gpio_direction_output(gpio_cfg[board].rs485en, 0);
783         }
784
785         /* GPS_SHDN */
786         if (gpio_cfg[board].gps_shdn) {
787                 gpio_request(gpio_cfg[board].gps_shdn, "gps_shdn");
788                 gpio_direction_output(gpio_cfg[board].gps_shdn, 1);
789         }
790
791         /* Analog video codec power enable */
792         if (gpio_cfg[board].vidin_en) {
793                 gpio_request(gpio_cfg[board].vidin_en, "anavidin_en");
794                 gpio_direction_output(gpio_cfg[board].vidin_en, 1);
795         }
796
797         /* DIOI2C_DIS# */
798         if (gpio_cfg[board].dioi2c_en) {
799                 gpio_request(gpio_cfg[board].dioi2c_en, "dioi2c_dis#");
800                 gpio_direction_output(gpio_cfg[board].dioi2c_en, 0);
801         }
802
803         /* PCICK_SSON: disable spread-spectrum clock */
804         if (gpio_cfg[board].pcie_sson) {
805                 gpio_request(gpio_cfg[board].pcie_sson, "pci_sson");
806                 gpio_direction_output(gpio_cfg[board].pcie_sson, 0);
807         }
808
809         /* USBOTG mux routing */
810         if (gpio_cfg[board].usb_sel) {
811                 gpio_request(gpio_cfg[board].usb_sel, "usb_pcisel");
812                 gpio_direction_output(gpio_cfg[board].usb_sel, 0);
813         }
814
815         /* PCISKT_WDIS# (Wireless disable GPIO to miniPCIe sockets) */
816         if (gpio_cfg[board].wdis) {
817                 gpio_request(gpio_cfg[board].wdis, "wlan_dis");
818                 gpio_direction_output(gpio_cfg[board].wdis, 1);
819         }
820
821         /* sense vselect pin to see if we support uhs-i */
822         gpio_request(GP_SD3_VSELECT, "sd3_vselect");
823         gpio_direction_input(GP_SD3_VSELECT);
824         gpio_cfg[board].usd_vsel = !gpio_get_value(GP_SD3_VSELECT);
825 }
826
827 /* setup GPIO pinmux and default configuration per baseboard and env */
828 void setup_board_gpio(int board, struct ventana_board_info *info)
829 {
830         const char *s;
831         char arg[10];
832         size_t len;
833         int i;
834         int quiet = simple_strtol(getenv("quiet"), NULL, 10);
835
836         if (board >= GW_UNKNOWN)
837                 return;
838
839         /* RS232_EN# */
840         if (gpio_cfg[board].rs232_en) {
841                 gpio_direction_output(gpio_cfg[board].rs232_en,
842                                       (hwconfig("rs232")) ? 0 : 1);
843         }
844
845         /* MSATA Enable */
846         if (gpio_cfg[board].msata_en && is_cpu_type(MXC_CPU_MX6Q)) {
847                 gpio_direction_output(GP_MSATA_SEL,
848                                       (hwconfig("msata")) ? 1 : 0);
849         }
850
851         /* USBOTG Select (PCISKT or FrontPanel) */
852         if (gpio_cfg[board].usb_sel) {
853                 gpio_direction_output(gpio_cfg[board].usb_sel,
854                                       (hwconfig("usb_pcisel")) ? 1 : 0);
855         }
856
857         /*
858          * Configure DIO pinmux/padctl registers
859          * see IMX6DQRM/IMX6SDLRM IOMUXC_SW_PAD_CTL_PAD_* register definitions
860          */
861         for (i = 0; i < gpio_cfg[board].dio_num; i++) {
862                 struct dio_cfg *cfg = &gpio_cfg[board].dio_cfg[i];
863                 iomux_v3_cfg_t ctrl = DIO_PAD_CFG;
864                 unsigned cputype = is_cpu_type(MXC_CPU_MX6Q) ? 0 : 1;
865
866                 if (!cfg->gpio_padmux[0] && !cfg->gpio_padmux[1])
867                         continue;
868                 sprintf(arg, "dio%d", i);
869                 if (!hwconfig(arg))
870                         continue;
871                 s = hwconfig_subarg(arg, "padctrl", &len);
872                 if (s) {
873                         ctrl = MUX_PAD_CTRL(simple_strtoul(s, NULL, 16)
874                                             & 0x1ffff) | MUX_MODE_SION;
875                 }
876                 if (hwconfig_subarg_cmp(arg, "mode", "gpio")) {
877                         if (!quiet) {
878                                 printf("DIO%d:  GPIO%d_IO%02d (gpio-%d)\n", i,
879                                        (cfg->gpio_param/32)+1,
880                                        cfg->gpio_param%32,
881                                        cfg->gpio_param);
882                         }
883                         imx_iomux_v3_setup_pad(cfg->gpio_padmux[cputype] |
884                                                ctrl);
885                         gpio_requestf(cfg->gpio_param, "dio%d", i);
886                         gpio_direction_input(cfg->gpio_param);
887                 } else if (hwconfig_subarg_cmp(arg, "mode", "pwm") &&
888                            cfg->pwm_padmux) {
889                         if (!cfg->pwm_param) {
890                                 printf("DIO%d:  Error: pwm config invalid\n",
891                                         i);
892                                 continue;
893                         }
894                         if (!quiet)
895                                 printf("DIO%d:  pwm%d\n", i, cfg->pwm_param);
896                         imx_iomux_v3_setup_pad(cfg->pwm_padmux[cputype] |
897                                                MUX_PAD_CTRL(ctrl));
898                 }
899         }
900
901         if (!quiet) {
902                 if (gpio_cfg[board].msata_en && is_cpu_type(MXC_CPU_MX6Q)) {
903                         printf("MSATA: %s\n", (hwconfig("msata") ?
904                                "enabled" : "disabled"));
905                 }
906                 if (gpio_cfg[board].rs232_en) {
907                         printf("RS232: %s\n", (hwconfig("rs232")) ?
908                                "enabled" : "disabled");
909                 }
910         }
911 }
912
913 /* setup board specific PMIC */
914 void setup_pmic(void)
915 {
916         struct pmic *p;
917         u32 reg;
918
919         i2c_set_bus_num(CONFIG_I2C_PMIC);
920
921         /* configure PFUZE100 PMIC */
922         if (!i2c_probe(CONFIG_POWER_PFUZE100_I2C_ADDR)) {
923                 debug("probed PFUZE100@0x%x\n", CONFIG_POWER_PFUZE100_I2C_ADDR);
924                 power_pfuze100_init(CONFIG_I2C_PMIC);
925                 p = pmic_get("PFUZE100");
926                 if (p && !pmic_probe(p)) {
927                         pmic_reg_read(p, PFUZE100_DEVICEID, &reg);
928                         printf("PMIC:  PFUZE100 ID=0x%02x\n", reg);
929
930                         /* Set VGEN1 to 1.5V and enable */
931                         pmic_reg_read(p, PFUZE100_VGEN1VOL, &reg);
932                         reg &= ~(LDO_VOL_MASK);
933                         reg |= (LDOA_1_50V | LDO_EN);
934                         pmic_reg_write(p, PFUZE100_VGEN1VOL, reg);
935
936                         /* Set SWBST to 5.0V and enable */
937                         pmic_reg_read(p, PFUZE100_SWBSTCON1, &reg);
938                         reg &= ~(SWBST_MODE_MASK | SWBST_VOL_MASK);
939                         reg |= (SWBST_5_00V | (SWBST_MODE_AUTO << SWBST_MODE_SHIFT));
940                         pmic_reg_write(p, PFUZE100_SWBSTCON1, reg);
941                 }
942         }
943
944         /* configure LTC3676 PMIC */
945         else if (!i2c_probe(CONFIG_POWER_LTC3676_I2C_ADDR)) {
946                 debug("probed LTC3676@0x%x\n", CONFIG_POWER_LTC3676_I2C_ADDR);
947                 power_ltc3676_init(CONFIG_I2C_PMIC);
948                 p = pmic_get("LTC3676_PMIC");
949                 if (p && !pmic_probe(p)) {
950                         puts("PMIC:  LTC3676\n");
951                         /*
952                          * set board-specific scalar for max CPU frequency
953                          * per CPU based on the LDO enabled Operating Ranges
954                          * defined in the respective IMX6DQ and IMX6SDL
955                          * datasheets. The voltage resulting from the R1/R2
956                          * feedback inputs on Ventana is 1308mV. Note that this
957                          * is a bit shy of the Vmin of 1350mV in the datasheet
958                          * for LDO enabled mode but is as high as we can go.
959                          *
960                          * We will rely on an OS kernel driver to properly
961                          * regulate these per CPU operating point and use LDO
962                          * bypass mode when using the higher frequency
963                          * operating points to compensate as LDO bypass mode
964                          * allows the rails be 125mV lower.
965                          */
966                         /* mask PGOOD during SW1 transition */
967                         pmic_reg_write(p, LTC3676_DVB1B,
968                                        0x1f | LTC3676_PGOOD_MASK);
969                         /* set SW1 (VDD_SOC) */
970                         pmic_reg_write(p, LTC3676_DVB1A, 0x1f);
971
972                         /* mask PGOOD during SW3 transition */
973                         pmic_reg_write(p, LTC3676_DVB3B,
974                                        0x1f | LTC3676_PGOOD_MASK);
975                         /* set SW3 (VDD_ARM) */
976                         pmic_reg_write(p, LTC3676_DVB3A, 0x1f);
977                 }
978         }
979 }
980
981 #ifdef CONFIG_FSL_ESDHC
982 static struct fsl_esdhc_cfg usdhc_cfg = { USDHC3_BASE_ADDR };
983
984 int board_mmc_init(bd_t *bis)
985 {
986         /* Only one USDHC controller on Ventana */
987         SETUP_IOMUX_PADS(usdhc3_pads);
988         usdhc_cfg.sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK);
989         usdhc_cfg.max_bus_width = 4;
990
991         return fsl_esdhc_initialize(bis, &usdhc_cfg);
992 }
993
994 int board_mmc_getcd(struct mmc *mmc)
995 {
996         /* Card Detect */
997         gpio_request(GP_SD3_CD, "sd_cd");
998         gpio_direction_input(GP_SD3_CD);
999         return !gpio_get_value(GP_SD3_CD);
1000 }
1001 #endif /* CONFIG_FSL_ESDHC */