1 // SPDX-License-Identifier: GPL-2.0+ 2 /* 3 * Copyright (C) 2013 Gateworks Corporation 4 * 5 * Author: Tim Harvey <tharvey@gateworks.com> 6 */ 7 8 #include <asm/arch/clock.h> 9 #include <asm/arch/mx6-pins.h> 10 #include <asm/arch/sys_proto.h> 11 #include <asm/gpio.h> 12 #include <asm/mach-imx/mxc_i2c.h> 13 #include <fsl_esdhc.h> 14 #include <hwconfig.h> 15 #include <power/pmic.h> 16 #include <power/ltc3676_pmic.h> 17 #include <power/pfuze100_pmic.h> 18 19 #include "common.h" 20 21 /* UART2: Serial Console */ 22 static iomux_v3_cfg_t const uart2_pads[] = { 23 IOMUX_PADS(PAD_SD4_DAT7__UART2_TX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL)), 24 IOMUX_PADS(PAD_SD4_DAT4__UART2_RX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL)), 25 }; 26 27 void setup_iomux_uart(void) 28 { 29 SETUP_IOMUX_PADS(uart2_pads); 30 } 31 32 /* MMC */ 33 static iomux_v3_cfg_t const gw5904_emmc_pads[] = { 34 IOMUX_PADS(PAD_SD3_DAT0__SD3_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), 35 IOMUX_PADS(PAD_SD3_DAT1__SD3_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), 36 IOMUX_PADS(PAD_SD3_DAT2__SD3_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), 37 IOMUX_PADS(PAD_SD3_DAT3__SD3_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), 38 IOMUX_PADS(PAD_SD3_DAT4__SD3_DATA4 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), 39 IOMUX_PADS(PAD_SD3_DAT5__SD3_DATA5 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), 40 IOMUX_PADS(PAD_SD3_DAT6__SD3_DATA6 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), 41 IOMUX_PADS(PAD_SD3_DAT7__SD3_DATA7 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), 42 IOMUX_PADS(PAD_SD3_CLK__SD3_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL)), 43 IOMUX_PADS(PAD_SD3_CMD__SD3_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL)), 44 IOMUX_PADS(PAD_SD3_RST__SD3_RESET | MUX_PAD_CTRL(USDHC_PAD_CTRL)), 45 }; 46 /* 4-bit microSD on SD2 */ 47 static iomux_v3_cfg_t const gw5904_mmc_pads[] = { 48 IOMUX_PADS(PAD_SD2_CLK__SD2_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL)), 49 IOMUX_PADS(PAD_SD2_CMD__SD2_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL)), 50 IOMUX_PADS(PAD_SD2_DAT0__SD2_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), 51 IOMUX_PADS(PAD_SD2_DAT1__SD2_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), 52 IOMUX_PADS(PAD_SD2_DAT2__SD2_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), 53 IOMUX_PADS(PAD_SD2_DAT3__SD2_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), 54 /* CD */ 55 IOMUX_PADS(PAD_NANDF_CS0__GPIO6_IO11 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), 56 }; 57 /* 8-bit eMMC on SD2/NAND */ 58 static iomux_v3_cfg_t const gw560x_emmc_sd2_pads[] = { 59 IOMUX_PADS(PAD_SD2_CLK__SD2_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL)), 60 IOMUX_PADS(PAD_SD2_CMD__SD2_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL)), 61 IOMUX_PADS(PAD_SD2_DAT0__SD2_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), 62 IOMUX_PADS(PAD_SD2_DAT1__SD2_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), 63 IOMUX_PADS(PAD_SD2_DAT2__SD2_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), 64 IOMUX_PADS(PAD_SD2_DAT3__SD2_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), 65 IOMUX_PADS(PAD_NANDF_D4__SD2_DATA4 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), 66 IOMUX_PADS(PAD_NANDF_D5__SD2_DATA5 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), 67 IOMUX_PADS(PAD_NANDF_D6__SD2_DATA6 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), 68 IOMUX_PADS(PAD_NANDF_D7__SD2_DATA7 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), 69 }; 70 71 static iomux_v3_cfg_t const usdhc3_pads[] = { 72 IOMUX_PADS(PAD_SD3_CLK__SD3_CLK | MUX_PAD_CTRL(USDHC_PAD_CTRL)), 73 IOMUX_PADS(PAD_SD3_CMD__SD3_CMD | MUX_PAD_CTRL(USDHC_PAD_CTRL)), 74 IOMUX_PADS(PAD_SD3_DAT0__SD3_DATA0 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), 75 IOMUX_PADS(PAD_SD3_DAT1__SD3_DATA1 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), 76 IOMUX_PADS(PAD_SD3_DAT2__SD3_DATA2 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), 77 IOMUX_PADS(PAD_SD3_DAT3__SD3_DATA3 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), 78 IOMUX_PADS(PAD_SD3_DAT5__GPIO7_IO00 | MUX_PAD_CTRL(USDHC_PAD_CTRL)), 79 }; 80 81 /* I2C1: GSC */ 82 static struct i2c_pads_info mx6q_i2c_pad_info0 = { 83 .scl = { 84 .i2c_mode = MX6Q_PAD_EIM_D21__I2C1_SCL | PC, 85 .gpio_mode = MX6Q_PAD_EIM_D21__GPIO3_IO21 | PC, 86 .gp = IMX_GPIO_NR(3, 21) 87 }, 88 .sda = { 89 .i2c_mode = MX6Q_PAD_EIM_D28__I2C1_SDA | PC, 90 .gpio_mode = MX6Q_PAD_EIM_D28__GPIO3_IO28 | PC, 91 .gp = IMX_GPIO_NR(3, 28) 92 } 93 }; 94 static struct i2c_pads_info mx6dl_i2c_pad_info0 = { 95 .scl = { 96 .i2c_mode = MX6DL_PAD_EIM_D21__I2C1_SCL | PC, 97 .gpio_mode = MX6DL_PAD_EIM_D21__GPIO3_IO21 | PC, 98 .gp = IMX_GPIO_NR(3, 21) 99 }, 100 .sda = { 101 .i2c_mode = MX6DL_PAD_EIM_D28__I2C1_SDA | PC, 102 .gpio_mode = MX6DL_PAD_EIM_D28__GPIO3_IO28 | PC, 103 .gp = IMX_GPIO_NR(3, 28) 104 } 105 }; 106 107 /* I2C2: PMIC/PCIe Switch/PCIe Clock/Mezz */ 108 static struct i2c_pads_info mx6q_i2c_pad_info1 = { 109 .scl = { 110 .i2c_mode = MX6Q_PAD_KEY_COL3__I2C2_SCL | PC, 111 .gpio_mode = MX6Q_PAD_KEY_COL3__GPIO4_IO12 | PC, 112 .gp = IMX_GPIO_NR(4, 12) 113 }, 114 .sda = { 115 .i2c_mode = MX6Q_PAD_KEY_ROW3__I2C2_SDA | PC, 116 .gpio_mode = MX6Q_PAD_KEY_ROW3__GPIO4_IO13 | PC, 117 .gp = IMX_GPIO_NR(4, 13) 118 } 119 }; 120 static struct i2c_pads_info mx6dl_i2c_pad_info1 = { 121 .scl = { 122 .i2c_mode = MX6DL_PAD_KEY_COL3__I2C2_SCL | PC, 123 .gpio_mode = MX6DL_PAD_KEY_COL3__GPIO4_IO12 | PC, 124 .gp = IMX_GPIO_NR(4, 12) 125 }, 126 .sda = { 127 .i2c_mode = MX6DL_PAD_KEY_ROW3__I2C2_SDA | PC, 128 .gpio_mode = MX6DL_PAD_KEY_ROW3__GPIO4_IO13 | PC, 129 .gp = IMX_GPIO_NR(4, 13) 130 } 131 }; 132 133 /* I2C3: Misc/Expansion */ 134 static struct i2c_pads_info mx6q_i2c_pad_info2 = { 135 .scl = { 136 .i2c_mode = MX6Q_PAD_GPIO_3__I2C3_SCL | PC, 137 .gpio_mode = MX6Q_PAD_GPIO_3__GPIO1_IO03 | PC, 138 .gp = IMX_GPIO_NR(1, 3) 139 }, 140 .sda = { 141 .i2c_mode = MX6Q_PAD_GPIO_6__I2C3_SDA | PC, 142 .gpio_mode = MX6Q_PAD_GPIO_6__GPIO1_IO06 | PC, 143 .gp = IMX_GPIO_NR(1, 6) 144 } 145 }; 146 static struct i2c_pads_info mx6dl_i2c_pad_info2 = { 147 .scl = { 148 .i2c_mode = MX6DL_PAD_GPIO_3__I2C3_SCL | PC, 149 .gpio_mode = MX6DL_PAD_GPIO_3__GPIO1_IO03 | PC, 150 .gp = IMX_GPIO_NR(1, 3) 151 }, 152 .sda = { 153 .i2c_mode = MX6DL_PAD_GPIO_6__I2C3_SDA | PC, 154 .gpio_mode = MX6DL_PAD_GPIO_6__GPIO1_IO06 | PC, 155 .gp = IMX_GPIO_NR(1, 6) 156 } 157 }; 158 159 void setup_ventana_i2c(void) 160 { 161 if (is_cpu_type(MXC_CPU_MX6Q)) { 162 setup_i2c(0, CONFIG_SYS_I2C_SPEED, 0x7f, &mx6q_i2c_pad_info0); 163 setup_i2c(1, CONFIG_SYS_I2C_SPEED, 0x7f, &mx6q_i2c_pad_info1); 164 setup_i2c(2, CONFIG_SYS_I2C_SPEED, 0x7f, &mx6q_i2c_pad_info2); 165 } else { 166 setup_i2c(0, CONFIG_SYS_I2C_SPEED, 0x7f, &mx6dl_i2c_pad_info0); 167 setup_i2c(1, CONFIG_SYS_I2C_SPEED, 0x7f, &mx6dl_i2c_pad_info1); 168 setup_i2c(2, CONFIG_SYS_I2C_SPEED, 0x7f, &mx6dl_i2c_pad_info2); 169 } 170 } 171 172 /* 173 * Baseboard specific GPIO 174 */ 175 static iomux_v3_cfg_t const gw51xx_gpio_pads[] = { 176 /* PANLEDG# */ 177 IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG), 178 /* PANLEDR# */ 179 IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG), 180 /* IOEXP_PWREN# */ 181 IOMUX_PADS(PAD_EIM_A19__GPIO2_IO19 | DIO_PAD_CFG), 182 /* IOEXP_IRQ# */ 183 IOMUX_PADS(PAD_EIM_A20__GPIO2_IO18 | MUX_PAD_CTRL(IRQ_PAD_CTRL)), 184 185 /* GPS_SHDN */ 186 IOMUX_PADS(PAD_GPIO_2__GPIO1_IO02 | DIO_PAD_CFG), 187 /* VID_PWR */ 188 IOMUX_PADS(PAD_CSI0_DATA_EN__GPIO5_IO20 | DIO_PAD_CFG), 189 /* PCI_RST# */ 190 IOMUX_PADS(PAD_GPIO_0__GPIO1_IO00 | DIO_PAD_CFG), 191 /* PCIESKT_WDIS# */ 192 IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG), 193 }; 194 195 static iomux_v3_cfg_t const gw52xx_gpio_pads[] = { 196 /* SD3_VSELECT */ 197 IOMUX_PADS(PAD_NANDF_CS1__GPIO6_IO14 | DIO_PAD_CFG), 198 /* RS232_EN# */ 199 IOMUX_PADS(PAD_SD4_DAT3__GPIO2_IO11 | DIO_PAD_CFG), 200 /* MSATA_EN */ 201 IOMUX_PADS(PAD_SD4_DAT0__GPIO2_IO08 | DIO_PAD_CFG), 202 /* PANLEDG# */ 203 IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG), 204 /* PANLEDR# */ 205 IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG), 206 /* IOEXP_PWREN# */ 207 IOMUX_PADS(PAD_EIM_A19__GPIO2_IO19 | DIO_PAD_CFG), 208 /* IOEXP_IRQ# */ 209 IOMUX_PADS(PAD_EIM_A20__GPIO2_IO18 | MUX_PAD_CTRL(IRQ_PAD_CTRL)), 210 /* CAN_STBY */ 211 IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09 | DIO_PAD_CFG), 212 /* MX6_LOCLED# */ 213 IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG), 214 /* GPS_SHDN */ 215 IOMUX_PADS(PAD_ENET_RXD0__GPIO1_IO27 | DIO_PAD_CFG), 216 /* USBOTG_SEL */ 217 IOMUX_PADS(PAD_GPIO_2__GPIO1_IO02 | DIO_PAD_CFG), 218 /* VID_PWR */ 219 IOMUX_PADS(PAD_EIM_D31__GPIO3_IO31 | DIO_PAD_CFG), 220 /* PCI_RST# */ 221 IOMUX_PADS(PAD_ENET_TXD1__GPIO1_IO29 | DIO_PAD_CFG), 222 /* PCI_RST# (GW522x) */ 223 IOMUX_PADS(PAD_EIM_D23__GPIO3_IO23 | DIO_PAD_CFG), 224 /* RS485_EN */ 225 IOMUX_PADS(PAD_SD3_DAT4__GPIO7_IO01 | DIO_PAD_CFG), 226 /* PCIESKT_WDIS# */ 227 IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG), 228 }; 229 230 static iomux_v3_cfg_t const gw53xx_gpio_pads[] = { 231 /* SD3_VSELECT */ 232 IOMUX_PADS(PAD_NANDF_CS1__GPIO6_IO14 | DIO_PAD_CFG), 233 /* RS232_EN# */ 234 IOMUX_PADS(PAD_SD4_DAT3__GPIO2_IO11 | DIO_PAD_CFG), 235 /* MSATA_EN */ 236 IOMUX_PADS(PAD_SD4_DAT0__GPIO2_IO08 | DIO_PAD_CFG), 237 /* CAN_STBY */ 238 IOMUX_PADS(PAD_GPIO_2__GPIO1_IO02 | DIO_PAD_CFG), 239 /* USB_HUBRST# */ 240 IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09 | DIO_PAD_CFG), 241 /* PANLEDG# */ 242 IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG), 243 /* PANLEDR# */ 244 IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG), 245 /* MX6_LOCLED# */ 246 IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG), 247 /* IOEXP_PWREN# */ 248 IOMUX_PADS(PAD_EIM_A19__GPIO2_IO19 | DIO_PAD_CFG), 249 /* IOEXP_IRQ# */ 250 IOMUX_PADS(PAD_EIM_A20__GPIO2_IO18 | MUX_PAD_CTRL(IRQ_PAD_CTRL)), 251 /* DIOI2C_DIS# */ 252 IOMUX_PADS(PAD_GPIO_19__GPIO4_IO05 | DIO_PAD_CFG), 253 /* GPS_SHDN */ 254 IOMUX_PADS(PAD_ENET_RXD0__GPIO1_IO27 | DIO_PAD_CFG), 255 /* VID_EN */ 256 IOMUX_PADS(PAD_EIM_D31__GPIO3_IO31 | DIO_PAD_CFG), 257 /* PCI_RST# */ 258 IOMUX_PADS(PAD_ENET_TXD1__GPIO1_IO29 | DIO_PAD_CFG), 259 /* RS485_EN */ 260 IOMUX_PADS(PAD_SD3_DAT4__GPIO7_IO01 | DIO_PAD_CFG), 261 /* PCIESKT_WDIS# */ 262 IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG), 263 }; 264 265 static iomux_v3_cfg_t const gw54xx_gpio_pads[] = { 266 /* SD3_VSELECT */ 267 IOMUX_PADS(PAD_NANDF_CS1__GPIO6_IO14 | DIO_PAD_CFG), 268 /* RS232_EN# */ 269 IOMUX_PADS(PAD_SD4_DAT3__GPIO2_IO11 | DIO_PAD_CFG), 270 /* MSATA_EN */ 271 IOMUX_PADS(PAD_SD4_DAT0__GPIO2_IO08 | DIO_PAD_CFG), 272 /* CAN_STBY */ 273 IOMUX_PADS(PAD_GPIO_2__GPIO1_IO02 | DIO_PAD_CFG), 274 /* PANLEDG# */ 275 IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG), 276 /* PANLEDR# */ 277 IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG), 278 /* MX6_LOCLED# */ 279 IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG), 280 /* USB_HUBRST# */ 281 IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16 | DIO_PAD_CFG), 282 /* MIPI_DIO */ 283 IOMUX_PADS(PAD_SD1_DAT3__GPIO1_IO21 | DIO_PAD_CFG), 284 /* RS485_EN */ 285 IOMUX_PADS(PAD_EIM_D24__GPIO3_IO24 | DIO_PAD_CFG), 286 /* IOEXP_PWREN# */ 287 IOMUX_PADS(PAD_EIM_A19__GPIO2_IO19 | DIO_PAD_CFG), 288 /* IOEXP_IRQ# */ 289 IOMUX_PADS(PAD_EIM_A20__GPIO2_IO18 | MUX_PAD_CTRL(IRQ_PAD_CTRL)), 290 /* DIOI2C_DIS# */ 291 IOMUX_PADS(PAD_GPIO_19__GPIO4_IO05 | DIO_PAD_CFG), 292 /* PCI_RST# */ 293 IOMUX_PADS(PAD_ENET_TXD1__GPIO1_IO29 | DIO_PAD_CFG), 294 /* VID_EN */ 295 IOMUX_PADS(PAD_EIM_D31__GPIO3_IO31 | DIO_PAD_CFG), 296 /* RS485_EN */ 297 IOMUX_PADS(PAD_SD3_DAT4__GPIO7_IO01 | DIO_PAD_CFG), 298 /* PCIESKT_WDIS# */ 299 IOMUX_PADS(PAD_DISP0_DAT23__GPIO5_IO17 | DIO_PAD_CFG), 300 }; 301 302 static iomux_v3_cfg_t const gw551x_gpio_pads[] = { 303 /* CAN_STBY */ 304 IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09 | DIO_PAD_CFG), 305 /* PANLED# */ 306 IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG), 307 /* PCI_RST# */ 308 IOMUX_PADS(PAD_GPIO_0__GPIO1_IO00 | DIO_PAD_CFG), 309 /* PCIESKT_WDIS# */ 310 IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG), 311 }; 312 313 static iomux_v3_cfg_t const gw552x_gpio_pads[] = { 314 /* MSATA_EN */ 315 IOMUX_PADS(PAD_SD4_DAT0__GPIO2_IO08 | DIO_PAD_CFG), 316 /* USBOTG_SEL */ 317 IOMUX_PADS(PAD_GPIO_7__GPIO1_IO07 | DIO_PAD_CFG), 318 /* USB_HUBRST# */ 319 IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09 | DIO_PAD_CFG), 320 /* PANLEDG# */ 321 IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG), 322 /* PANLEDR# */ 323 IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG), 324 /* MX6_LOCLED# */ 325 IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG), 326 /* PCI_RST# */ 327 IOMUX_PADS(PAD_ENET_TXD1__GPIO1_IO29 | DIO_PAD_CFG), 328 /* MX6_DIO[4:9] */ 329 IOMUX_PADS(PAD_CSI0_PIXCLK__GPIO5_IO18 | DIO_PAD_CFG), 330 IOMUX_PADS(PAD_CSI0_DATA_EN__GPIO5_IO20 | DIO_PAD_CFG), 331 IOMUX_PADS(PAD_CSI0_VSYNC__GPIO5_IO21 | DIO_PAD_CFG), 332 IOMUX_PADS(PAD_CSI0_DAT4__GPIO5_IO22 | DIO_PAD_CFG), 333 IOMUX_PADS(PAD_CSI0_DAT5__GPIO5_IO23 | DIO_PAD_CFG), 334 IOMUX_PADS(PAD_CSI0_DAT7__GPIO5_IO25 | DIO_PAD_CFG), 335 /* PCIEGBE1_OFF# */ 336 IOMUX_PADS(PAD_GPIO_1__GPIO1_IO01 | DIO_PAD_CFG), 337 /* PCIEGBE2_OFF# */ 338 IOMUX_PADS(PAD_GPIO_2__GPIO1_IO02 | DIO_PAD_CFG), 339 /* PCIESKT_WDIS# */ 340 IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG), 341 }; 342 343 static iomux_v3_cfg_t const gw553x_gpio_pads[] = { 344 /* SD3_VSELECT */ 345 IOMUX_PADS(PAD_NANDF_CS1__GPIO6_IO14 | DIO_PAD_CFG), 346 /* PANLEDG# */ 347 IOMUX_PADS(PAD_KEY_COL2__GPIO4_IO10 | DIO_PAD_CFG), 348 /* PANLEDR# */ 349 IOMUX_PADS(PAD_KEY_ROW2__GPIO4_IO11 | DIO_PAD_CFG), 350 /* VID_PWR */ 351 IOMUX_PADS(PAD_CSI0_DATA_EN__GPIO5_IO20 | DIO_PAD_CFG), 352 /* PCI_RST# */ 353 IOMUX_PADS(PAD_GPIO_0__GPIO1_IO00 | DIO_PAD_CFG), 354 /* PCIESKT_WDIS# */ 355 IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG), 356 }; 357 358 static iomux_v3_cfg_t const gw560x_gpio_pads[] = { 359 /* RS232_EN# */ 360 IOMUX_PADS(PAD_SD4_DAT3__GPIO2_IO11 | DIO_PAD_CFG), 361 /* CAN_STBY */ 362 IOMUX_PADS(PAD_GPIO_2__GPIO1_IO02 | DIO_PAD_CFG), 363 /* USB_HUBRST# */ 364 IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09 | DIO_PAD_CFG), 365 /* PANLEDG# */ 366 IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG), 367 /* PANLEDR# */ 368 IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG), 369 /* MX6_LOCLED# */ 370 IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG), 371 /* IOEXP_PWREN# */ 372 IOMUX_PADS(PAD_EIM_A19__GPIO2_IO19 | DIO_PAD_CFG), 373 /* IOEXP_IRQ# */ 374 IOMUX_PADS(PAD_EIM_A20__GPIO2_IO18 | MUX_PAD_CTRL(IRQ_PAD_CTRL)), 375 /* DIOI2C_DIS# */ 376 IOMUX_PADS(PAD_GPIO_19__GPIO4_IO05 | DIO_PAD_CFG), 377 /* VID_EN */ 378 IOMUX_PADS(PAD_EIM_D31__GPIO3_IO31 | DIO_PAD_CFG), 379 /* PCI_RST# */ 380 IOMUX_PADS(PAD_DISP0_DAT10__GPIO4_IO31 | DIO_PAD_CFG), 381 /* RS485_EN */ 382 IOMUX_PADS(PAD_SD3_DAT4__GPIO7_IO01 | DIO_PAD_CFG), 383 /* PCIESKT_WDIS# */ 384 IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG), 385 /* USBH2_PEN (OTG) */ 386 IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG), 387 /* 12V0_PWR_EN */ 388 IOMUX_PADS(PAD_DISP0_DAT5__GPIO4_IO26 | DIO_PAD_CFG), 389 }; 390 391 static iomux_v3_cfg_t const gw5903_gpio_pads[] = { 392 /* BKLT_12VEN */ 393 IOMUX_PADS(PAD_GPIO_7__GPIO1_IO07 | DIO_PAD_CFG), 394 /* EMMY_PDN# */ 395 IOMUX_PADS(PAD_NANDF_D2__GPIO2_IO02 | DIO_PAD_CFG), 396 /* EMMY_CFG1# */ 397 IOMUX_PADS(PAD_NANDF_D3__GPIO2_IO03 | DIO_PAD_CFG), 398 /* EMMY_CFG1# */ 399 IOMUX_PADS(PAD_NANDF_D4__GPIO2_IO04 | DIO_PAD_CFG), 400 /* USBH1_PEN (EHCI) */ 401 IOMUX_PADS(PAD_EIM_D31__GPIO3_IO31 | DIO_PAD_CFG), 402 /* USBH2_PEN (OTG) */ 403 IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG), 404 /* USBDPC_PEN */ 405 IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG), 406 /* TOUCH_RST */ 407 IOMUX_PADS(PAD_KEY_COL1__GPIO4_IO08 | DIO_PAD_CFG), 408 /* AUDIO_RST# */ 409 IOMUX_PADS(PAD_DISP0_DAT23__GPIO5_IO17 | DIO_PAD_CFG), 410 /* UART1_TEN# */ 411 IOMUX_PADS(PAD_CSI0_DAT12__GPIO5_IO30 | DIO_PAD_CFG), 412 /* MX6_LOCLED# */ 413 IOMUX_PADS(PAD_NANDF_CS1__GPIO6_IO14 | DIO_PAD_CFG), 414 /* LVDS_BKLEN # */ 415 IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG), 416 /* RGMII_PDWN# */ 417 IOMUX_PADS(PAD_ENET_CRS_DV__GPIO1_IO25 | DIO_PAD_CFG), 418 /* TOUCH_IRQ# */ 419 IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG), 420 /* TOUCH_RST# */ 421 IOMUX_PADS(PAD_KEY_COL1__GPIO4_IO08 | DIO_PAD_CFG), 422 }; 423 424 static iomux_v3_cfg_t const gw5904_gpio_pads[] = { 425 /* USB_HUBRST# */ 426 IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09 | DIO_PAD_CFG), 427 /* PANLEDG# */ 428 IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG), 429 /* PANLEDR# */ 430 IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG), 431 /* MX6_LOCLED# */ 432 IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG), 433 /* IOEXP_PWREN# */ 434 IOMUX_PADS(PAD_EIM_A19__GPIO2_IO19 | DIO_PAD_CFG), 435 /* IOEXP_IRQ# */ 436 IOMUX_PADS(PAD_EIM_A20__GPIO2_IO18 | MUX_PAD_CTRL(IRQ_PAD_CTRL)), 437 /* DIOI2C_DIS# */ 438 IOMUX_PADS(PAD_GPIO_19__GPIO4_IO05 | DIO_PAD_CFG), 439 /* UART_RS485 */ 440 IOMUX_PADS(PAD_DISP0_DAT2__GPIO4_IO23 | DIO_PAD_CFG), 441 /* UART_HALF */ 442 IOMUX_PADS(PAD_DISP0_DAT3__GPIO4_IO24 | DIO_PAD_CFG), 443 /* SKT1_WDIS# */ 444 IOMUX_PADS(PAD_DISP0_DAT17__GPIO5_IO11 | DIO_PAD_CFG), 445 /* SKT1_RST# */ 446 IOMUX_PADS(PAD_DISP0_DAT18__GPIO5_IO12 | DIO_PAD_CFG), 447 /* SKT2_WDIS# */ 448 IOMUX_PADS(PAD_DISP0_DAT19__GPIO5_IO13 | DIO_PAD_CFG), 449 /* SKT2_RST# */ 450 IOMUX_PADS(PAD_GPIO_0__GPIO1_IO00 | DIO_PAD_CFG), 451 /* M2_OFF# */ 452 IOMUX_PADS(PAD_SD2_DAT0__GPIO1_IO15 | DIO_PAD_CFG), 453 /* M2_WDIS# */ 454 IOMUX_PADS(PAD_SD2_DAT1__GPIO1_IO14 | DIO_PAD_CFG), 455 /* M2_RST# */ 456 IOMUX_PADS(PAD_SD2_DAT2__GPIO1_IO13 | DIO_PAD_CFG), 457 }; 458 459 /* Digital I/O */ 460 struct dio_cfg gw51xx_dio[] = { 461 { 462 { IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) }, 463 IMX_GPIO_NR(1, 16), 464 { 0, 0 }, 465 0 466 }, 467 { 468 { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) }, 469 IMX_GPIO_NR(1, 19), 470 { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) }, 471 2 472 }, 473 { 474 { IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) }, 475 IMX_GPIO_NR(1, 17), 476 { IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) }, 477 3 478 }, 479 { 480 { IOMUX_PADS(PAD_SD1_CMD__GPIO1_IO18) }, 481 IMX_GPIO_NR(1, 18), 482 { IOMUX_PADS(PAD_SD1_CMD__PWM4_OUT) }, 483 4 484 }, 485 }; 486 487 struct dio_cfg gw52xx_dio[] = { 488 { 489 { IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) }, 490 IMX_GPIO_NR(1, 16), 491 { 0, 0 }, 492 0 493 }, 494 { 495 { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) }, 496 IMX_GPIO_NR(1, 19), 497 { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) }, 498 2 499 }, 500 { 501 { IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) }, 502 IMX_GPIO_NR(1, 17), 503 { IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) }, 504 3 505 }, 506 { 507 { IOMUX_PADS(PAD_SD1_CLK__GPIO1_IO20) }, 508 IMX_GPIO_NR(1, 20), 509 { 0, 0 }, 510 0 511 }, 512 }; 513 514 struct dio_cfg gw53xx_dio[] = { 515 { 516 { IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) }, 517 IMX_GPIO_NR(1, 16), 518 { 0, 0 }, 519 0 520 }, 521 { 522 { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) }, 523 IMX_GPIO_NR(1, 19), 524 { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) }, 525 2 526 }, 527 { 528 { IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) }, 529 IMX_GPIO_NR(1, 17), 530 { IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) }, 531 3 532 }, 533 { 534 {IOMUX_PADS(PAD_SD1_CLK__GPIO1_IO20) }, 535 IMX_GPIO_NR(1, 20), 536 { 0, 0 }, 537 0 538 }, 539 }; 540 541 struct dio_cfg gw54xx_dio[] = { 542 { 543 { IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09) }, 544 IMX_GPIO_NR(1, 9), 545 { IOMUX_PADS(PAD_GPIO_9__PWM1_OUT) }, 546 1 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_SD4_DAT1__GPIO2_IO09) }, 556 IMX_GPIO_NR(2, 9), 557 { IOMUX_PADS(PAD_SD4_DAT1__PWM3_OUT) }, 558 3 559 }, 560 { 561 { IOMUX_PADS(PAD_SD4_DAT2__GPIO2_IO10) }, 562 IMX_GPIO_NR(2, 10), 563 { IOMUX_PADS(PAD_SD4_DAT2__PWM4_OUT) }, 564 4 565 }, 566 }; 567 568 struct dio_cfg gw551x_dio[] = { 569 { 570 { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) }, 571 IMX_GPIO_NR(1, 19), 572 { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) }, 573 2 574 }, 575 { 576 { IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) }, 577 IMX_GPIO_NR(1, 17), 578 { IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) }, 579 3 580 }, 581 }; 582 583 struct dio_cfg gw552x_dio[] = { 584 { 585 { IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) }, 586 IMX_GPIO_NR(1, 16), 587 { 0, 0 }, 588 0 589 }, 590 { 591 { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) }, 592 IMX_GPIO_NR(1, 19), 593 { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) }, 594 2 595 }, 596 { 597 { IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) }, 598 IMX_GPIO_NR(1, 17), 599 { IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) }, 600 3 601 }, 602 { 603 {IOMUX_PADS(PAD_SD1_CLK__GPIO1_IO20) }, 604 IMX_GPIO_NR(1, 20), 605 { 0, 0 }, 606 0 607 }, 608 { 609 {IOMUX_PADS(PAD_CSI0_PIXCLK__GPIO5_IO18) }, 610 IMX_GPIO_NR(5, 18), 611 { 0, 0 }, 612 0 613 }, 614 { 615 {IOMUX_PADS(PAD_CSI0_DATA_EN__GPIO5_IO20) }, 616 IMX_GPIO_NR(5, 20), 617 { 0, 0 }, 618 0 619 }, 620 { 621 {IOMUX_PADS(PAD_CSI0_VSYNC__GPIO5_IO21) }, 622 IMX_GPIO_NR(5, 21), 623 { 0, 0 }, 624 0 625 }, 626 { 627 {IOMUX_PADS(PAD_CSI0_DAT4__GPIO5_IO22) }, 628 IMX_GPIO_NR(5, 22), 629 { 0, 0 }, 630 0 631 }, 632 { 633 {IOMUX_PADS(PAD_CSI0_DAT5__GPIO5_IO23) }, 634 IMX_GPIO_NR(5, 23), 635 { 0, 0 }, 636 0 637 }, 638 { 639 {IOMUX_PADS(PAD_CSI0_DAT7__GPIO5_IO25) }, 640 IMX_GPIO_NR(5, 25), 641 { 0, 0 }, 642 0 643 }, 644 }; 645 646 struct dio_cfg gw553x_dio[] = { 647 { 648 { IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) }, 649 IMX_GPIO_NR(1, 16), 650 { 0, 0 }, 651 0 652 }, 653 { 654 { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) }, 655 IMX_GPIO_NR(1, 19), 656 { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) }, 657 2 658 }, 659 { 660 { IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) }, 661 IMX_GPIO_NR(1, 17), 662 { IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) }, 663 3 664 }, 665 { 666 { IOMUX_PADS(PAD_SD1_CMD__GPIO1_IO18) }, 667 IMX_GPIO_NR(1, 18), 668 { IOMUX_PADS(PAD_SD1_CMD__PWM4_OUT) }, 669 4 670 }, 671 }; 672 673 struct dio_cfg gw560x_dio[] = { 674 { 675 { IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) }, 676 IMX_GPIO_NR(1, 16), 677 { 0, 0 }, 678 0 679 }, 680 { 681 { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) }, 682 IMX_GPIO_NR(1, 19), 683 { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) }, 684 2 685 }, 686 { 687 { IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) }, 688 IMX_GPIO_NR(1, 17), 689 { IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) }, 690 3 691 }, 692 { 693 {IOMUX_PADS(PAD_SD1_CLK__GPIO1_IO20) }, 694 IMX_GPIO_NR(1, 20), 695 { 0, 0 }, 696 0 697 }, 698 }; 699 700 struct dio_cfg gw5903_dio[] = { 701 }; 702 703 struct dio_cfg gw5904_dio[] = { 704 { 705 { IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) }, 706 IMX_GPIO_NR(1, 16), 707 { 0, 0 }, 708 0 709 }, 710 { 711 { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) }, 712 IMX_GPIO_NR(1, 19), 713 { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) }, 714 2 715 }, 716 { 717 { IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) }, 718 IMX_GPIO_NR(1, 17), 719 { IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) }, 720 3 721 }, 722 { 723 {IOMUX_PADS(PAD_SD1_CLK__GPIO1_IO20) }, 724 IMX_GPIO_NR(1, 20), 725 { 0, 0 }, 726 0 727 }, 728 { 729 {IOMUX_PADS(PAD_NANDF_D0__GPIO2_IO00) }, 730 IMX_GPIO_NR(2, 0), 731 { 0, 0 }, 732 0 733 }, 734 { 735 {IOMUX_PADS(PAD_NANDF_D1__GPIO2_IO01) }, 736 IMX_GPIO_NR(2, 1), 737 { 0, 0 }, 738 0 739 }, 740 { 741 {IOMUX_PADS(PAD_NANDF_D2__GPIO2_IO02) }, 742 IMX_GPIO_NR(2, 2), 743 { 0, 0 }, 744 0 745 }, 746 { 747 {IOMUX_PADS(PAD_NANDF_D3__GPIO2_IO03) }, 748 IMX_GPIO_NR(2, 3), 749 { 0, 0 }, 750 0 751 }, 752 { 753 {IOMUX_PADS(PAD_NANDF_D4__GPIO2_IO04) }, 754 IMX_GPIO_NR(2, 4), 755 { 0, 0 }, 756 0 757 }, 758 { 759 {IOMUX_PADS(PAD_NANDF_D5__GPIO2_IO05) }, 760 IMX_GPIO_NR(2, 5), 761 { 0, 0 }, 762 0 763 }, 764 { 765 {IOMUX_PADS(PAD_NANDF_D6__GPIO2_IO06) }, 766 IMX_GPIO_NR(2, 6), 767 { 0, 0 }, 768 0 769 }, 770 { 771 {IOMUX_PADS(PAD_NANDF_D7__GPIO2_IO07) }, 772 IMX_GPIO_NR(2, 7), 773 { 0, 0 }, 774 0 775 }, 776 }; 777 778 /* 779 * Board Specific GPIO 780 */ 781 struct ventana gpio_cfg[GW_UNKNOWN] = { 782 /* GW5400proto */ 783 { 784 .gpio_pads = gw54xx_gpio_pads, 785 .num_pads = ARRAY_SIZE(gw54xx_gpio_pads)/2, 786 .dio_cfg = gw54xx_dio, 787 .dio_num = ARRAY_SIZE(gw54xx_dio), 788 .leds = { 789 IMX_GPIO_NR(4, 6), 790 IMX_GPIO_NR(4, 10), 791 IMX_GPIO_NR(4, 15), 792 }, 793 .pcie_rst = IMX_GPIO_NR(1, 29), 794 .mezz_pwren = IMX_GPIO_NR(4, 7), 795 .mezz_irq = IMX_GPIO_NR(4, 9), 796 .rs485en = IMX_GPIO_NR(3, 24), 797 .dioi2c_en = IMX_GPIO_NR(4, 5), 798 .pcie_sson = IMX_GPIO_NR(1, 20), 799 .otgpwr_en = IMX_GPIO_NR(3, 22), 800 .mmc_cd = IMX_GPIO_NR(7, 0), 801 }, 802 803 /* GW51xx */ 804 { 805 .gpio_pads = gw51xx_gpio_pads, 806 .num_pads = ARRAY_SIZE(gw51xx_gpio_pads)/2, 807 .dio_cfg = gw51xx_dio, 808 .dio_num = ARRAY_SIZE(gw51xx_dio), 809 .leds = { 810 IMX_GPIO_NR(4, 6), 811 IMX_GPIO_NR(4, 10), 812 }, 813 .pcie_rst = IMX_GPIO_NR(1, 0), 814 .mezz_pwren = IMX_GPIO_NR(2, 19), 815 .mezz_irq = IMX_GPIO_NR(2, 18), 816 .gps_shdn = IMX_GPIO_NR(1, 2), 817 .vidin_en = IMX_GPIO_NR(5, 20), 818 .wdis = IMX_GPIO_NR(7, 12), 819 .otgpwr_en = IMX_GPIO_NR(3, 22), 820 }, 821 822 /* GW52xx */ 823 { 824 .gpio_pads = gw52xx_gpio_pads, 825 .num_pads = ARRAY_SIZE(gw52xx_gpio_pads)/2, 826 .dio_cfg = gw52xx_dio, 827 .dio_num = ARRAY_SIZE(gw52xx_dio), 828 .leds = { 829 IMX_GPIO_NR(4, 6), 830 IMX_GPIO_NR(4, 7), 831 IMX_GPIO_NR(4, 15), 832 }, 833 .pcie_rst = IMX_GPIO_NR(1, 29), 834 .mezz_pwren = IMX_GPIO_NR(2, 19), 835 .mezz_irq = IMX_GPIO_NR(2, 18), 836 .gps_shdn = IMX_GPIO_NR(1, 27), 837 .vidin_en = IMX_GPIO_NR(3, 31), 838 .usb_sel = IMX_GPIO_NR(1, 2), 839 .wdis = IMX_GPIO_NR(7, 12), 840 .msata_en = GP_MSATA_SEL, 841 .rs232_en = GP_RS232_EN, 842 .otgpwr_en = IMX_GPIO_NR(3, 22), 843 .vsel_pin = IMX_GPIO_NR(6, 14), 844 .mmc_cd = IMX_GPIO_NR(7, 0), 845 }, 846 847 /* GW53xx */ 848 { 849 .gpio_pads = gw53xx_gpio_pads, 850 .num_pads = ARRAY_SIZE(gw53xx_gpio_pads)/2, 851 .dio_cfg = gw53xx_dio, 852 .dio_num = ARRAY_SIZE(gw53xx_dio), 853 .leds = { 854 IMX_GPIO_NR(4, 6), 855 IMX_GPIO_NR(4, 7), 856 IMX_GPIO_NR(4, 15), 857 }, 858 .pcie_rst = IMX_GPIO_NR(1, 29), 859 .mezz_pwren = IMX_GPIO_NR(2, 19), 860 .mezz_irq = IMX_GPIO_NR(2, 18), 861 .gps_shdn = IMX_GPIO_NR(1, 27), 862 .vidin_en = IMX_GPIO_NR(3, 31), 863 .wdis = IMX_GPIO_NR(7, 12), 864 .msata_en = GP_MSATA_SEL, 865 .rs232_en = GP_RS232_EN, 866 .otgpwr_en = IMX_GPIO_NR(3, 22), 867 .vsel_pin = IMX_GPIO_NR(6, 14), 868 .mmc_cd = IMX_GPIO_NR(7, 0), 869 }, 870 871 /* GW54xx */ 872 { 873 .gpio_pads = gw54xx_gpio_pads, 874 .num_pads = ARRAY_SIZE(gw54xx_gpio_pads)/2, 875 .dio_cfg = gw54xx_dio, 876 .dio_num = ARRAY_SIZE(gw54xx_dio), 877 .leds = { 878 IMX_GPIO_NR(4, 6), 879 IMX_GPIO_NR(4, 7), 880 IMX_GPIO_NR(4, 15), 881 }, 882 .pcie_rst = IMX_GPIO_NR(1, 29), 883 .mezz_pwren = IMX_GPIO_NR(2, 19), 884 .mezz_irq = IMX_GPIO_NR(2, 18), 885 .rs485en = IMX_GPIO_NR(7, 1), 886 .vidin_en = IMX_GPIO_NR(3, 31), 887 .dioi2c_en = IMX_GPIO_NR(4, 5), 888 .pcie_sson = IMX_GPIO_NR(1, 20), 889 .wdis = IMX_GPIO_NR(5, 17), 890 .msata_en = GP_MSATA_SEL, 891 .rs232_en = GP_RS232_EN, 892 .otgpwr_en = IMX_GPIO_NR(3, 22), 893 .vsel_pin = IMX_GPIO_NR(6, 14), 894 .mmc_cd = IMX_GPIO_NR(7, 0), 895 }, 896 897 /* GW551x */ 898 { 899 .gpio_pads = gw551x_gpio_pads, 900 .num_pads = ARRAY_SIZE(gw551x_gpio_pads)/2, 901 .dio_cfg = gw551x_dio, 902 .dio_num = ARRAY_SIZE(gw551x_dio), 903 .leds = { 904 IMX_GPIO_NR(4, 7), 905 }, 906 .pcie_rst = IMX_GPIO_NR(1, 0), 907 .wdis = IMX_GPIO_NR(7, 12), 908 }, 909 910 /* GW552x */ 911 { 912 .gpio_pads = gw552x_gpio_pads, 913 .num_pads = ARRAY_SIZE(gw552x_gpio_pads)/2, 914 .dio_cfg = gw552x_dio, 915 .dio_num = ARRAY_SIZE(gw552x_dio), 916 .leds = { 917 IMX_GPIO_NR(4, 6), 918 IMX_GPIO_NR(4, 7), 919 IMX_GPIO_NR(4, 15), 920 }, 921 .pcie_rst = IMX_GPIO_NR(1, 29), 922 .usb_sel = IMX_GPIO_NR(1, 7), 923 .wdis = IMX_GPIO_NR(7, 12), 924 .msata_en = GP_MSATA_SEL, 925 }, 926 927 /* GW553x */ 928 { 929 .gpio_pads = gw553x_gpio_pads, 930 .num_pads = ARRAY_SIZE(gw553x_gpio_pads)/2, 931 .dio_cfg = gw553x_dio, 932 .dio_num = ARRAY_SIZE(gw553x_dio), 933 .leds = { 934 IMX_GPIO_NR(4, 10), 935 IMX_GPIO_NR(4, 11), 936 }, 937 .pcie_rst = IMX_GPIO_NR(1, 0), 938 .vidin_en = IMX_GPIO_NR(5, 20), 939 .wdis = IMX_GPIO_NR(7, 12), 940 .otgpwr_en = IMX_GPIO_NR(3, 22), 941 .vsel_pin = IMX_GPIO_NR(6, 14), 942 .mmc_cd = IMX_GPIO_NR(7, 0), 943 }, 944 945 /* GW560x */ 946 { 947 .gpio_pads = gw560x_gpio_pads, 948 .num_pads = ARRAY_SIZE(gw560x_gpio_pads)/2, 949 .dio_cfg = gw560x_dio, 950 .dio_num = ARRAY_SIZE(gw560x_dio), 951 .leds = { 952 IMX_GPIO_NR(4, 6), 953 IMX_GPIO_NR(4, 7), 954 IMX_GPIO_NR(4, 15), 955 }, 956 .pcie_rst = IMX_GPIO_NR(4, 31), 957 .mezz_pwren = IMX_GPIO_NR(2, 19), 958 .mezz_irq = IMX_GPIO_NR(2, 18), 959 .rs232_en = GP_RS232_EN, 960 .vidin_en = IMX_GPIO_NR(3, 31), 961 .wdis = IMX_GPIO_NR(7, 12), 962 .otgpwr_en = IMX_GPIO_NR(4, 15), 963 .mmc_cd = IMX_GPIO_NR(7, 0), 964 }, 965 966 /* GW5903 */ 967 { 968 .gpio_pads = gw5903_gpio_pads, 969 .num_pads = ARRAY_SIZE(gw5903_gpio_pads)/2, 970 .dio_cfg = gw5903_dio, 971 .dio_num = ARRAY_SIZE(gw5903_dio), 972 .leds = { 973 IMX_GPIO_NR(6, 14), 974 }, 975 .otgpwr_en = IMX_GPIO_NR(4, 15), 976 .mmc_cd = IMX_GPIO_NR(6, 11), 977 }, 978 979 /* GW5904 */ 980 { 981 .gpio_pads = gw5904_gpio_pads, 982 .num_pads = ARRAY_SIZE(gw5904_gpio_pads)/2, 983 .dio_cfg = gw5904_dio, 984 .dio_num = ARRAY_SIZE(gw5904_dio), 985 .leds = { 986 IMX_GPIO_NR(4, 6), 987 IMX_GPIO_NR(4, 7), 988 IMX_GPIO_NR(4, 15), 989 }, 990 .pcie_rst = IMX_GPIO_NR(1, 0), 991 .mezz_pwren = IMX_GPIO_NR(2, 19), 992 .mezz_irq = IMX_GPIO_NR(2, 18), 993 .otgpwr_en = IMX_GPIO_NR(3, 22), 994 }, 995 }; 996 997 void setup_iomux_gpio(int board, struct ventana_board_info *info) 998 { 999 int i; 1000 1001 if (board >= GW_UNKNOWN) 1002 return; 1003 1004 /* board specific iomux */ 1005 imx_iomux_v3_setup_multiple_pads(gpio_cfg[board].gpio_pads, 1006 gpio_cfg[board].num_pads); 1007 1008 /* RS232_EN# */ 1009 if (gpio_cfg[board].rs232_en) { 1010 gpio_request(gpio_cfg[board].rs232_en, "rs232_en#"); 1011 gpio_direction_output(gpio_cfg[board].rs232_en, 0); 1012 } 1013 1014 /* GW522x Uses GPIO3_IO23 for PCIE_RST# */ 1015 if (board == GW52xx && info->model[4] == '2') 1016 gpio_cfg[board].pcie_rst = IMX_GPIO_NR(3, 23); 1017 1018 /* assert PCI_RST# */ 1019 gpio_request(gpio_cfg[board].pcie_rst, "pci_rst#"); 1020 gpio_direction_output(gpio_cfg[board].pcie_rst, 0); 1021 1022 /* turn off (active-high) user LED's */ 1023 for (i = 0; i < ARRAY_SIZE(gpio_cfg[board].leds); i++) { 1024 char name[16]; 1025 if (gpio_cfg[board].leds[i]) { 1026 sprintf(name, "led_user%d", i); 1027 gpio_request(gpio_cfg[board].leds[i], name); 1028 gpio_direction_output(gpio_cfg[board].leds[i], 1); 1029 } 1030 } 1031 1032 /* MSATA Enable - default to PCI */ 1033 if (gpio_cfg[board].msata_en) { 1034 gpio_request(gpio_cfg[board].msata_en, "msata_en"); 1035 gpio_direction_output(gpio_cfg[board].msata_en, 0); 1036 } 1037 1038 /* Expansion Mezzanine IO */ 1039 if (gpio_cfg[board].mezz_pwren) { 1040 gpio_request(gpio_cfg[board].mezz_pwren, "mezz_pwr"); 1041 gpio_direction_output(gpio_cfg[board].mezz_pwren, 0); 1042 } 1043 if (gpio_cfg[board].mezz_irq) { 1044 gpio_request(gpio_cfg[board].mezz_irq, "mezz_irq#"); 1045 gpio_direction_input(gpio_cfg[board].mezz_irq); 1046 } 1047 1048 /* RS485 Transmit Enable */ 1049 if (gpio_cfg[board].rs485en) { 1050 gpio_request(gpio_cfg[board].rs485en, "rs485_en"); 1051 gpio_direction_output(gpio_cfg[board].rs485en, 0); 1052 } 1053 1054 /* GPS_SHDN */ 1055 if (gpio_cfg[board].gps_shdn) { 1056 gpio_request(gpio_cfg[board].gps_shdn, "gps_shdn"); 1057 gpio_direction_output(gpio_cfg[board].gps_shdn, 1); 1058 } 1059 1060 /* Analog video codec power enable */ 1061 if (gpio_cfg[board].vidin_en) { 1062 gpio_request(gpio_cfg[board].vidin_en, "anavidin_en"); 1063 gpio_direction_output(gpio_cfg[board].vidin_en, 1); 1064 } 1065 1066 /* DIOI2C_DIS# */ 1067 if (gpio_cfg[board].dioi2c_en) { 1068 gpio_request(gpio_cfg[board].dioi2c_en, "dioi2c_dis#"); 1069 gpio_direction_output(gpio_cfg[board].dioi2c_en, 0); 1070 } 1071 1072 /* PCICK_SSON: disable spread-spectrum clock */ 1073 if (gpio_cfg[board].pcie_sson) { 1074 gpio_request(gpio_cfg[board].pcie_sson, "pci_sson"); 1075 gpio_direction_output(gpio_cfg[board].pcie_sson, 0); 1076 } 1077 1078 /* USBOTG mux routing */ 1079 if (gpio_cfg[board].usb_sel) { 1080 gpio_request(gpio_cfg[board].usb_sel, "usb_pcisel"); 1081 gpio_direction_output(gpio_cfg[board].usb_sel, 0); 1082 } 1083 1084 /* PCISKT_WDIS# (Wireless disable GPIO to miniPCIe sockets) */ 1085 if (gpio_cfg[board].wdis) { 1086 gpio_request(gpio_cfg[board].wdis, "wlan_dis"); 1087 gpio_direction_output(gpio_cfg[board].wdis, 1); 1088 } 1089 1090 /* OTG power off */ 1091 if (gpio_cfg[board].otgpwr_en) { 1092 gpio_request(gpio_cfg[board].otgpwr_en, "usbotg_pwr"); 1093 gpio_direction_output(gpio_cfg[board].otgpwr_en, 0); 1094 } 1095 1096 /* sense vselect pin to see if we support uhs-i */ 1097 if (gpio_cfg[board].vsel_pin) { 1098 gpio_request(gpio_cfg[board].vsel_pin, "sd3_vselect"); 1099 gpio_direction_input(gpio_cfg[board].vsel_pin); 1100 gpio_cfg[board].usd_vsel = !gpio_get_value(gpio_cfg[board].vsel_pin); 1101 } 1102 1103 /* microSD CD */ 1104 if (gpio_cfg[board].mmc_cd) { 1105 gpio_request(gpio_cfg[board].mmc_cd, "sd_cd"); 1106 gpio_direction_input(gpio_cfg[board].mmc_cd); 1107 } 1108 1109 /* Anything else board specific */ 1110 switch(board) { 1111 case GW560x: 1112 gpio_request(IMX_GPIO_NR(4, 26), "12p0_en"); 1113 gpio_direction_output(IMX_GPIO_NR(4, 26), 1); 1114 break; 1115 case GW5903: 1116 gpio_request(IMX_GPIO_NR(3, 31) , "usbh1-ehci_pwr"); 1117 gpio_direction_output(IMX_GPIO_NR(3, 31), 1); 1118 gpio_request(IMX_GPIO_NR(4, 15) , "usbh2-otg_pwr"); 1119 gpio_direction_output(IMX_GPIO_NR(4, 15), 1); 1120 gpio_request(IMX_GPIO_NR(4, 7) , "usbdpc_pwr"); 1121 gpio_direction_output(IMX_GPIO_NR(4, 15), 1); 1122 gpio_request(IMX_GPIO_NR(1, 25) , "rgmii_en"); 1123 gpio_direction_output(IMX_GPIO_NR(1, 25), 1); 1124 gpio_request(IMX_GPIO_NR(4, 6) , "touch_irq#"); 1125 gpio_direction_input(IMX_GPIO_NR(4, 6)); 1126 gpio_request(IMX_GPIO_NR(4, 8) , "touch_rst"); 1127 gpio_direction_output(IMX_GPIO_NR(4, 8), 1); 1128 gpio_request(IMX_GPIO_NR(1, 7) , "bklt_12ven"); 1129 gpio_direction_output(IMX_GPIO_NR(1, 7), 1); 1130 break; 1131 case GW5904: 1132 gpio_request(IMX_GPIO_NR(5, 11), "skt1_wdis#"); 1133 gpio_direction_output(IMX_GPIO_NR(5, 11), 1); 1134 gpio_request(IMX_GPIO_NR(5, 12), "skt1_rst#"); 1135 gpio_direction_output(IMX_GPIO_NR(5, 12), 1); 1136 gpio_request(IMX_GPIO_NR(5, 13), "skt2_wdis#"); 1137 gpio_direction_output(IMX_GPIO_NR(5, 13), 1); 1138 gpio_request(IMX_GPIO_NR(1, 15), "m2_off#"); 1139 gpio_direction_output(IMX_GPIO_NR(1, 15), 1); 1140 gpio_request(IMX_GPIO_NR(1, 14), "m2_wdis#"); 1141 gpio_direction_output(IMX_GPIO_NR(1, 14), 1); 1142 gpio_request(IMX_GPIO_NR(1, 13), "m2_rst#"); 1143 gpio_direction_output(IMX_GPIO_NR(1, 13), 1); 1144 break; 1145 } 1146 } 1147 1148 /* setup GPIO pinmux and default configuration per baseboard and env */ 1149 void setup_board_gpio(int board, struct ventana_board_info *info) 1150 { 1151 const char *s; 1152 char arg[10]; 1153 size_t len; 1154 int i; 1155 int quiet = simple_strtol(env_get("quiet"), NULL, 10); 1156 1157 if (board >= GW_UNKNOWN) 1158 return; 1159 1160 /* RS232_EN# */ 1161 if (gpio_cfg[board].rs232_en) { 1162 gpio_direction_output(gpio_cfg[board].rs232_en, 1163 (hwconfig("rs232")) ? 0 : 1); 1164 } 1165 1166 /* MSATA Enable */ 1167 if (gpio_cfg[board].msata_en && is_cpu_type(MXC_CPU_MX6Q)) { 1168 gpio_direction_output(GP_MSATA_SEL, 1169 (hwconfig("msata")) ? 1 : 0); 1170 } 1171 1172 /* USBOTG Select (PCISKT or FrontPanel) */ 1173 if (gpio_cfg[board].usb_sel) { 1174 gpio_direction_output(gpio_cfg[board].usb_sel, 1175 (hwconfig("usb_pcisel")) ? 1 : 0); 1176 } 1177 1178 /* 1179 * Configure DIO pinmux/padctl registers 1180 * see IMX6DQRM/IMX6SDLRM IOMUXC_SW_PAD_CTL_PAD_* register definitions 1181 */ 1182 for (i = 0; i < gpio_cfg[board].dio_num; i++) { 1183 struct dio_cfg *cfg = &gpio_cfg[board].dio_cfg[i]; 1184 iomux_v3_cfg_t ctrl = DIO_PAD_CFG; 1185 unsigned cputype = is_cpu_type(MXC_CPU_MX6Q) ? 0 : 1; 1186 1187 if (!cfg->gpio_padmux[0] && !cfg->gpio_padmux[1]) 1188 continue; 1189 sprintf(arg, "dio%d", i); 1190 if (!hwconfig(arg)) 1191 continue; 1192 s = hwconfig_subarg(arg, "padctrl", &len); 1193 if (s) { 1194 ctrl = MUX_PAD_CTRL(simple_strtoul(s, NULL, 16) 1195 & 0x1ffff) | MUX_MODE_SION; 1196 } 1197 if (hwconfig_subarg_cmp(arg, "mode", "gpio")) { 1198 if (!quiet) { 1199 printf("DIO%d: GPIO%d_IO%02d (gpio-%d)\n", i, 1200 (cfg->gpio_param/32)+1, 1201 cfg->gpio_param%32, 1202 cfg->gpio_param); 1203 } 1204 imx_iomux_v3_setup_pad(cfg->gpio_padmux[cputype] | 1205 ctrl); 1206 gpio_requestf(cfg->gpio_param, "dio%d", i); 1207 gpio_direction_input(cfg->gpio_param); 1208 } else if (hwconfig_subarg_cmp(arg, "mode", "pwm") && 1209 cfg->pwm_padmux) { 1210 if (!cfg->pwm_param) { 1211 printf("DIO%d: Error: pwm config invalid\n", 1212 i); 1213 continue; 1214 } 1215 if (!quiet) 1216 printf("DIO%d: pwm%d\n", i, cfg->pwm_param); 1217 imx_iomux_v3_setup_pad(cfg->pwm_padmux[cputype] | 1218 MUX_PAD_CTRL(ctrl)); 1219 } 1220 } 1221 1222 if (!quiet) { 1223 if (gpio_cfg[board].msata_en && is_cpu_type(MXC_CPU_MX6Q)) { 1224 printf("MSATA: %s\n", (hwconfig("msata") ? 1225 "enabled" : "disabled")); 1226 } 1227 if (gpio_cfg[board].rs232_en) { 1228 printf("RS232: %s\n", (hwconfig("rs232")) ? 1229 "enabled" : "disabled"); 1230 } 1231 } 1232 } 1233 1234 /* setup board specific PMIC */ 1235 void setup_pmic(void) 1236 { 1237 struct pmic *p; 1238 struct ventana_board_info ventana_info; 1239 int board = read_eeprom(CONFIG_I2C_GSC, &ventana_info); 1240 const int i2c_pmic = 1; 1241 u32 reg; 1242 1243 i2c_set_bus_num(i2c_pmic); 1244 1245 /* configure PFUZE100 PMIC */ 1246 if (!i2c_probe(CONFIG_POWER_PFUZE100_I2C_ADDR)) { 1247 debug("probed PFUZE100@0x%x\n", CONFIG_POWER_PFUZE100_I2C_ADDR); 1248 power_pfuze100_init(i2c_pmic); 1249 p = pmic_get("PFUZE100"); 1250 if (p && !pmic_probe(p)) { 1251 pmic_reg_read(p, PFUZE100_DEVICEID, ®); 1252 printf("PMIC: PFUZE100 ID=0x%02x\n", reg); 1253 1254 /* Set VGEN1 to 1.5V and enable */ 1255 pmic_reg_read(p, PFUZE100_VGEN1VOL, ®); 1256 reg &= ~(LDO_VOL_MASK); 1257 reg |= (LDOA_1_50V | LDO_EN); 1258 pmic_reg_write(p, PFUZE100_VGEN1VOL, reg); 1259 1260 /* Set SWBST to 5.0V and enable */ 1261 pmic_reg_read(p, PFUZE100_SWBSTCON1, ®); 1262 reg &= ~(SWBST_MODE_MASK | SWBST_VOL_MASK); 1263 reg |= (SWBST_5_00V | (SWBST_MODE_AUTO << SWBST_MODE_SHIFT)); 1264 pmic_reg_write(p, PFUZE100_SWBSTCON1, reg); 1265 } 1266 } 1267 1268 /* configure LTC3676 PMIC */ 1269 else if (!i2c_probe(CONFIG_POWER_LTC3676_I2C_ADDR)) { 1270 debug("probed LTC3676@0x%x\n", CONFIG_POWER_LTC3676_I2C_ADDR); 1271 power_ltc3676_init(i2c_pmic); 1272 p = pmic_get("LTC3676_PMIC"); 1273 if (!p || pmic_probe(p)) 1274 return; 1275 puts("PMIC: LTC3676\n"); 1276 /* 1277 * set board-specific scalar for max CPU frequency 1278 * per CPU based on the LDO enabled Operating Ranges 1279 * defined in the respective IMX6DQ and IMX6SDL 1280 * datasheets. The voltage resulting from the R1/R2 1281 * feedback inputs on Ventana is 1308mV. Note that this 1282 * is a bit shy of the Vmin of 1350mV in the datasheet 1283 * for LDO enabled mode but is as high as we can go. 1284 */ 1285 switch (board) { 1286 case GW560x: 1287 /* mask PGOOD during SW3 transition */ 1288 pmic_reg_write(p, LTC3676_DVB3B, 1289 0x1f | LTC3676_PGOOD_MASK); 1290 /* set SW3 (VDD_ARM) */ 1291 pmic_reg_write(p, LTC3676_DVB3A, 0x1f); 1292 break; 1293 case GW5903: 1294 /* mask PGOOD during SW1 transition */ 1295 pmic_reg_write(p, LTC3676_DVB3B, 1296 0x1f | LTC3676_PGOOD_MASK); 1297 /* set SW3 (VDD_ARM) */ 1298 pmic_reg_write(p, LTC3676_DVB3A, 0x1f); 1299 1300 /* mask PGOOD during SW4 transition */ 1301 pmic_reg_write(p, LTC3676_DVB4B, 1302 0x1f | LTC3676_PGOOD_MASK); 1303 /* set SW4 (VDD_SOC) */ 1304 pmic_reg_write(p, LTC3676_DVB4A, 0x1f); 1305 break; 1306 default: 1307 /* mask PGOOD during SW1 transition */ 1308 pmic_reg_write(p, LTC3676_DVB1B, 1309 0x1f | LTC3676_PGOOD_MASK); 1310 /* set SW1 (VDD_SOC) */ 1311 pmic_reg_write(p, LTC3676_DVB1A, 0x1f); 1312 1313 /* mask PGOOD during SW3 transition */ 1314 pmic_reg_write(p, LTC3676_DVB3B, 1315 0x1f | LTC3676_PGOOD_MASK); 1316 /* set SW3 (VDD_ARM) */ 1317 pmic_reg_write(p, LTC3676_DVB3A, 0x1f); 1318 } 1319 } 1320 } 1321 1322 #ifdef CONFIG_FSL_ESDHC 1323 static struct fsl_esdhc_cfg usdhc_cfg[2]; 1324 1325 int board_mmc_init(bd_t *bis) 1326 { 1327 struct ventana_board_info ventana_info; 1328 int board_type = read_eeprom(CONFIG_I2C_GSC, &ventana_info); 1329 int ret; 1330 1331 switch (board_type) { 1332 case GW52xx: 1333 case GW53xx: 1334 case GW54xx: 1335 case GW553x: 1336 /* usdhc3: 4bit microSD */ 1337 SETUP_IOMUX_PADS(usdhc3_pads); 1338 usdhc_cfg[0].esdhc_base = USDHC3_BASE_ADDR; 1339 usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK); 1340 usdhc_cfg[0].max_bus_width = 4; 1341 return fsl_esdhc_initialize(bis, &usdhc_cfg[0]); 1342 case GW560x: 1343 /* usdhc2: 8-bit eMMC */ 1344 SETUP_IOMUX_PADS(gw560x_emmc_sd2_pads); 1345 usdhc_cfg[0].esdhc_base = USDHC2_BASE_ADDR; 1346 usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC2_CLK); 1347 usdhc_cfg[0].max_bus_width = 8; 1348 ret = fsl_esdhc_initialize(bis, &usdhc_cfg[0]); 1349 if (ret) 1350 return ret; 1351 /* usdhc3: 4-bit microSD */ 1352 SETUP_IOMUX_PADS(usdhc3_pads); 1353 usdhc_cfg[1].esdhc_base = USDHC3_BASE_ADDR; 1354 usdhc_cfg[1].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK); 1355 usdhc_cfg[1].max_bus_width = 4; 1356 return fsl_esdhc_initialize(bis, &usdhc_cfg[1]); 1357 case GW5903: 1358 /* usdhc3: 8-bit eMMC */ 1359 SETUP_IOMUX_PADS(gw5904_emmc_pads); 1360 usdhc_cfg[0].esdhc_base = USDHC3_BASE_ADDR; 1361 usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK); 1362 usdhc_cfg[0].max_bus_width = 8; 1363 ret = fsl_esdhc_initialize(bis, &usdhc_cfg[0]); 1364 if (ret) 1365 return ret; 1366 /* usdhc2: 4-bit microSD */ 1367 SETUP_IOMUX_PADS(gw5904_mmc_pads); 1368 usdhc_cfg[1].esdhc_base = USDHC2_BASE_ADDR; 1369 usdhc_cfg[1].sdhc_clk = mxc_get_clock(MXC_ESDHC2_CLK); 1370 usdhc_cfg[1].max_bus_width = 4; 1371 return fsl_esdhc_initialize(bis, &usdhc_cfg[1]); 1372 case GW5904: 1373 /* usdhc3: 8bit eMMC */ 1374 SETUP_IOMUX_PADS(gw5904_emmc_pads); 1375 usdhc_cfg[0].esdhc_base = USDHC3_BASE_ADDR; 1376 usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK); 1377 usdhc_cfg[0].max_bus_width = 8; 1378 return fsl_esdhc_initialize(bis, &usdhc_cfg[0]); 1379 default: 1380 /* doesn't have MMC */ 1381 return -1; 1382 } 1383 } 1384 1385 int board_mmc_getcd(struct mmc *mmc) 1386 { 1387 struct ventana_board_info ventana_info; 1388 struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv; 1389 int board = read_eeprom(CONFIG_I2C_GSC, &ventana_info); 1390 int gpio = gpio_cfg[board].mmc_cd; 1391 1392 /* Card Detect */ 1393 switch (board) { 1394 case GW560x: 1395 /* emmc is always present */ 1396 if (cfg->esdhc_base == USDHC2_BASE_ADDR) 1397 return 1; 1398 break; 1399 case GW5903: 1400 case GW5904: 1401 /* emmc is always present */ 1402 if (cfg->esdhc_base == USDHC3_BASE_ADDR) 1403 return 1; 1404 break; 1405 } 1406 1407 if (gpio) { 1408 debug("%s: gpio%d=%d\n", __func__, gpio, gpio_get_value(gpio)); 1409 return !gpio_get_value(gpio); 1410 } 1411 1412 return -1; 1413 } 1414 1415 #endif /* CONFIG_FSL_ESDHC */ 1416