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