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, ®); 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, ®); 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, ®); 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 */ 1002