GPIO222_GPIO		| PIN_OUTPUT_LOW,	/* BT_VREG_EN */
	GPIO223_GPIO		| PIN_OUTPUT_HIGH,	/* MEM_LDO_EN */
	GPIO224_GPIO		| PIN_INPUT_PULLDOWN,	/* NC */
	GPIO225_GPIO		| PIN_INPUT_PULLDOWN,	/* NC */
	GPIO226_GPIO		| PIN_INPUT_PULLDOWN,	/* NC */
	GPIO227_GPIO		| PIN_INPUT_PULLDOWN,	/* NC */
	GPIO228_GPIO		| PIN_OUTPUT_LOW,	/* CAM_MCLK */
	GPIO229_GPIO		| PIN_INPUT_PULLDOWN,	/* TSP_SDA_1V8 */
	GPIO230_GPIO		| PIN_INPUT_PULLDOWN,	/* TSP_SCL_1V8 */
};

/* STM trace or SD Card pin configurations */
static pin_cfg_t golden_bringup_ape_trace[] = {
	GPIO22_GPIO | PIN_INPUT_NOPULL,	/* CLK-f */

	PIN_CFG(23, ALT_C),	/* APE CLK */
	PIN_CFG(25, ALT_C),	/* APE DAT0 */
	PIN_CFG(26, ALT_C),	/* APE DAT1 */
	PIN_CFG(27, ALT_C),	/* APE DAT2 */
	PIN_CFG(28, ALT_C),	/* APE DAT3 */
};

static pin_cfg_t golden_bringup_modem_trace[] = {
	GPIO22_GPIO | PIN_INPUT_NOPULL, /* CLK-f */
	GPIO23_STMMOD_CLK | PIN_SLPM_USE_MUX_SETTINGS_IN_SLEEP,	/* STM CLK */
	GPIO24_UARTMOD_RXD | PIN_SLPM_USE_MUX_SETTINGS_IN_SLEEP, /* STM UART RXD */
	GPIO25_STMMOD_DAT0 | PIN_SLPM_USE_MUX_SETTINGS_IN_SLEEP, /* STM DAT0 */
	GPIO26_STMMOD_DAT1 | PIN_SLPM_USE_MUX_SETTINGS_IN_SLEEP, /* STM DAT0 */
	GPIO27_STMMOD_DAT2 | PIN_SLPM_USE_MUX_SETTINGS_IN_SLEEP, /* STM DAT0 */
	GPIO28_STMMOD_DAT3 | PIN_SLPM_USE_MUX_SETTINGS_IN_SLEEP, /* STM DAT0 */
	GPIO262_USB_DAT5,
	GPIO263_USB_DAT4,
	GPIO264_USB_DAT3,
	GPIO265_USB_DAT2,
	GPIO266_USB_DAT1,
	GPIO267_USB_DAT0,
};

/* STM trace or SD Card pin configurations */
static pin_cfg_t gavini_r0_0_ape_trace[] = {
	GPIO18_GPIO | PIN_OUTPUT_LOW,	/* CMD.Dir		*/
	GPIO19_GPIO | PIN_OUTPUT_HIGH,	/* DAT0.Dir	*/
	GPIO20_GPIO | PIN_OUTPUT_HIGH,	/* DAT123.Dir */
	GPIO22_GPIO | PIN_INPUT_NOPULL,	/* CLK-f */

	PIN_CFG(23, ALT_C),	/* APE CLK */
	PIN_CFG(25, ALT_C),	/* APE DAT0 */
	PIN_CFG(26, ALT_C),	/* APE DAT1 */
	PIN_CFG(27, ALT_C),	/* APE DAT2 */
	PIN_CFG(28, ALT_C),	/* APE DAT3 */
};

static pin_cfg_t gavini_r0_0_modem_trace[] = {
	GPIO18_GPIO | PIN_OUTPUT_LOW,	/* CMD.Dir		*/
	GPIO19_GPIO | PIN_OUTPUT_HIGH,	/* DAT0.Dir	*/
	GPIO20_GPIO | PIN_OUTPUT_HIGH,	/* DAT123.Dir */
	GPIO22_GPIO | PIN_INPUT_NOPULL, /* CLK-f */
	GPIO23_STMMOD_CLK | PIN_SLPM_USE_MUX_SETTINGS_IN_SLEEP,	/* STM CLK */
	GPIO24_UARTMOD_RXD | PIN_SLPM_USE_MUX_SETTINGS_IN_SLEEP, /* STM UART RXD */
	GPIO25_STMMOD_DAT0 | PIN_SLPM_USE_MUX_SETTINGS_IN_SLEEP, /* STM DAT0 */
	GPIO26_STMMOD_DAT1 | PIN_SLPM_USE_MUX_SETTINGS_IN_SLEEP, /* STM DAT0 */
/*     independent module, the terms and conditions of the license of that module.              */
/*     An independent module is a module which is not derived from this software.  The special  */
/*     exception does not apply to any modifications of the software.                           */
/*                                                                                              */
/*     Notwithstanding the above, under no circumstances may you combine this software in any   */
/*     way with any other Broadcom software provided under a license other than the GPL,        */
/*     without Broadcom's express prior written consent.                                        */
/*                                                                                              */
/************************************************************************************************/
#include <linux/kernel.h>
#include <linux/init.h>
#include <mach/pinmux.h>

static struct __init pin_config board_pin_config[] = {
	/* STM trace - PTI */
	PIN_CFG(TRACECLK, PTI_CLK, 0, OFF, OFF, 0, 0, 16MA),
	PIN_CFG(TRACEDT07, UARTB2_URXD, 0, OFF, OFF, 0, 0, 16MA),
	PIN_CFG(TRACEDT00, PTI_DAT0, 0, OFF, OFF, 0, 0, 16MA),
	PIN_CFG(TRACEDT01, PTI_DAT1, 0, OFF, OFF, 0, 0, 16MA),
	PIN_CFG(TRACEDT02, PTI_DAT2, 0, OFF, OFF, 0, 0, 16MA),
	PIN_CFG(TRACEDT03, PTI_DAT3, 0, OFF, OFF, 0, 0, 16MA),

	PIN_CFG(ULPI0_DATA_3, UARTB3_URTSN, 0, OFF, OFF, 0, 0, 16MA),
	PIN_CFG(ULPI0_DATA_4, UARTB3_UCTSN, 0, OFF, OFF, 0, 0, 16MA),
	PIN_CFG(ULPI0_DATA_5, UARTB3_URXD, 0, OFF, OFF, 0, 0, 16MA),
	PIN_CFG(ULPI0_DATA_6, UARTB3_UTXD, 0, OFF, OFF, 0, 0, 16MA),

	/* PMU INT */
	PIN_CFG(PMU_INT, GPIO, 0, OFF, ON, 0, 0, 8MA),

	/* Touchscreen uses this for reset pin with GPIO selected */
/*     exception does not apply to any modifications of the software.                           */
/*                                                                                              */
/*     Notwithstanding the above, under no circumstances may you combine this software in any   */
/*     way with any other Broadcom software provided under a license other than the GPL,        */
/*     without Broadcom's express prior written consent.                                        */
/*                                                                                              */
/************************************************************************************************/
#include <linux/kernel.h>
#include <linux/init.h>
#include "mach/pinmux.h"
#include <mach/rdb/brcm_rdb_padctrlreg.h>

static struct __init pin_config board_pin_config[] = {

//@HW 
	PIN_CFG(GPIO18, UB2TX, 0, OFF, OFF, 0, 0, 8MA),   			// Console TX
	PIN_CFG(SSPDI,	RXD, 0, OFF, ON, 0, 0, 8MA),   			// Console RX
        PIN_CFG(ICUSBDP, GPIO121, 0, ON, OFF, 0, 0, 8MA),               // UART_SEL

	/* PMU BSC */
	PIN_BSC_CFG(PMBSCCLK, PMBSCCLK, 0x20),						// PMU_SCL
	PIN_BSC_CFG(PMBSCDAT, PMBSCDAT, 0x20),						// PMU_SDA

	/*
	 * Note:- For eMMC, Enable Slew-rate, Increase pin drive strength to 10mA.
	 * 	This is to fix the random eMMC timeout errors due to data crc error
	 * 	seen on few rhea edn11 hardware, where eMMC is on a daughter-card.
	 *
	 * 	We may need to revisit these settings for other platforms where the
	 * 	pin drive requirements can change.
	 *
//	PIN_CFG(PMUINT, GPIO29, 0, OFF, ON, 1, 0, 8MA),			// PMU_IRQ
//	PIN_CFG(UBRX, UB1_IF_UART_RX, 0, OFF, ON, 0, 0, 8MA),		// UB1_IF_UART_RX
//	PIN_CFG(UBTX, UB1_IF_UART_TX, 0, OFF, ON, 0, 0, 8MA),		// UB1_IF_UART_TX
//	PIN_CFG(ADCSYN, GPEN09, 0, OFF, ON, 0, 0, 8MA),			// ADCSYNC_PMU

	/*
	 * Note:- For eMMC, Enable Slew-rate, Increase pin drive strength to 10mA.
	 * 	This is to fix the random eMMC timeout errors due to data crc error
	 * 	seen on few rhea edn11 hardware, where eMMC is on a daughter-card.
	 *
	 * 	We may need to revisit these settings for other platforms where the
	 * 	pin drive requirements can change.
	 *
	 */
	/* eMMC */
	PIN_CFG(MMC0CK, MMC0CK, 0, OFF, ON, 1, 0, 10MA),
	PIN_CFG(MMC0CMD, MMC0CMD, 0, OFF, ON, 1, 0, 10MA),
	PIN_CFG(MMC0RST, MMC0RST, 0, OFF, ON, 1, 0, 10MA),
	PIN_CFG(MMC0DAT7, MMC0DAT7, 0, OFF, ON, 1, 0, 10MA),
	PIN_CFG(MMC0DAT6, MMC0DAT6, 0, OFF, ON, 1, 0, 10MA),
	PIN_CFG(MMC0DAT5, MMC0DAT5, 0, OFF, ON, 1, 0, 10MA),
	PIN_CFG(MMC0DAT4, MMC0DAT4, 0, OFF, ON, 1, 0, 10MA),
	PIN_CFG(MMC0DAT3, MMC0DAT3, 0, OFF, ON, 1, 0, 10MA),
	PIN_CFG(MMC0DAT2, MMC0DAT2, 0, OFF, ON, 1, 0, 10MA),
	PIN_CFG(MMC0DAT1, MMC0DAT1, 0, OFF, ON, 1, 0, 10MA),
	PIN_CFG(MMC0DAT0, MMC0DAT0, 0, OFF, ON, 1, 0, 10MA),

    /* Micro SD - SDIO0 4 bit interface */
	PIN_CFG(SDCK, SDCK, 0, OFF, OFF, 0, 0, 8MA),
	PIN_CFG(SDCMD, SDCMD, 0, OFF, ON, 0, 0, 8MA),
	PIN_CFG(SDDAT3, SDDAT3, 0, OFF, ON, 0, 0, 8MA),
	/* PMU BSC */
	PIN_BSC_CFG(PMBSCCLK, PMBSCCLK, 0x20),
	PIN_BSC_CFG(PMBSCDAT, PMBSCDAT, 0x20),

	/*
	 * Note:- For eMMC, Enable Slew-rate, Increase pin drive strength to 10mA.
	 * 	This is to fix the random eMMC timeout errors due to data crc error
	 * 	seen on few rhea edn11 hardware, where eMMC is on a daughter-card.
	 *
	 * 	We may need to revisit these settings for other platforms where the
	 * 	pin drive requirements can change.
	 *
	 */
	/* eMMC */
	PIN_CFG(MMC0CK, MMC0CK, 0, OFF, OFF, 1, 0, 10MA),
	PIN_CFG(MMC0CMD, MMC0CMD, 0, OFF, ON, 1, 0, 10MA),
	PIN_CFG(MMC0RST, MMC0RST, 0, OFF, ON, 1, 0, 10MA),
	PIN_CFG(MMC0DAT7, MMC0DAT7, 0, OFF, ON, 1, 0, 10MA),
	PIN_CFG(MMC0DAT6, MMC0DAT6, 0, OFF, ON, 1, 0, 10MA),
	PIN_CFG(MMC0DAT5, MMC0DAT5, 0, OFF, ON, 1, 0, 10MA),
	PIN_CFG(MMC0DAT4, MMC0DAT4, 0, OFF, ON, 1, 0, 10MA),
	PIN_CFG(MMC0DAT3, MMC0DAT3, 0, OFF, ON, 1, 0, 10MA),
	PIN_CFG(MMC0DAT2, MMC0DAT2, 0, OFF, ON, 1, 0, 10MA),
	PIN_CFG(MMC0DAT1, MMC0DAT1, 0, OFF, ON, 1, 0, 10MA),
	PIN_CFG(MMC0DAT0, MMC0DAT0, 0, OFF, ON, 1, 0, 10MA),

    /* Micro SD - SDIO0 4 bit interface */
	PIN_CFG(SDCK, SDCK, 0, OFF, OFF, 0, 0, 8MA),
	PIN_CFG(SDCMD, SDCMD, 0, OFF, ON, 0, 0, 8MA),
	PIN_CFG(SDDAT3, SDDAT3, 0, OFF, ON, 0, 0, 8MA),
	GPIO222_GPIO		| PIN_OUTPUT_LOW,	/* BT_VREG_EN */
	GPIO223_GPIO		| PIN_OUTPUT_HIGH,	/* MEM_LDO_EN */
	GPIO224_GPIO		| PIN_INPUT_PULLDOWN,	/* NC */
	GPIO225_GPIO		| PIN_INPUT_PULLDOWN,	/* NC */
	GPIO226_GPIO		| PIN_INPUT_PULLDOWN,	/* VGA_CAM_ID */
	GPIO227_GPIO		| PIN_INPUT_PULLDOWN,	/* NC */
	GPIO228_GPIO		| PIN_OUTPUT_LOW,	/* CAM_MCLK */
	GPIO229_GPIO		| PIN_INPUT_PULLDOWN,	/* TSP_SDA_1V8 */
	GPIO230_GPIO		| PIN_INPUT_PULLDOWN,	/* TSP_SCL_1V8 */
};

/* STM trace or SD Card pin configurations */
static pin_cfg_t kyle_ape_trace[] = {
	GPIO22_GPIO | PIN_INPUT_NOPULL,	/* CLK-f */

	PIN_CFG(23, ALT_C),	/* APE CLK */
	PIN_CFG(25, ALT_C),	/* APE DAT0 */
	PIN_CFG(26, ALT_C),	/* APE DAT1 */
	PIN_CFG(27, ALT_C),	/* APE DAT2 */
	PIN_CFG(28, ALT_C),	/* APE DAT3 */
};

static pin_cfg_t kyle_modem_trace[] = {
	GPIO22_GPIO | PIN_INPUT_NOPULL, /* CLK-f */
	GPIO23_STMMOD_CLK | PIN_SLPM_USE_MUX_SETTINGS_IN_SLEEP,	/* STM CLK */
	GPIO24_UARTMOD_RXD | PIN_SLPM_USE_MUX_SETTINGS_IN_SLEEP, /* STM UART RXD */
	GPIO25_STMMOD_DAT0 | PIN_SLPM_USE_MUX_SETTINGS_IN_SLEEP, /* STM DAT0 */
	GPIO26_STMMOD_DAT1 | PIN_SLPM_USE_MUX_SETTINGS_IN_SLEEP, /* STM DAT0 */
	GPIO27_STMMOD_DAT2 | PIN_SLPM_USE_MUX_SETTINGS_IN_SLEEP, /* STM DAT0 */
	GPIO28_STMMOD_DAT3 | PIN_SLPM_USE_MUX_SETTINGS_IN_SLEEP, /* STM DAT0 */
	/* Enable Evatronix 'patch'.  Set GPIO59 and GPIO63 */
	gpio_set_value(59, 1);
	gpio_set_value(63, 1);

	return 0;
}
#else				/* #if defined(CONFIG_MACH_CAPRI_FPGA) */
static int bcm_usbh_hsic_init(struct usbh_cfg *hw_cfg)
{
	int ret;
	struct usbh_hsic_priv *drv_hsic_data = &usbh_hsic_data;
	int retries;
	uint32_t tmp;
	int i;

#if defined(HSIC_TEST)
	for (i = 0; i < hw_cfg->num_ports; i++) {
		struct usbh_port_cfg *port = &hw_cfg->port[i];

		dbg_printk("%s: HSIC.%d - reset_gpio=%d\n",
			   __func__, i, port->reset_gpio);

		if (port->reset_gpio >= 0) {
			/* Enable second port and setup pinmux. */
			gpio_free(port->reset_gpio);
			if (i == 1) {
				struct pin_config pin_cfg =
				    PIN_CFG(SRI_E, GPIO_032,
				    0, ON, OFF, 0, 0, 8MA);

				/* Configure GPIO04 for port1
				* power & enable MIC2015
				*/
				pinmux_set_pin_config(&pin_cfg);
			}

			ret = gpio_request(port->reset_gpio,
				 "HSIC reset");
			if (ret < 0) {
				dbg_printk("GPIO%d request failed\n",
					   port->reset_gpio);
				goto err_hsic_init_cleanup;
			}
			gpio_direction_output(port->reset_gpio, 0);
		}
	}
#endif				/* #if defined(CONFIG_MACH_CAPRI_FPGA) */

	/* Enable 48MHz reference clock to PHY */
	tmp = readl(&drv_hsic_data->ctrl_regs->clkrst_ctrl);
	writel(tmp | HSIC_PHY_CLKRST_CTRL_CLK48_REQ_MASK,
	       &drv_hsic_data->ctrl_regs->clkrst_ctrl);
	dbg_printk("Change PHY Clock & Reset Control from 0x%08x to 0x%08x\n",
		   tmp, readl(&drv_hsic_data->ctrl_regs->clkrst_ctrl));

	/* Enable LDO */
	tmp = readl(&drv_hsic_data->ctrl_regs->hsic_ldo_ctrl);
	writel(tmp | HSIC_PHY_HSIC_LDO_CTRL_LDO_EN_MASK,
	       &drv_hsic_data->ctrl_regs->hsic_ldo_ctrl);
	dbg_printk("Change PHY AFE Control from 0x%08x to 0x%08x\n",
		   tmp, readl(&drv_hsic_data->ctrl_regs->hsic_ldo_ctrl));

	mdelay(1);

	/* Deassert power downs */
	tmp = readl(&drv_hsic_data->ctrl_regs->hsic_phy_ctrl);
	writel(tmp | HSIC_PHY_HSIC_PHY_CTRL_UTMI_PWRDNB_MASK |
	       HSIC_PHY_HSIC_PHY_CTRL_PHY_PWRDNB_MASK,
	       &drv_hsic_data->ctrl_regs->hsic_phy_ctrl);
	dbg_printk("Change HSIC PHY Control from 0x%08x to 0x%08x\n", tmp,
		   readl(&drv_hsic_data->ctrl_regs->hsic_phy_ctrl));

	mdelay(1);

	/* Deassert PLL power down */
	tmp = readl(&drv_hsic_data->ctrl_regs->hsic_pll_ctrl);
	writel(tmp | HSIC_PHY_HSIC_PLL_CTRL_PLL_POWERDOWNB_MASK,
	       &drv_hsic_data->ctrl_regs->hsic_pll_ctrl);
	dbg_printk("Change HSIC PLL Control from 0x%08x to 0x%08x\n",
		   tmp, readl(&drv_hsic_data->ctrl_regs->hsic_pll_ctrl));

	/* Deassert ISO */
	tmp = readl(&drv_hsic_data->ctrl_regs->hsic_phy_ctrl);
	writel(tmp & ~HSIC_PHY_HSIC_PHY_CTRL_PHY_ISO_MASK,
	       &drv_hsic_data->ctrl_regs->hsic_phy_ctrl);
	dbg_printk("Change HSIC PHY Control from 0x%08x to 0x%08x\n",
		   tmp, readl(&drv_hsic_data->ctrl_regs->hsic_phy_ctrl));

	mdelay(1);

	/* Pull PHY out of reset */
	tmp = readl(&drv_hsic_data->ctrl_regs->hsic_phy_ctrl);
	writel(tmp | HSIC_PHY_HSIC_PHY_CTRL_RESETB_MASK,
	       &drv_hsic_data->ctrl_regs->hsic_phy_ctrl);
	dbg_printk("Change HSIC PHY Control from 0x%08x to 0x%08x\n",
		   tmp, readl(&drv_hsic_data->ctrl_regs->hsic_phy_ctrl));

	/* Pull PLL out of reset */
	tmp = readl(&drv_hsic_data->ctrl_regs->hsic_pll_ctrl);
	writel(tmp & ~HSIC_PHY_HSIC_PLL_CTRL_PLL_RESET_MASK,
	       &drv_hsic_data->ctrl_regs->hsic_pll_ctrl);
	dbg_printk("Change HSIC PLL Control from 0x%08x to 0x%08x\n",
		   tmp, readl(&drv_hsic_data->ctrl_regs->hsic_pll_ctrl));

	/* Wait for PLL lock */
	retries = 100;
	while ((!(readl(&drv_hsic_data->ctrl_regs->hsic_pll_ctrl) &
		  HSIC_PHY_HSIC_PLL_CTRL_PLL_LOCK_MASK)) && retries--) {
		schedule_timeout_interruptible(HZ / 1000);
	}

	if (retries == 0)
		dbg_printk("ERROR: HSIC PLL Lock failed!\n");

	/* Deassert software reset for UTMI and port */
	tmp = readl(&drv_hsic_data->ctrl_regs->clkrst_ctrl);
	writel(tmp |
	       HSIC_PHY_CLKRST_CTRL_UTMIRESETN_SW_MASK |
	       HSIC_PHY_CLKRST_CTRL_RESETN_SW_MASK,
	       &drv_hsic_data->ctrl_regs->clkrst_ctrl);
	dbg_printk("Change HSIC Clock Reset Control from 0x%08x to 0x%08x\n",
		   tmp, readl(&drv_hsic_data->ctrl_regs->clkrst_ctrl));

	/* Deassert soft resets to the PHY */
	tmp = readl(&drv_hsic_data->ctrl_regs->hsic_phy_ctrl);
	writel((tmp | HSIC_PHY_HSIC_PHY_CTRL_SOFT_RESETB_MASK) &
	       ~HSIC_PHY_HSIC_PHY_CTRL_NON_DRIVING_MASK,
	       &drv_hsic_data->ctrl_regs->hsic_phy_ctrl);
	dbg_printk("Change HSIC PHY Control from 0x%08x to 0x%08x\n",
		   tmp, readl(&drv_hsic_data->ctrl_regs->hsic_phy_ctrl));

#if defined(HSIC_TEST)
	for (i = 0; i < hw_cfg->num_ports; i++) {
		struct usbh_port_cfg *port = &hw_cfg->port[i];

		dbg_printk("%s: HSIC.%d - Pull out of reset. reset_gpio=%d\n",
			   __func__, i, port->reset_gpio);

		if (port->reset_gpio >= 0)
			gpio_set_value(port->reset_gpio, 1);
	}
	return 0;

 err_hsic_init_cleanup:
	for (; i >= 0; i--) {
		struct usbh_port_cfg *port = &hw_cfg->port[i];

		dbg_printk("%s: HSIC.%d - Free reset_gpio=%d\n",
			   __func__, i, port->reset_gpio);

		if (port->reset_gpio >= 0)
			gpio_free(port->reset_gpio);
	}
#endif				/* #if defined(HSIC_TEST) */
	return 0;
}
static struct __init pin_config board_pin_config[] = {
    /* BSC1 */
    PIN_BSC_CFG(BSC1CLK, BSC1CLK, 0x20),
    PIN_BSC_CFG(BSC1DAT, BSC1DAT, 0x20),

    /* BSC2 */
    PIN_BSC_CFG(GPIO16, BSC2CLK, 0x20),
    PIN_BSC_CFG(GPIO17, BSC2DAT, 0x20),

    /* PMU BSC */
    PIN_BSC_CFG(PMBSCCLK, PMBSCCLK, 0x20),
    PIN_BSC_CFG(PMBSCDAT, PMBSCDAT, 0x20),

    /* eMMC */
    PIN_CFG(MMC0CK, MMC0CK, 0, OFF, OFF, 0, 0, 8MA),
    PIN_CFG(MMC0CMD, MMC0CMD, 0, OFF, ON, 0, 0, 8MA),
    PIN_CFG(MMC0RST, MMC0RST, 0, OFF, ON, 0, 0, 8MA),
    PIN_CFG(MMC0DAT7, MMC0DAT7, 0, OFF, ON, 0, 0, 8MA),
    PIN_CFG(MMC0DAT6, MMC0DAT6, 0, OFF, ON, 0, 0, 8MA),
    PIN_CFG(MMC0DAT5, MMC0DAT5, 0, OFF, ON, 0, 0, 8MA),
    PIN_CFG(MMC0DAT4, MMC0DAT4, 0, OFF, ON, 0, 0, 8MA),
    PIN_CFG(MMC0DAT3, MMC0DAT3, 0, OFF, ON, 0, 0, 8MA),
    PIN_CFG(MMC0DAT2, MMC0DAT2, 0, OFF, ON, 0, 0, 8MA),
    PIN_CFG(MMC0DAT1, MMC0DAT1, 0, OFF, ON, 0, 0, 8MA),
    PIN_CFG(MMC0DAT0, MMC0DAT0, 0, OFF, ON, 0, 0, 8MA),

    /* Micro SD */
    PIN_CFG(SDCK, SDCK, 0, OFF, OFF, 0, 0, 8MA),
    PIN_CFG(SDCMD, SDCMD, 0, OFF, ON, 0, 0, 8MA),
    PIN_CFG(SDDAT3, SDDAT3, 0, OFF, ON, 0, 0, 8MA),
	GPIO262_USB_DAT5,
	GPIO263_USB_DAT4,
	GPIO264_USB_DAT3,
	GPIO265_USB_DAT2,
	GPIO266_USB_DAT1,
	GPIO267_USB_DAT0,
};

/* STM trace or SD Card pin configurations */
static pin_cfg_t gti9060_r0_1_ape_trace[] = {
	GPIO18_GPIO | PIN_OUTPUT_LOW,	/* CMD.Dir 		*/
	GPIO19_GPIO | PIN_OUTPUT_HIGH,	/* DAT0.Dir 	*/
	GPIO20_GPIO | PIN_OUTPUT_HIGH,	/* DAT123.Dir */
	GPIO22_GPIO | PIN_INPUT_NOPULL,	/* CLK-f */

	PIN_CFG(23, ALT_C),	/* APE CLK */
	PIN_CFG(25, ALT_C),	/* APE DAT0 */
	PIN_CFG(26, ALT_C),	/* APE DAT1 */
	PIN_CFG(27, ALT_C),	/* APE DAT2 */
	PIN_CFG(28, ALT_C),	/* APE DAT3 */
};

static pin_cfg_t gti9060_r0_1_modem_trace[] = {
	GPIO18_GPIO | PIN_OUTPUT_LOW,	/* CMD.Dir 		*/
	GPIO19_GPIO | PIN_OUTPUT_HIGH,	/* DAT0.Dir 	*/
	GPIO20_GPIO | PIN_OUTPUT_HIGH,	/* DAT123.Dir */
	GPIO22_GPIO | PIN_INPUT_NOPULL, /* CLK-f */
	GPIO23_STMMOD_CLK | PIN_SLPM_USE_MUX_SETTINGS_IN_SLEEP,	/* STM CLK */
	GPIO24_UARTMOD_RXD | PIN_SLPM_USE_MUX_SETTINGS_IN_SLEEP, /* STM UART RXD */
	GPIO25_STMMOD_DAT0 | PIN_SLPM_USE_MUX_SETTINGS_IN_SLEEP, /* STM DAT0 */
	GPIO26_STMMOD_DAT1 | PIN_SLPM_USE_MUX_SETTINGS_IN_SLEEP, /* STM DAT0 */
	/* PMU BSC */
	PIN_BSC_CFG(PMBSCCLK, PMBSCCLK, 0x20),
	PIN_BSC_CFG(PMBSCDAT, PMBSCDAT, 0x20),

	/*
	 * Note:- For eMMC, Enable Slew-rate, Increase pin drive strength to 10mA.
	 * 	This is to fix the random eMMC timeout errors due to data crc error
	 * 	seen on few rhea edn11 hardware, where eMMC is on a daughter-card.
	 *
	 * 	We may need to revisit these settings for other platforms where the
	 * 	pin drive requirements can change.
	 *
	 */
	/* eMMC */
	PIN_CFG(MMC0CK, MMC0CK, 0, OFF, OFF, 1, 0, 10MA),
	PIN_CFG(MMC0CMD, MMC0CMD, 0, OFF, ON, 1, 0, 10MA),
	PIN_CFG(MMC0RST, MMC0RST, 0, OFF, ON, 1, 0, 10MA),
	PIN_CFG(MMC0DAT7, MMC0DAT7, 0, OFF, ON, 1, 0, 10MA),
	PIN_CFG(MMC0DAT6, MMC0DAT6, 0, OFF, ON, 1, 0, 10MA),
	PIN_CFG(MMC0DAT5, MMC0DAT5, 0, OFF, ON, 1, 0, 10MA),
	PIN_CFG(MMC0DAT4, MMC0DAT4, 0, OFF, ON, 1, 0, 10MA),
	PIN_CFG(MMC0DAT3, MMC0DAT3, 0, OFF, ON, 1, 0, 10MA),
	PIN_CFG(MMC0DAT2, MMC0DAT2, 0, OFF, ON, 1, 0, 10MA),
	PIN_CFG(MMC0DAT1, MMC0DAT1, 0, OFF, ON, 1, 0, 10MA),
	PIN_CFG(MMC0DAT0, MMC0DAT0, 0, OFF, ON, 1, 0, 10MA),

    /* Micro SD - SDIO0 4 bit interface */
	PIN_CFG(SDCK, SDCK, 0, OFF, OFF, 0, 0, 8MA),
	PIN_CFG(SDCMD, SDCMD, 0, OFF, ON, 0, 0, 8MA),
	PIN_CFG(SDDAT3, SDDAT3, 0, OFF, ON, 0, 0, 8MA),