1e56c5791STim Harvey /* 2e56c5791STim Harvey * Copyright (C) 2013 Gateworks Corporation 3e56c5791STim Harvey * 4e56c5791STim Harvey * Author: Tim Harvey <tharvey@gateworks.com> 5e56c5791STim Harvey * 6e56c5791STim Harvey * SPDX-License-Identifier: GPL-2.0+ 7e56c5791STim Harvey */ 8e56c5791STim Harvey 9e56c5791STim Harvey #include <asm/arch/mx6-pins.h> 10e56c5791STim Harvey #include <asm/arch/sys_proto.h> 11e56c5791STim Harvey #include <asm/gpio.h> 12e56c5791STim Harvey #include <asm/imx-common/mxc_i2c.h> 13e56c5791STim Harvey #include <hwconfig.h> 14e56c5791STim Harvey #include <power/pmic.h> 15e56c5791STim Harvey #include <power/ltc3676_pmic.h> 16e56c5791STim Harvey #include <power/pfuze100_pmic.h> 17e56c5791STim Harvey 18e56c5791STim Harvey #include "common.h" 19e56c5791STim Harvey 20e56c5791STim Harvey /* UART1: Function varies per baseboard */ 21e56c5791STim Harvey static iomux_v3_cfg_t const uart1_pads[] = { 22e56c5791STim Harvey IOMUX_PADS(PAD_SD3_DAT6__UART1_RX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL)), 23e56c5791STim Harvey IOMUX_PADS(PAD_SD3_DAT7__UART1_TX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL)), 24e56c5791STim Harvey }; 25e56c5791STim Harvey 26e56c5791STim Harvey /* UART2: Serial Console */ 27e56c5791STim Harvey static iomux_v3_cfg_t const uart2_pads[] = { 28e56c5791STim Harvey IOMUX_PADS(PAD_SD4_DAT7__UART2_TX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL)), 29e56c5791STim Harvey IOMUX_PADS(PAD_SD4_DAT4__UART2_RX_DATA | MUX_PAD_CTRL(UART_PAD_CTRL)), 30e56c5791STim Harvey }; 31e56c5791STim Harvey 32e56c5791STim Harvey void setup_iomux_uart(void) 33e56c5791STim Harvey { 34e56c5791STim Harvey SETUP_IOMUX_PADS(uart1_pads); 35e56c5791STim Harvey SETUP_IOMUX_PADS(uart2_pads); 36e56c5791STim Harvey } 37e56c5791STim Harvey 38e56c5791STim Harvey /* I2C1: GSC */ 39e56c5791STim Harvey static struct i2c_pads_info mx6q_i2c_pad_info0 = { 40e56c5791STim Harvey .scl = { 41e56c5791STim Harvey .i2c_mode = MX6Q_PAD_EIM_D21__I2C1_SCL | PC, 42e56c5791STim Harvey .gpio_mode = MX6Q_PAD_EIM_D21__GPIO3_IO21 | PC, 43e56c5791STim Harvey .gp = IMX_GPIO_NR(3, 21) 44e56c5791STim Harvey }, 45e56c5791STim Harvey .sda = { 46e56c5791STim Harvey .i2c_mode = MX6Q_PAD_EIM_D28__I2C1_SDA | PC, 47e56c5791STim Harvey .gpio_mode = MX6Q_PAD_EIM_D28__GPIO3_IO28 | PC, 48e56c5791STim Harvey .gp = IMX_GPIO_NR(3, 28) 49e56c5791STim Harvey } 50e56c5791STim Harvey }; 51e56c5791STim Harvey static struct i2c_pads_info mx6dl_i2c_pad_info0 = { 52e56c5791STim Harvey .scl = { 53e56c5791STim Harvey .i2c_mode = MX6DL_PAD_EIM_D21__I2C1_SCL | PC, 54e56c5791STim Harvey .gpio_mode = MX6DL_PAD_EIM_D21__GPIO3_IO21 | PC, 55e56c5791STim Harvey .gp = IMX_GPIO_NR(3, 21) 56e56c5791STim Harvey }, 57e56c5791STim Harvey .sda = { 58e56c5791STim Harvey .i2c_mode = MX6DL_PAD_EIM_D28__I2C1_SDA | PC, 59e56c5791STim Harvey .gpio_mode = MX6DL_PAD_EIM_D28__GPIO3_IO28 | PC, 60e56c5791STim Harvey .gp = IMX_GPIO_NR(3, 28) 61e56c5791STim Harvey } 62e56c5791STim Harvey }; 63e56c5791STim Harvey 64e56c5791STim Harvey /* I2C2: PMIC/PCIe Switch/PCIe Clock/Mezz */ 65e56c5791STim Harvey static struct i2c_pads_info mx6q_i2c_pad_info1 = { 66e56c5791STim Harvey .scl = { 67e56c5791STim Harvey .i2c_mode = MX6Q_PAD_KEY_COL3__I2C2_SCL | PC, 68e56c5791STim Harvey .gpio_mode = MX6Q_PAD_KEY_COL3__GPIO4_IO12 | PC, 69e56c5791STim Harvey .gp = IMX_GPIO_NR(4, 12) 70e56c5791STim Harvey }, 71e56c5791STim Harvey .sda = { 72e56c5791STim Harvey .i2c_mode = MX6Q_PAD_KEY_ROW3__I2C2_SDA | PC, 73e56c5791STim Harvey .gpio_mode = MX6Q_PAD_KEY_ROW3__GPIO4_IO13 | PC, 74e56c5791STim Harvey .gp = IMX_GPIO_NR(4, 13) 75e56c5791STim Harvey } 76e56c5791STim Harvey }; 77e56c5791STim Harvey static struct i2c_pads_info mx6dl_i2c_pad_info1 = { 78e56c5791STim Harvey .scl = { 79e56c5791STim Harvey .i2c_mode = MX6DL_PAD_KEY_COL3__I2C2_SCL | PC, 80e56c5791STim Harvey .gpio_mode = MX6DL_PAD_KEY_COL3__GPIO4_IO12 | PC, 81e56c5791STim Harvey .gp = IMX_GPIO_NR(4, 12) 82e56c5791STim Harvey }, 83e56c5791STim Harvey .sda = { 84e56c5791STim Harvey .i2c_mode = MX6DL_PAD_KEY_ROW3__I2C2_SDA | PC, 85e56c5791STim Harvey .gpio_mode = MX6DL_PAD_KEY_ROW3__GPIO4_IO13 | PC, 86e56c5791STim Harvey .gp = IMX_GPIO_NR(4, 13) 87e56c5791STim Harvey } 88e56c5791STim Harvey }; 89e56c5791STim Harvey 90e56c5791STim Harvey /* I2C3: Misc/Expansion */ 91e56c5791STim Harvey static struct i2c_pads_info mx6q_i2c_pad_info2 = { 92e56c5791STim Harvey .scl = { 93e56c5791STim Harvey .i2c_mode = MX6Q_PAD_GPIO_3__I2C3_SCL | PC, 94e56c5791STim Harvey .gpio_mode = MX6Q_PAD_GPIO_3__GPIO1_IO03 | PC, 95e56c5791STim Harvey .gp = IMX_GPIO_NR(1, 3) 96e56c5791STim Harvey }, 97e56c5791STim Harvey .sda = { 98e56c5791STim Harvey .i2c_mode = MX6Q_PAD_GPIO_6__I2C3_SDA | PC, 99e56c5791STim Harvey .gpio_mode = MX6Q_PAD_GPIO_6__GPIO1_IO06 | PC, 100e56c5791STim Harvey .gp = IMX_GPIO_NR(1, 6) 101e56c5791STim Harvey } 102e56c5791STim Harvey }; 103e56c5791STim Harvey static struct i2c_pads_info mx6dl_i2c_pad_info2 = { 104e56c5791STim Harvey .scl = { 105e56c5791STim Harvey .i2c_mode = MX6DL_PAD_GPIO_3__I2C3_SCL | PC, 106e56c5791STim Harvey .gpio_mode = MX6DL_PAD_GPIO_3__GPIO1_IO03 | PC, 107e56c5791STim Harvey .gp = IMX_GPIO_NR(1, 3) 108e56c5791STim Harvey }, 109e56c5791STim Harvey .sda = { 110e56c5791STim Harvey .i2c_mode = MX6DL_PAD_GPIO_6__I2C3_SDA | PC, 111e56c5791STim Harvey .gpio_mode = MX6DL_PAD_GPIO_6__GPIO1_IO06 | PC, 112e56c5791STim Harvey .gp = IMX_GPIO_NR(1, 6) 113e56c5791STim Harvey } 114e56c5791STim Harvey }; 115e56c5791STim Harvey 116e56c5791STim Harvey void setup_ventana_i2c(void) 117e56c5791STim Harvey { 118e56c5791STim Harvey if (is_cpu_type(MXC_CPU_MX6Q)) { 119e56c5791STim Harvey setup_i2c(0, CONFIG_SYS_I2C_SPEED, 0x7f, &mx6q_i2c_pad_info0); 120e56c5791STim Harvey setup_i2c(1, CONFIG_SYS_I2C_SPEED, 0x7f, &mx6q_i2c_pad_info1); 121e56c5791STim Harvey setup_i2c(2, CONFIG_SYS_I2C_SPEED, 0x7f, &mx6q_i2c_pad_info2); 122e56c5791STim Harvey } else { 123e56c5791STim Harvey setup_i2c(0, CONFIG_SYS_I2C_SPEED, 0x7f, &mx6dl_i2c_pad_info0); 124e56c5791STim Harvey setup_i2c(1, CONFIG_SYS_I2C_SPEED, 0x7f, &mx6dl_i2c_pad_info1); 125e56c5791STim Harvey setup_i2c(2, CONFIG_SYS_I2C_SPEED, 0x7f, &mx6dl_i2c_pad_info2); 126e56c5791STim Harvey } 127e56c5791STim Harvey } 128e56c5791STim Harvey 129e56c5791STim Harvey /* 130e56c5791STim Harvey * Baseboard specific GPIO 131e56c5791STim Harvey */ 132e56c5791STim Harvey 133e56c5791STim Harvey /* common to add baseboards */ 134e56c5791STim Harvey static iomux_v3_cfg_t const gw_gpio_pads[] = { 135e56c5791STim Harvey /* RS232_EN# */ 136e56c5791STim Harvey IOMUX_PADS(PAD_SD4_DAT3__GPIO2_IO11 | DIO_PAD_CFG), 137e56c5791STim Harvey }; 138e56c5791STim Harvey 139e56c5791STim Harvey /* prototype */ 140e56c5791STim Harvey static iomux_v3_cfg_t const gwproto_gpio_pads[] = { 141e56c5791STim Harvey /* PANLEDG# */ 142e56c5791STim Harvey IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG), 143e56c5791STim Harvey /* PANLEDR# */ 144e56c5791STim Harvey IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG), 145e56c5791STim Harvey /* LOCLED# */ 146e56c5791STim Harvey IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG), 147e56c5791STim Harvey /* RS485_EN */ 148e56c5791STim Harvey IOMUX_PADS(PAD_SD3_DAT4__GPIO7_IO01 | DIO_PAD_CFG), 149e56c5791STim Harvey /* IOEXP_PWREN# */ 150e56c5791STim Harvey IOMUX_PADS(PAD_EIM_A19__GPIO2_IO19 | DIO_PAD_CFG), 151e56c5791STim Harvey /* IOEXP_IRQ# */ 152e56c5791STim Harvey IOMUX_PADS(PAD_EIM_A20__GPIO2_IO18 | MUX_PAD_CTRL(IRQ_PAD_CTRL)), 153e56c5791STim Harvey /* VID_EN */ 154e56c5791STim Harvey IOMUX_PADS(PAD_EIM_D31__GPIO3_IO31 | DIO_PAD_CFG), 155e56c5791STim Harvey /* DIOI2C_DIS# */ 156e56c5791STim Harvey IOMUX_PADS(PAD_GPIO_19__GPIO4_IO05 | DIO_PAD_CFG), 157e56c5791STim Harvey /* PCICK_SSON */ 158e56c5791STim Harvey IOMUX_PADS(PAD_SD1_CLK__GPIO1_IO20 | DIO_PAD_CFG), 159e56c5791STim Harvey /* PCI_RST# */ 160e56c5791STim Harvey IOMUX_PADS(PAD_ENET_TXD1__GPIO1_IO29 | DIO_PAD_CFG), 161e56c5791STim Harvey }; 162e56c5791STim Harvey 163e56c5791STim Harvey static iomux_v3_cfg_t const gw51xx_gpio_pads[] = { 164e56c5791STim Harvey /* PANLEDG# */ 165e56c5791STim Harvey IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG), 166e56c5791STim Harvey /* PANLEDR# */ 167e56c5791STim Harvey IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG), 168e56c5791STim Harvey /* IOEXP_PWREN# */ 169e56c5791STim Harvey IOMUX_PADS(PAD_EIM_A19__GPIO2_IO19 | DIO_PAD_CFG), 170e56c5791STim Harvey /* IOEXP_IRQ# */ 171e56c5791STim Harvey IOMUX_PADS(PAD_EIM_A20__GPIO2_IO18 | MUX_PAD_CTRL(IRQ_PAD_CTRL)), 172e56c5791STim Harvey 173e56c5791STim Harvey /* GPS_SHDN */ 174e56c5791STim Harvey IOMUX_PADS(PAD_GPIO_2__GPIO1_IO02 | DIO_PAD_CFG), 175e56c5791STim Harvey /* VID_PWR */ 176e56c5791STim Harvey IOMUX_PADS(PAD_CSI0_DATA_EN__GPIO5_IO20 | DIO_PAD_CFG), 177e56c5791STim Harvey /* PCI_RST# */ 178e56c5791STim Harvey IOMUX_PADS(PAD_GPIO_0__GPIO1_IO00 | DIO_PAD_CFG), 179e56c5791STim Harvey /* PCIESKT_WDIS# */ 180e56c5791STim Harvey IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG), 181e56c5791STim Harvey }; 182e56c5791STim Harvey 183e56c5791STim Harvey static iomux_v3_cfg_t const gw52xx_gpio_pads[] = { 1845c55572fSTim Harvey /* MSATA_EN */ 1855c55572fSTim Harvey IOMUX_PADS(PAD_SD4_DAT0__GPIO2_IO08 | DIO_PAD_CFG), 186e56c5791STim Harvey /* PANLEDG# */ 187e56c5791STim Harvey IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG), 188e56c5791STim Harvey /* PANLEDR# */ 189e56c5791STim Harvey IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG), 190e56c5791STim Harvey /* IOEXP_PWREN# */ 191e56c5791STim Harvey IOMUX_PADS(PAD_EIM_A19__GPIO2_IO19 | DIO_PAD_CFG), 192e56c5791STim Harvey /* IOEXP_IRQ# */ 193e56c5791STim Harvey IOMUX_PADS(PAD_EIM_A20__GPIO2_IO18 | MUX_PAD_CTRL(IRQ_PAD_CTRL)), 1949a83a815STim Harvey /* CAN_STBY */ 1959a83a815STim Harvey IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09 | DIO_PAD_CFG), 196e56c5791STim Harvey /* MX6_LOCLED# */ 197e56c5791STim Harvey IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG), 198e56c5791STim Harvey /* GPS_SHDN */ 199e56c5791STim Harvey IOMUX_PADS(PAD_ENET_RXD0__GPIO1_IO27 | DIO_PAD_CFG), 200e56c5791STim Harvey /* USBOTG_SEL */ 201e56c5791STim Harvey IOMUX_PADS(PAD_GPIO_2__GPIO1_IO02 | DIO_PAD_CFG), 202e56c5791STim Harvey /* VID_PWR */ 203e56c5791STim Harvey IOMUX_PADS(PAD_EIM_D31__GPIO3_IO31 | DIO_PAD_CFG), 204e56c5791STim Harvey /* PCI_RST# */ 205e56c5791STim Harvey IOMUX_PADS(PAD_ENET_TXD1__GPIO1_IO29 | DIO_PAD_CFG), 206e56c5791STim Harvey /* PCI_RST# (GW522x) */ 207e56c5791STim Harvey IOMUX_PADS(PAD_EIM_D23__GPIO3_IO23 | DIO_PAD_CFG), 2089a83a815STim Harvey /* RS485_EN */ 2099a83a815STim Harvey IOMUX_PADS(PAD_SD3_DAT4__GPIO7_IO01 | DIO_PAD_CFG), 210e56c5791STim Harvey /* PCIESKT_WDIS# */ 211e56c5791STim Harvey IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG), 212e56c5791STim Harvey }; 213e56c5791STim Harvey 214e56c5791STim Harvey static iomux_v3_cfg_t const gw53xx_gpio_pads[] = { 2155c55572fSTim Harvey /* MSATA_EN */ 2165c55572fSTim Harvey IOMUX_PADS(PAD_SD4_DAT0__GPIO2_IO08 | DIO_PAD_CFG), 2179a83a815STim Harvey /* CAN_STBY */ 2189a83a815STim Harvey IOMUX_PADS(PAD_GPIO_2__GPIO1_IO02 | DIO_PAD_CFG), 2199a83a815STim Harvey /* USB_HUBRST# */ 2209a83a815STim Harvey IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09 | DIO_PAD_CFG), 221e56c5791STim Harvey /* PANLEDG# */ 222e56c5791STim Harvey IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG), 223e56c5791STim Harvey /* PANLEDR# */ 224e56c5791STim Harvey IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG), 225e56c5791STim Harvey /* MX6_LOCLED# */ 226e56c5791STim Harvey IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG), 227e56c5791STim Harvey /* IOEXP_PWREN# */ 228e56c5791STim Harvey IOMUX_PADS(PAD_EIM_A19__GPIO2_IO19 | DIO_PAD_CFG), 229e56c5791STim Harvey /* IOEXP_IRQ# */ 230e56c5791STim Harvey IOMUX_PADS(PAD_EIM_A20__GPIO2_IO18 | MUX_PAD_CTRL(IRQ_PAD_CTRL)), 231e56c5791STim Harvey /* DIOI2C_DIS# */ 232e56c5791STim Harvey IOMUX_PADS(PAD_GPIO_19__GPIO4_IO05 | DIO_PAD_CFG), 233e56c5791STim Harvey /* GPS_SHDN */ 234e56c5791STim Harvey IOMUX_PADS(PAD_ENET_RXD0__GPIO1_IO27 | DIO_PAD_CFG), 235e56c5791STim Harvey /* VID_EN */ 236e56c5791STim Harvey IOMUX_PADS(PAD_EIM_D31__GPIO3_IO31 | DIO_PAD_CFG), 237e56c5791STim Harvey /* PCI_RST# */ 238e56c5791STim Harvey IOMUX_PADS(PAD_ENET_TXD1__GPIO1_IO29 | DIO_PAD_CFG), 2399a83a815STim Harvey /* RS485_EN */ 2409a83a815STim Harvey IOMUX_PADS(PAD_SD3_DAT4__GPIO7_IO01 | DIO_PAD_CFG), 241e56c5791STim Harvey /* PCIESKT_WDIS# */ 242e56c5791STim Harvey IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG), 243e56c5791STim Harvey }; 244e56c5791STim Harvey 245e56c5791STim Harvey static iomux_v3_cfg_t const gw54xx_gpio_pads[] = { 2465c55572fSTim Harvey /* MSATA_EN */ 2475c55572fSTim Harvey IOMUX_PADS(PAD_SD4_DAT0__GPIO2_IO08 | DIO_PAD_CFG), 2489a83a815STim Harvey /* CAN_STBY */ 2499a83a815STim Harvey IOMUX_PADS(PAD_GPIO_2__GPIO1_IO02 | DIO_PAD_CFG), 250e56c5791STim Harvey /* PANLEDG# */ 251e56c5791STim Harvey IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG), 252e56c5791STim Harvey /* PANLEDR# */ 2539a83a815STim Harvey IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG), 254e56c5791STim Harvey /* MX6_LOCLED# */ 255e56c5791STim Harvey IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG), 2569a83a815STim Harvey /* USB_HUBRST# */ 2579a83a815STim Harvey IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16 | DIO_PAD_CFG), 258e56c5791STim Harvey /* MIPI_DIO */ 259e56c5791STim Harvey IOMUX_PADS(PAD_SD1_DAT3__GPIO1_IO21 | DIO_PAD_CFG), 260e56c5791STim Harvey /* RS485_EN */ 261e56c5791STim Harvey IOMUX_PADS(PAD_EIM_D24__GPIO3_IO24 | DIO_PAD_CFG), 262e56c5791STim Harvey /* IOEXP_PWREN# */ 2639a83a815STim Harvey IOMUX_PADS(PAD_EIM_A19__GPIO2_IO19 | DIO_PAD_CFG), 264e56c5791STim Harvey /* IOEXP_IRQ# */ 2659a83a815STim Harvey IOMUX_PADS(PAD_EIM_A20__GPIO2_IO18 | MUX_PAD_CTRL(IRQ_PAD_CTRL)), 266e56c5791STim Harvey /* DIOI2C_DIS# */ 267e56c5791STim Harvey IOMUX_PADS(PAD_GPIO_19__GPIO4_IO05 | DIO_PAD_CFG), 268e56c5791STim Harvey /* PCI_RST# */ 269e56c5791STim Harvey IOMUX_PADS(PAD_ENET_TXD1__GPIO1_IO29 | DIO_PAD_CFG), 270e56c5791STim Harvey /* VID_EN */ 271e56c5791STim Harvey IOMUX_PADS(PAD_EIM_D31__GPIO3_IO31 | DIO_PAD_CFG), 2729a83a815STim Harvey /* RS485_EN */ 2739a83a815STim Harvey IOMUX_PADS(PAD_SD3_DAT4__GPIO7_IO01 | DIO_PAD_CFG), 274e56c5791STim Harvey /* PCIESKT_WDIS# */ 275e56c5791STim Harvey IOMUX_PADS(PAD_DISP0_DAT23__GPIO5_IO17 | DIO_PAD_CFG), 276e56c5791STim Harvey }; 277e56c5791STim Harvey 278e56c5791STim Harvey static iomux_v3_cfg_t const gw551x_gpio_pads[] = { 2799a83a815STim Harvey /* CAN_STBY */ 2809a83a815STim Harvey IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09 | DIO_PAD_CFG), 281e56c5791STim Harvey /* PANLED# */ 282e56c5791STim Harvey IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG), 283e56c5791STim Harvey /* PCI_RST# */ 284e56c5791STim Harvey IOMUX_PADS(PAD_GPIO_0__GPIO1_IO00 | DIO_PAD_CFG), 285e56c5791STim Harvey /* PCIESKT_WDIS# */ 286e56c5791STim Harvey IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG), 287e56c5791STim Harvey }; 288e56c5791STim Harvey 289e56c5791STim Harvey static iomux_v3_cfg_t const gw552x_gpio_pads[] = { 2905c55572fSTim Harvey /* MSATA_EN */ 2915c55572fSTim Harvey IOMUX_PADS(PAD_SD4_DAT0__GPIO2_IO08 | DIO_PAD_CFG), 2929a83a815STim Harvey /* USBOTG_SEL */ 2939a83a815STim Harvey IOMUX_PADS(PAD_GPIO_7__GPIO1_IO07 | DIO_PAD_CFG), 2949a83a815STim Harvey /* USB_HUBRST# */ 2959a83a815STim Harvey IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09 | DIO_PAD_CFG), 296e56c5791STim Harvey /* PANLEDG# */ 297e56c5791STim Harvey IOMUX_PADS(PAD_KEY_COL0__GPIO4_IO06 | DIO_PAD_CFG), 298e56c5791STim Harvey /* PANLEDR# */ 299e56c5791STim Harvey IOMUX_PADS(PAD_KEY_ROW0__GPIO4_IO07 | DIO_PAD_CFG), 300e56c5791STim Harvey /* MX6_LOCLED# */ 301e56c5791STim Harvey IOMUX_PADS(PAD_KEY_ROW4__GPIO4_IO15 | DIO_PAD_CFG), 302e56c5791STim Harvey /* PCI_RST# */ 303e56c5791STim Harvey IOMUX_PADS(PAD_ENET_TXD1__GPIO1_IO29 | DIO_PAD_CFG), 304e56c5791STim Harvey /* MX6_DIO[4:9] */ 305e56c5791STim Harvey IOMUX_PADS(PAD_CSI0_PIXCLK__GPIO5_IO18 | DIO_PAD_CFG), 306e56c5791STim Harvey IOMUX_PADS(PAD_CSI0_DATA_EN__GPIO5_IO20 | DIO_PAD_CFG), 307e56c5791STim Harvey IOMUX_PADS(PAD_CSI0_VSYNC__GPIO5_IO21 | DIO_PAD_CFG), 308e56c5791STim Harvey IOMUX_PADS(PAD_CSI0_DAT4__GPIO5_IO22 | DIO_PAD_CFG), 309e56c5791STim Harvey IOMUX_PADS(PAD_CSI0_DAT5__GPIO5_IO23 | DIO_PAD_CFG), 310e56c5791STim Harvey IOMUX_PADS(PAD_CSI0_DAT7__GPIO5_IO25 | DIO_PAD_CFG), 311e56c5791STim Harvey /* PCIEGBE1_OFF# */ 312e56c5791STim Harvey IOMUX_PADS(PAD_GPIO_1__GPIO1_IO01 | DIO_PAD_CFG), 313e56c5791STim Harvey /* PCIEGBE2_OFF# */ 314e56c5791STim Harvey IOMUX_PADS(PAD_GPIO_2__GPIO1_IO02 | DIO_PAD_CFG), 315e56c5791STim Harvey /* PCIESKT_WDIS# */ 316e56c5791STim Harvey IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG), 317e56c5791STim Harvey }; 318e56c5791STim Harvey 319*385575bcSTim Harvey static iomux_v3_cfg_t const gw553x_gpio_pads[] = { 320*385575bcSTim Harvey /* PANLEDG# */ 321*385575bcSTim Harvey IOMUX_PADS(PAD_KEY_COL2__GPIO4_IO10 | DIO_PAD_CFG), 322*385575bcSTim Harvey /* PANLEDR# */ 323*385575bcSTim Harvey IOMUX_PADS(PAD_KEY_ROW2__GPIO4_IO11 | DIO_PAD_CFG), 324*385575bcSTim Harvey 325*385575bcSTim Harvey /* VID_PWR */ 326*385575bcSTim Harvey IOMUX_PADS(PAD_CSI0_DATA_EN__GPIO5_IO20 | DIO_PAD_CFG), 327*385575bcSTim Harvey /* PCI_RST# */ 328*385575bcSTim Harvey IOMUX_PADS(PAD_GPIO_0__GPIO1_IO00 | DIO_PAD_CFG), 329*385575bcSTim Harvey /* PCIESKT_WDIS# */ 330*385575bcSTim Harvey IOMUX_PADS(PAD_GPIO_17__GPIO7_IO12 | DIO_PAD_CFG), 331*385575bcSTim Harvey }; 332*385575bcSTim Harvey 333e56c5791STim Harvey 334e56c5791STim Harvey /* 335e56c5791STim Harvey * Board Specific GPIO 336e56c5791STim Harvey */ 337e56c5791STim Harvey struct ventana gpio_cfg[GW_UNKNOWN] = { 338e56c5791STim Harvey /* GW5400proto */ 339e56c5791STim Harvey { 340e56c5791STim Harvey .gpio_pads = gw54xx_gpio_pads, 341e56c5791STim Harvey .num_pads = ARRAY_SIZE(gw54xx_gpio_pads)/2, 342e56c5791STim Harvey .dio_cfg = { 343e56c5791STim Harvey { 344e56c5791STim Harvey { IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09) }, 345e56c5791STim Harvey IMX_GPIO_NR(1, 9), 346e56c5791STim Harvey { IOMUX_PADS(PAD_GPIO_9__PWM1_OUT) }, 347e56c5791STim Harvey 1 348e56c5791STim Harvey }, 349e56c5791STim Harvey { 350e56c5791STim Harvey { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) }, 351e56c5791STim Harvey IMX_GPIO_NR(1, 19), 352e56c5791STim Harvey { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) }, 353e56c5791STim Harvey 2 354e56c5791STim Harvey }, 355e56c5791STim Harvey { 356e56c5791STim Harvey { IOMUX_PADS(PAD_SD4_DAT1__GPIO2_IO09) }, 357e56c5791STim Harvey IMX_GPIO_NR(2, 9), 358e56c5791STim Harvey { IOMUX_PADS(PAD_SD4_DAT1__PWM3_OUT) }, 359e56c5791STim Harvey 3 360e56c5791STim Harvey }, 361e56c5791STim Harvey { 362e56c5791STim Harvey { IOMUX_PADS(PAD_SD4_DAT2__GPIO2_IO10) }, 363e56c5791STim Harvey IMX_GPIO_NR(2, 10), 364e56c5791STim Harvey { IOMUX_PADS(PAD_SD4_DAT2__PWM4_OUT) }, 365e56c5791STim Harvey 4 366e56c5791STim Harvey }, 367e56c5791STim Harvey }, 368e56c5791STim Harvey .num_gpios = 4, 369e56c5791STim Harvey .leds = { 370e56c5791STim Harvey IMX_GPIO_NR(4, 6), 371e56c5791STim Harvey IMX_GPIO_NR(4, 10), 372e56c5791STim Harvey IMX_GPIO_NR(4, 15), 373e56c5791STim Harvey }, 374e56c5791STim Harvey .pcie_rst = IMX_GPIO_NR(1, 29), 375e56c5791STim Harvey .mezz_pwren = IMX_GPIO_NR(4, 7), 376e56c5791STim Harvey .mezz_irq = IMX_GPIO_NR(4, 9), 377e56c5791STim Harvey .rs485en = IMX_GPIO_NR(3, 24), 378e56c5791STim Harvey .dioi2c_en = IMX_GPIO_NR(4, 5), 379e56c5791STim Harvey .pcie_sson = IMX_GPIO_NR(1, 20), 380e56c5791STim Harvey }, 381e56c5791STim Harvey 382e56c5791STim Harvey /* GW51xx */ 383e56c5791STim Harvey { 384e56c5791STim Harvey .gpio_pads = gw51xx_gpio_pads, 385e56c5791STim Harvey .num_pads = ARRAY_SIZE(gw51xx_gpio_pads)/2, 386e56c5791STim Harvey .dio_cfg = { 387e56c5791STim Harvey { 388e56c5791STim Harvey { IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) }, 389e56c5791STim Harvey IMX_GPIO_NR(1, 16), 390e56c5791STim Harvey { 0, 0 }, 391e56c5791STim Harvey 0 392e56c5791STim Harvey }, 393e56c5791STim Harvey { 394e56c5791STim Harvey { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) }, 395e56c5791STim Harvey IMX_GPIO_NR(1, 19), 396e56c5791STim Harvey { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) }, 397e56c5791STim Harvey 2 398e56c5791STim Harvey }, 399e56c5791STim Harvey { 400e56c5791STim Harvey { IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) }, 401e56c5791STim Harvey IMX_GPIO_NR(1, 17), 402e56c5791STim Harvey { IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) }, 403e56c5791STim Harvey 3 404e56c5791STim Harvey }, 405e56c5791STim Harvey { 406e56c5791STim Harvey { IOMUX_PADS(PAD_SD1_CMD__GPIO1_IO18) }, 407e56c5791STim Harvey IMX_GPIO_NR(1, 18), 408e56c5791STim Harvey { IOMUX_PADS(PAD_SD1_CMD__PWM4_OUT) }, 409e56c5791STim Harvey 4 410e56c5791STim Harvey }, 411e56c5791STim Harvey }, 412e56c5791STim Harvey .num_gpios = 4, 413e56c5791STim Harvey .leds = { 414e56c5791STim Harvey IMX_GPIO_NR(4, 6), 415e56c5791STim Harvey IMX_GPIO_NR(4, 10), 416e56c5791STim Harvey }, 417e56c5791STim Harvey .pcie_rst = IMX_GPIO_NR(1, 0), 418e56c5791STim Harvey .mezz_pwren = IMX_GPIO_NR(2, 19), 419e56c5791STim Harvey .mezz_irq = IMX_GPIO_NR(2, 18), 420e56c5791STim Harvey .gps_shdn = IMX_GPIO_NR(1, 2), 421e56c5791STim Harvey .vidin_en = IMX_GPIO_NR(5, 20), 422e56c5791STim Harvey .wdis = IMX_GPIO_NR(7, 12), 423e56c5791STim Harvey }, 424e56c5791STim Harvey 425e56c5791STim Harvey /* GW52xx */ 426e56c5791STim Harvey { 427e56c5791STim Harvey .gpio_pads = gw52xx_gpio_pads, 428e56c5791STim Harvey .num_pads = ARRAY_SIZE(gw52xx_gpio_pads)/2, 429e56c5791STim Harvey .dio_cfg = { 430e56c5791STim Harvey { 431e56c5791STim Harvey { IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) }, 432e56c5791STim Harvey IMX_GPIO_NR(1, 16), 433e56c5791STim Harvey { 0, 0 }, 434e56c5791STim Harvey 0 435e56c5791STim Harvey }, 436e56c5791STim Harvey { 437e56c5791STim Harvey { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) }, 438e56c5791STim Harvey IMX_GPIO_NR(1, 19), 439e56c5791STim Harvey { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) }, 440e56c5791STim Harvey 2 441e56c5791STim Harvey }, 442e56c5791STim Harvey { 443e56c5791STim Harvey { IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) }, 444e56c5791STim Harvey IMX_GPIO_NR(1, 17), 445e56c5791STim Harvey { IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) }, 446e56c5791STim Harvey 3 447e56c5791STim Harvey }, 448e56c5791STim Harvey { 449e56c5791STim Harvey { IOMUX_PADS(PAD_SD1_CLK__GPIO1_IO20) }, 450e56c5791STim Harvey IMX_GPIO_NR(1, 20), 451e56c5791STim Harvey { 0, 0 }, 452e56c5791STim Harvey 0 453e56c5791STim Harvey }, 454e56c5791STim Harvey }, 455e56c5791STim Harvey .num_gpios = 4, 456e56c5791STim Harvey .leds = { 457e56c5791STim Harvey IMX_GPIO_NR(4, 6), 458e56c5791STim Harvey IMX_GPIO_NR(4, 7), 459e56c5791STim Harvey IMX_GPIO_NR(4, 15), 460e56c5791STim Harvey }, 461e56c5791STim Harvey .pcie_rst = IMX_GPIO_NR(1, 29), 462e56c5791STim Harvey .mezz_pwren = IMX_GPIO_NR(2, 19), 463e56c5791STim Harvey .mezz_irq = IMX_GPIO_NR(2, 18), 464e56c5791STim Harvey .gps_shdn = IMX_GPIO_NR(1, 27), 465e56c5791STim Harvey .vidin_en = IMX_GPIO_NR(3, 31), 466e56c5791STim Harvey .usb_sel = IMX_GPIO_NR(1, 2), 467e56c5791STim Harvey .wdis = IMX_GPIO_NR(7, 12), 4685c55572fSTim Harvey .msata_en = GP_MSATA_SEL, 469e56c5791STim Harvey }, 470e56c5791STim Harvey 471e56c5791STim Harvey /* GW53xx */ 472e56c5791STim Harvey { 473e56c5791STim Harvey .gpio_pads = gw53xx_gpio_pads, 474e56c5791STim Harvey .num_pads = ARRAY_SIZE(gw53xx_gpio_pads)/2, 475e56c5791STim Harvey .dio_cfg = { 476e56c5791STim Harvey { 477e56c5791STim Harvey { IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) }, 478e56c5791STim Harvey IMX_GPIO_NR(1, 16), 479e56c5791STim Harvey { 0, 0 }, 480e56c5791STim Harvey 0 481e56c5791STim Harvey }, 482e56c5791STim Harvey { 483e56c5791STim Harvey { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) }, 484e56c5791STim Harvey IMX_GPIO_NR(1, 19), 485e56c5791STim Harvey { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) }, 486e56c5791STim Harvey 2 487e56c5791STim Harvey }, 488e56c5791STim Harvey { 489e56c5791STim Harvey { IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) }, 490e56c5791STim Harvey IMX_GPIO_NR(1, 17), 491e56c5791STim Harvey { IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) }, 492e56c5791STim Harvey 3 493e56c5791STim Harvey }, 494e56c5791STim Harvey { 495e56c5791STim Harvey {IOMUX_PADS(PAD_SD1_CLK__GPIO1_IO20) }, 496e56c5791STim Harvey IMX_GPIO_NR(1, 20), 497e56c5791STim Harvey { 0, 0 }, 498e56c5791STim Harvey 0 499e56c5791STim Harvey }, 500e56c5791STim Harvey }, 501e56c5791STim Harvey .num_gpios = 4, 502e56c5791STim Harvey .leds = { 503e56c5791STim Harvey IMX_GPIO_NR(4, 6), 504e56c5791STim Harvey IMX_GPIO_NR(4, 7), 505e56c5791STim Harvey IMX_GPIO_NR(4, 15), 506e56c5791STim Harvey }, 507e56c5791STim Harvey .pcie_rst = IMX_GPIO_NR(1, 29), 508e56c5791STim Harvey .mezz_pwren = IMX_GPIO_NR(2, 19), 509e56c5791STim Harvey .mezz_irq = IMX_GPIO_NR(2, 18), 510e56c5791STim Harvey .gps_shdn = IMX_GPIO_NR(1, 27), 511e56c5791STim Harvey .vidin_en = IMX_GPIO_NR(3, 31), 512e56c5791STim Harvey .wdis = IMX_GPIO_NR(7, 12), 5135c55572fSTim Harvey .msata_en = GP_MSATA_SEL, 514e56c5791STim Harvey }, 515e56c5791STim Harvey 516e56c5791STim Harvey /* GW54xx */ 517e56c5791STim Harvey { 518e56c5791STim Harvey .gpio_pads = gw54xx_gpio_pads, 519e56c5791STim Harvey .num_pads = ARRAY_SIZE(gw54xx_gpio_pads)/2, 520e56c5791STim Harvey .dio_cfg = { 521e56c5791STim Harvey { 522e56c5791STim Harvey { IOMUX_PADS(PAD_GPIO_9__GPIO1_IO09) }, 523e56c5791STim Harvey IMX_GPIO_NR(1, 9), 524e56c5791STim Harvey { IOMUX_PADS(PAD_GPIO_9__PWM1_OUT) }, 525e56c5791STim Harvey 1 526e56c5791STim Harvey }, 527e56c5791STim Harvey { 528e56c5791STim Harvey { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) }, 529e56c5791STim Harvey IMX_GPIO_NR(1, 19), 530e56c5791STim Harvey { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) }, 531e56c5791STim Harvey 2 532e56c5791STim Harvey }, 533e56c5791STim Harvey { 534e56c5791STim Harvey { IOMUX_PADS(PAD_SD4_DAT1__GPIO2_IO09) }, 535e56c5791STim Harvey IMX_GPIO_NR(2, 9), 536e56c5791STim Harvey { IOMUX_PADS(PAD_SD4_DAT1__PWM3_OUT) }, 537e56c5791STim Harvey 3 538e56c5791STim Harvey }, 539e56c5791STim Harvey { 540e56c5791STim Harvey { IOMUX_PADS(PAD_SD4_DAT2__GPIO2_IO10) }, 541e56c5791STim Harvey IMX_GPIO_NR(2, 10), 542e56c5791STim Harvey { IOMUX_PADS(PAD_SD4_DAT2__PWM4_OUT) }, 543e56c5791STim Harvey 4 544e56c5791STim Harvey }, 545e56c5791STim Harvey }, 546e56c5791STim Harvey .num_gpios = 4, 547e56c5791STim Harvey .leds = { 548e56c5791STim Harvey IMX_GPIO_NR(4, 6), 549e56c5791STim Harvey IMX_GPIO_NR(4, 7), 550e56c5791STim Harvey IMX_GPIO_NR(4, 15), 551e56c5791STim Harvey }, 552e56c5791STim Harvey .pcie_rst = IMX_GPIO_NR(1, 29), 553e56c5791STim Harvey .mezz_pwren = IMX_GPIO_NR(2, 19), 554e56c5791STim Harvey .mezz_irq = IMX_GPIO_NR(2, 18), 555e56c5791STim Harvey .rs485en = IMX_GPIO_NR(7, 1), 556e56c5791STim Harvey .vidin_en = IMX_GPIO_NR(3, 31), 557e56c5791STim Harvey .dioi2c_en = IMX_GPIO_NR(4, 5), 558e56c5791STim Harvey .pcie_sson = IMX_GPIO_NR(1, 20), 559e56c5791STim Harvey .wdis = IMX_GPIO_NR(5, 17), 5605c55572fSTim Harvey .msata_en = GP_MSATA_SEL, 561e56c5791STim Harvey }, 562e56c5791STim Harvey 563e56c5791STim Harvey /* GW551x */ 564e56c5791STim Harvey { 565e56c5791STim Harvey .gpio_pads = gw551x_gpio_pads, 566e56c5791STim Harvey .num_pads = ARRAY_SIZE(gw551x_gpio_pads)/2, 567e56c5791STim Harvey .dio_cfg = { 568e56c5791STim Harvey { 5699a83a815STim Harvey { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) }, 5709a83a815STim Harvey IMX_GPIO_NR(1, 19), 5719a83a815STim Harvey { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) }, 5729a83a815STim Harvey 2 5739a83a815STim Harvey }, 5749a83a815STim Harvey { 5759a83a815STim Harvey { IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) }, 5769a83a815STim Harvey IMX_GPIO_NR(1, 17), 5779a83a815STim Harvey { IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) }, 5789a83a815STim Harvey 3 5799a83a815STim Harvey }, 5809a83a815STim Harvey }, 5819a83a815STim Harvey .num_gpios = 2, 5829a83a815STim Harvey .leds = { 5839a83a815STim Harvey IMX_GPIO_NR(4, 7), 5849a83a815STim Harvey }, 5859a83a815STim Harvey .pcie_rst = IMX_GPIO_NR(1, 0), 5869a83a815STim Harvey .wdis = IMX_GPIO_NR(7, 12), 5879a83a815STim Harvey }, 5889a83a815STim Harvey 5899a83a815STim Harvey /* GW552x */ 5909a83a815STim Harvey { 5919a83a815STim Harvey .gpio_pads = gw552x_gpio_pads, 5929a83a815STim Harvey .num_pads = ARRAY_SIZE(gw552x_gpio_pads)/2, 5939a83a815STim Harvey .dio_cfg = { 5949a83a815STim Harvey { 595e56c5791STim Harvey { IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) }, 596e56c5791STim Harvey IMX_GPIO_NR(1, 16), 597e56c5791STim Harvey { 0, 0 }, 598e56c5791STim Harvey 0 599e56c5791STim Harvey }, 600e56c5791STim Harvey { 601e56c5791STim Harvey { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) }, 602e56c5791STim Harvey IMX_GPIO_NR(1, 19), 603e56c5791STim Harvey { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) }, 604e56c5791STim Harvey 2 605e56c5791STim Harvey }, 606e56c5791STim Harvey { 607e56c5791STim Harvey { IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) }, 608e56c5791STim Harvey IMX_GPIO_NR(1, 17), 609e56c5791STim Harvey { IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) }, 610e56c5791STim Harvey 3 611e56c5791STim Harvey }, 612e56c5791STim Harvey { 6139a83a815STim Harvey {IOMUX_PADS(PAD_SD1_CLK__GPIO1_IO20) }, 6149a83a815STim Harvey IMX_GPIO_NR(1, 20), 6159a83a815STim Harvey { 0, 0 }, 6169a83a815STim Harvey 0 617e56c5791STim Harvey }, 618e56c5791STim Harvey }, 619e56c5791STim Harvey .num_gpios = 4, 620e56c5791STim Harvey .leds = { 621e56c5791STim Harvey IMX_GPIO_NR(4, 6), 622e56c5791STim Harvey IMX_GPIO_NR(4, 7), 623e56c5791STim Harvey IMX_GPIO_NR(4, 15), 624e56c5791STim Harvey }, 625e56c5791STim Harvey .pcie_rst = IMX_GPIO_NR(1, 29), 6269a83a815STim Harvey .usb_sel = IMX_GPIO_NR(1, 7), 627e56c5791STim Harvey .wdis = IMX_GPIO_NR(7, 12), 6285c55572fSTim Harvey .msata_en = GP_MSATA_SEL, 629e56c5791STim Harvey }, 630*385575bcSTim Harvey 631*385575bcSTim Harvey /* GW553x */ 632*385575bcSTim Harvey { 633*385575bcSTim Harvey .gpio_pads = gw553x_gpio_pads, 634*385575bcSTim Harvey .num_pads = ARRAY_SIZE(gw553x_gpio_pads)/2, 635*385575bcSTim Harvey .dio_cfg = { 636*385575bcSTim Harvey { 637*385575bcSTim Harvey { IOMUX_PADS(PAD_SD1_DAT0__GPIO1_IO16) }, 638*385575bcSTim Harvey IMX_GPIO_NR(1, 16), 639*385575bcSTim Harvey { 0, 0 }, 640*385575bcSTim Harvey 0 641*385575bcSTim Harvey }, 642*385575bcSTim Harvey { 643*385575bcSTim Harvey { IOMUX_PADS(PAD_SD1_DAT2__GPIO1_IO19) }, 644*385575bcSTim Harvey IMX_GPIO_NR(1, 19), 645*385575bcSTim Harvey { IOMUX_PADS(PAD_SD1_DAT2__PWM2_OUT) }, 646*385575bcSTim Harvey 2 647*385575bcSTim Harvey }, 648*385575bcSTim Harvey { 649*385575bcSTim Harvey { IOMUX_PADS(PAD_SD1_DAT1__GPIO1_IO17) }, 650*385575bcSTim Harvey IMX_GPIO_NR(1, 17), 651*385575bcSTim Harvey { IOMUX_PADS(PAD_SD1_DAT1__PWM3_OUT) }, 652*385575bcSTim Harvey 3 653*385575bcSTim Harvey }, 654*385575bcSTim Harvey { 655*385575bcSTim Harvey { IOMUX_PADS(PAD_SD1_CMD__GPIO1_IO18) }, 656*385575bcSTim Harvey IMX_GPIO_NR(1, 18), 657*385575bcSTim Harvey { IOMUX_PADS(PAD_SD1_CMD__PWM4_OUT) }, 658*385575bcSTim Harvey 4 659*385575bcSTim Harvey }, 660*385575bcSTim Harvey }, 661*385575bcSTim Harvey .num_gpios = 4, 662*385575bcSTim Harvey .leds = { 663*385575bcSTim Harvey IMX_GPIO_NR(4, 10), 664*385575bcSTim Harvey IMX_GPIO_NR(4, 11), 665*385575bcSTim Harvey }, 666*385575bcSTim Harvey .pcie_rst = IMX_GPIO_NR(1, 0), 667*385575bcSTim Harvey .vidin_en = IMX_GPIO_NR(5, 20), 668*385575bcSTim Harvey .wdis = IMX_GPIO_NR(7, 12), 669*385575bcSTim Harvey }, 670e56c5791STim Harvey }; 671e56c5791STim Harvey 672e56c5791STim Harvey void setup_iomux_gpio(int board, struct ventana_board_info *info) 673e56c5791STim Harvey { 674e56c5791STim Harvey int i; 675e56c5791STim Harvey 676e56c5791STim Harvey /* iomux common to all Ventana boards */ 677e56c5791STim Harvey SETUP_IOMUX_PADS(gw_gpio_pads); 678e56c5791STim Harvey 679e56c5791STim Harvey /* OTG power off */ 680e56c5791STim Harvey gpio_request(GP_USB_OTG_PWR, "usbotg_pwr"); 681e56c5791STim Harvey gpio_direction_output(GP_USB_OTG_PWR, 0); 682e56c5791STim Harvey 683e56c5791STim Harvey /* RS232_EN# */ 684e56c5791STim Harvey gpio_request(GP_RS232_EN, "rs232_en"); 685e56c5791STim Harvey gpio_direction_output(GP_RS232_EN, 0); 686e56c5791STim Harvey 687e56c5791STim Harvey if (board >= GW_UNKNOWN) 688e56c5791STim Harvey return; 689e56c5791STim Harvey 690e56c5791STim Harvey /* board specific iomux */ 691e56c5791STim Harvey imx_iomux_v3_setup_multiple_pads(gpio_cfg[board].gpio_pads, 692e56c5791STim Harvey gpio_cfg[board].num_pads); 693e56c5791STim Harvey 694e56c5791STim Harvey /* GW522x Uses GPIO3_IO23 for PCIE_RST# */ 695e56c5791STim Harvey if (board == GW52xx && info->model[4] == '2') 696e56c5791STim Harvey gpio_cfg[board].pcie_rst = IMX_GPIO_NR(3, 23); 697e56c5791STim Harvey 698e56c5791STim Harvey /* assert PCI_RST# */ 699e56c5791STim Harvey gpio_request(gpio_cfg[board].pcie_rst, "pci_rst#"); 700e56c5791STim Harvey gpio_direction_output(gpio_cfg[board].pcie_rst, 0); 701e56c5791STim Harvey 702e56c5791STim Harvey /* turn off (active-high) user LED's */ 703e56c5791STim Harvey for (i = 0; i < ARRAY_SIZE(gpio_cfg[board].leds); i++) { 704e56c5791STim Harvey char name[16]; 705e56c5791STim Harvey if (gpio_cfg[board].leds[i]) { 706e56c5791STim Harvey sprintf(name, "led_user%d", i); 707e56c5791STim Harvey gpio_request(gpio_cfg[board].leds[i], name); 708e56c5791STim Harvey gpio_direction_output(gpio_cfg[board].leds[i], 1); 709e56c5791STim Harvey } 710e56c5791STim Harvey } 711e56c5791STim Harvey 7125c55572fSTim Harvey /* MSATA Enable - default to PCI */ 7135c55572fSTim Harvey if (gpio_cfg[board].msata_en) { 7145c55572fSTim Harvey gpio_request(gpio_cfg[board].msata_en, "msata_en"); 7155c55572fSTim Harvey gpio_direction_output(gpio_cfg[board].msata_en, 0); 7165c55572fSTim Harvey } 7175c55572fSTim Harvey 718e56c5791STim Harvey /* Expansion Mezzanine IO */ 719e56c5791STim Harvey if (gpio_cfg[board].mezz_pwren) { 720e56c5791STim Harvey gpio_request(gpio_cfg[board].mezz_pwren, "mezz_pwr"); 721e56c5791STim Harvey gpio_direction_output(gpio_cfg[board].mezz_pwren, 0); 722e56c5791STim Harvey } 723e56c5791STim Harvey if (gpio_cfg[board].mezz_irq) { 724e56c5791STim Harvey gpio_request(gpio_cfg[board].mezz_irq, "mezz_irq#"); 725e56c5791STim Harvey gpio_direction_input(gpio_cfg[board].mezz_irq); 726e56c5791STim Harvey } 727e56c5791STim Harvey 728e56c5791STim Harvey /* RS485 Transmit Enable */ 729e56c5791STim Harvey if (gpio_cfg[board].rs485en) { 730e56c5791STim Harvey gpio_request(gpio_cfg[board].rs485en, "rs485_en"); 731e56c5791STim Harvey gpio_direction_output(gpio_cfg[board].rs485en, 0); 732e56c5791STim Harvey } 733e56c5791STim Harvey 734e56c5791STim Harvey /* GPS_SHDN */ 735e56c5791STim Harvey if (gpio_cfg[board].gps_shdn) { 736e56c5791STim Harvey gpio_request(gpio_cfg[board].gps_shdn, "gps_shdn"); 737e56c5791STim Harvey gpio_direction_output(gpio_cfg[board].gps_shdn, 1); 738e56c5791STim Harvey } 739e56c5791STim Harvey 740e56c5791STim Harvey /* Analog video codec power enable */ 741e56c5791STim Harvey if (gpio_cfg[board].vidin_en) { 742e56c5791STim Harvey gpio_request(gpio_cfg[board].vidin_en, "anavidin_en"); 743e56c5791STim Harvey gpio_direction_output(gpio_cfg[board].vidin_en, 1); 744e56c5791STim Harvey } 745e56c5791STim Harvey 746e56c5791STim Harvey /* DIOI2C_DIS# */ 747e56c5791STim Harvey if (gpio_cfg[board].dioi2c_en) { 748e56c5791STim Harvey gpio_request(gpio_cfg[board].dioi2c_en, "dioi2c_dis#"); 749e56c5791STim Harvey gpio_direction_output(gpio_cfg[board].dioi2c_en, 0); 750e56c5791STim Harvey } 751e56c5791STim Harvey 752e56c5791STim Harvey /* PCICK_SSON: disable spread-spectrum clock */ 753e56c5791STim Harvey if (gpio_cfg[board].pcie_sson) { 754e56c5791STim Harvey gpio_request(gpio_cfg[board].pcie_sson, "pci_sson"); 755e56c5791STim Harvey gpio_direction_output(gpio_cfg[board].pcie_sson, 0); 756e56c5791STim Harvey } 757e56c5791STim Harvey 758e56c5791STim Harvey /* USBOTG mux routing */ 759e56c5791STim Harvey if (gpio_cfg[board].usb_sel) { 760e56c5791STim Harvey gpio_request(gpio_cfg[board].usb_sel, "usb_pcisel"); 761e56c5791STim Harvey gpio_direction_output(gpio_cfg[board].usb_sel, 0); 762e56c5791STim Harvey } 763e56c5791STim Harvey 764e56c5791STim Harvey /* PCISKT_WDIS# (Wireless disable GPIO to miniPCIe sockets) */ 765e56c5791STim Harvey if (gpio_cfg[board].wdis) { 766e56c5791STim Harvey gpio_request(gpio_cfg[board].wdis, "wlan_dis"); 767e56c5791STim Harvey gpio_direction_output(gpio_cfg[board].wdis, 1); 768e56c5791STim Harvey } 769e56c5791STim Harvey } 770e56c5791STim Harvey 771e56c5791STim Harvey /* setup GPIO pinmux and default configuration per baseboard and env */ 772e56c5791STim Harvey void setup_board_gpio(int board, struct ventana_board_info *info) 773e56c5791STim Harvey { 774e56c5791STim Harvey const char *s; 775e56c5791STim Harvey char arg[10]; 776e56c5791STim Harvey size_t len; 777e56c5791STim Harvey int i; 778e56c5791STim Harvey int quiet = simple_strtol(getenv("quiet"), NULL, 10); 779e56c5791STim Harvey 780e56c5791STim Harvey if (board >= GW_UNKNOWN) 781e56c5791STim Harvey return; 782e56c5791STim Harvey 783e56c5791STim Harvey /* RS232_EN# */ 784e56c5791STim Harvey gpio_direction_output(GP_RS232_EN, (hwconfig("rs232")) ? 0 : 1); 785e56c5791STim Harvey 786e56c5791STim Harvey /* MSATA Enable */ 7875c55572fSTim Harvey if (gpio_cfg[board].msata_en && is_cpu_type(MXC_CPU_MX6Q)) { 788e56c5791STim Harvey gpio_direction_output(GP_MSATA_SEL, 789e56c5791STim Harvey (hwconfig("msata")) ? 1 : 0); 790e56c5791STim Harvey } 791e56c5791STim Harvey 792e56c5791STim Harvey /* USBOTG Select (PCISKT or FrontPanel) */ 793e56c5791STim Harvey if (gpio_cfg[board].usb_sel) { 794e56c5791STim Harvey gpio_direction_output(gpio_cfg[board].usb_sel, 795e56c5791STim Harvey (hwconfig("usb_pcisel")) ? 1 : 0); 796e56c5791STim Harvey } 797e56c5791STim Harvey 798e56c5791STim Harvey /* 799e56c5791STim Harvey * Configure DIO pinmux/padctl registers 800e56c5791STim Harvey * see IMX6DQRM/IMX6SDLRM IOMUXC_SW_PAD_CTL_PAD_* register definitions 801e56c5791STim Harvey */ 8029a83a815STim Harvey for (i = 0; i < gpio_cfg[board].num_gpios; i++) { 803e56c5791STim Harvey struct dio_cfg *cfg = &gpio_cfg[board].dio_cfg[i]; 804e56c5791STim Harvey iomux_v3_cfg_t ctrl = DIO_PAD_CFG; 805e56c5791STim Harvey unsigned cputype = is_cpu_type(MXC_CPU_MX6Q) ? 0 : 1; 806e56c5791STim Harvey 807e56c5791STim Harvey if (!cfg->gpio_padmux[0] && !cfg->gpio_padmux[1]) 808e56c5791STim Harvey continue; 809e56c5791STim Harvey sprintf(arg, "dio%d", i); 810e56c5791STim Harvey if (!hwconfig(arg)) 811e56c5791STim Harvey continue; 812e56c5791STim Harvey s = hwconfig_subarg(arg, "padctrl", &len); 813e56c5791STim Harvey if (s) { 814e56c5791STim Harvey ctrl = MUX_PAD_CTRL(simple_strtoul(s, NULL, 16) 815e56c5791STim Harvey & 0x1ffff) | MUX_MODE_SION; 816e56c5791STim Harvey } 817e56c5791STim Harvey if (hwconfig_subarg_cmp(arg, "mode", "gpio")) { 818e56c5791STim Harvey if (!quiet) { 819e56c5791STim Harvey printf("DIO%d: GPIO%d_IO%02d (gpio-%d)\n", i, 820e56c5791STim Harvey (cfg->gpio_param/32)+1, 821e56c5791STim Harvey cfg->gpio_param%32, 822e56c5791STim Harvey cfg->gpio_param); 823e56c5791STim Harvey } 824e56c5791STim Harvey imx_iomux_v3_setup_pad(cfg->gpio_padmux[cputype] | 825e56c5791STim Harvey ctrl); 826e56c5791STim Harvey gpio_requestf(cfg->gpio_param, "dio%d", i); 827e56c5791STim Harvey gpio_direction_input(cfg->gpio_param); 82883e00f19STim Harvey } else if (hwconfig_subarg_cmp(arg, "mode", "pwm") && 829e56c5791STim Harvey cfg->pwm_padmux) { 830f17a9af8STim Harvey if (!cfg->pwm_param) { 831f17a9af8STim Harvey printf("DIO%d: Error: pwm config invalid\n", 832f17a9af8STim Harvey i); 833f17a9af8STim Harvey continue; 834f17a9af8STim Harvey } 835e56c5791STim Harvey if (!quiet) 836e56c5791STim Harvey printf("DIO%d: pwm%d\n", i, cfg->pwm_param); 837e56c5791STim Harvey imx_iomux_v3_setup_pad(cfg->pwm_padmux[cputype] | 838e56c5791STim Harvey MUX_PAD_CTRL(ctrl)); 839e56c5791STim Harvey } 840e56c5791STim Harvey } 841e56c5791STim Harvey 842e56c5791STim Harvey if (!quiet) { 8435c55572fSTim Harvey if (gpio_cfg[board].msata_en && is_cpu_type(MXC_CPU_MX6Q)) { 844e56c5791STim Harvey printf("MSATA: %s\n", (hwconfig("msata") ? 845e56c5791STim Harvey "enabled" : "disabled")); 846e56c5791STim Harvey } 847e56c5791STim Harvey printf("RS232: %s\n", (hwconfig("rs232")) ? 848e56c5791STim Harvey "enabled" : "disabled"); 849e56c5791STim Harvey } 850e56c5791STim Harvey } 851e56c5791STim Harvey 852e56c5791STim Harvey /* setup board specific PMIC */ 8536d38f3a8STim Harvey void setup_pmic(void) 854e56c5791STim Harvey { 855e56c5791STim Harvey struct pmic *p; 856e56c5791STim Harvey u32 reg; 857e56c5791STim Harvey 8586d38f3a8STim Harvey i2c_set_bus_num(CONFIG_I2C_PMIC); 8596d38f3a8STim Harvey 860e56c5791STim Harvey /* configure PFUZE100 PMIC */ 8616d38f3a8STim Harvey if (!i2c_probe(CONFIG_POWER_PFUZE100_I2C_ADDR)) { 8626d38f3a8STim Harvey debug("probed PFUZE100@0x%x\n", CONFIG_POWER_PFUZE100_I2C_ADDR); 863e56c5791STim Harvey power_pfuze100_init(CONFIG_I2C_PMIC); 864e56c5791STim Harvey p = pmic_get("PFUZE100"); 865e56c5791STim Harvey if (p && !pmic_probe(p)) { 866e56c5791STim Harvey pmic_reg_read(p, PFUZE100_DEVICEID, ®); 867e56c5791STim Harvey printf("PMIC: PFUZE100 ID=0x%02x\n", reg); 868e56c5791STim Harvey 869e56c5791STim Harvey /* Set VGEN1 to 1.5V and enable */ 870e56c5791STim Harvey pmic_reg_read(p, PFUZE100_VGEN1VOL, ®); 871e56c5791STim Harvey reg &= ~(LDO_VOL_MASK); 872e56c5791STim Harvey reg |= (LDOA_1_50V | LDO_EN); 873e56c5791STim Harvey pmic_reg_write(p, PFUZE100_VGEN1VOL, reg); 874e56c5791STim Harvey 875e56c5791STim Harvey /* Set SWBST to 5.0V and enable */ 876e56c5791STim Harvey pmic_reg_read(p, PFUZE100_SWBSTCON1, ®); 877e56c5791STim Harvey reg &= ~(SWBST_MODE_MASK | SWBST_VOL_MASK); 87818e02ffeSMarek Vasut reg |= (SWBST_5_00V | (SWBST_MODE_AUTO << SWBST_MODE_SHIFT)); 879e56c5791STim Harvey pmic_reg_write(p, PFUZE100_SWBSTCON1, reg); 880e56c5791STim Harvey } 881e56c5791STim Harvey } 882e56c5791STim Harvey 883e56c5791STim Harvey /* configure LTC3676 PMIC */ 8846d38f3a8STim Harvey else if (!i2c_probe(CONFIG_POWER_LTC3676_I2C_ADDR)) { 8856d38f3a8STim Harvey debug("probed LTC3676@0x%x\n", CONFIG_POWER_LTC3676_I2C_ADDR); 886e56c5791STim Harvey power_ltc3676_init(CONFIG_I2C_PMIC); 887e56c5791STim Harvey p = pmic_get("LTC3676_PMIC"); 888e56c5791STim Harvey if (p && !pmic_probe(p)) { 889e56c5791STim Harvey puts("PMIC: LTC3676\n"); 890e56c5791STim Harvey /* 891e56c5791STim Harvey * set board-specific scalar for max CPU frequency 892e56c5791STim Harvey * per CPU based on the LDO enabled Operating Ranges 893e56c5791STim Harvey * defined in the respective IMX6DQ and IMX6SDL 894e56c5791STim Harvey * datasheets. The voltage resulting from the R1/R2 895e56c5791STim Harvey * feedback inputs on Ventana is 1308mV. Note that this 896e56c5791STim Harvey * is a bit shy of the Vmin of 1350mV in the datasheet 897e56c5791STim Harvey * for LDO enabled mode but is as high as we can go. 898e56c5791STim Harvey * 899e56c5791STim Harvey * We will rely on an OS kernel driver to properly 900e56c5791STim Harvey * regulate these per CPU operating point and use LDO 901e56c5791STim Harvey * bypass mode when using the higher frequency 902e56c5791STim Harvey * operating points to compensate as LDO bypass mode 903e56c5791STim Harvey * allows the rails be 125mV lower. 904e56c5791STim Harvey */ 905e56c5791STim Harvey /* mask PGOOD during SW1 transition */ 906e56c5791STim Harvey pmic_reg_write(p, LTC3676_DVB1B, 907e56c5791STim Harvey 0x1f | LTC3676_PGOOD_MASK); 908e56c5791STim Harvey /* set SW1 (VDD_SOC) */ 909e56c5791STim Harvey pmic_reg_write(p, LTC3676_DVB1A, 0x1f); 910e56c5791STim Harvey 911e56c5791STim Harvey /* mask PGOOD during SW3 transition */ 912e56c5791STim Harvey pmic_reg_write(p, LTC3676_DVB3B, 913e56c5791STim Harvey 0x1f | LTC3676_PGOOD_MASK); 914e56c5791STim Harvey /* set SW3 (VDD_ARM) */ 915e56c5791STim Harvey pmic_reg_write(p, LTC3676_DVB3A, 0x1f); 916e56c5791STim Harvey } 917e56c5791STim Harvey } 918e56c5791STim Harvey } 919