Hello, there is a little bit more to that USB chip select initialization code. I will post it here but I don't know if it helps because if you leave the pins in their power up state, I believe they are inputs and so the external pull downs just keep the transceivers selected.
I am posting all the USB GPIO initialization code from mx31lite_gpio.c. You can compare it with the code made from Daniel's patch and see that several lines are different. Usually one or two lines is added to each function in regards to the nCS lines of the USB chips. This is code I added from a kernel used by Logic PD. I'm still fighting with the USB so I don't know if it helps, but it can't hurt!
/*
* USB Host 1
* pins conflict with SPI1, ATA, UART3
*/
int gpio_usbh1_active(void)
{
if (mxc_request_iomux(MX31_PIN_CSPI1_MOSI, /* USBH1_RXDM */
OUTPUTCONFIG_ALT1, INPUTCONFIG_ALT1) ||
mxc_request_iomux(MX31_PIN_CSPI1_MISO, /* USBH1_RXDP */
OUTPUTCONFIG_ALT1, INPUTCONFIG_ALT1) ||
mxc_request_iomux(MX31_PIN_CSPI1_SS0, /* USBH1_TXDM */
OUTPUTCONFIG_ALT1, INPUTCONFIG_ALT1) ||
mxc_request_iomux(MX31_PIN_CSPI1_SS1, /* USBH1_TXDP */
OUTPUTCONFIG_ALT1, INPUTCONFIG_ALT1) ||
mxc_request_iomux(MX31_PIN_CSPI1_SS2, /* USBH1_RCV */
OUTPUTCONFIG_ALT1, INPUTCONFIG_ALT1) ||
mxc_request_iomux(MX31_PIN_CSPI1_SCLK, /* USBH1_OEB (_TXOE) */
OUTPUTCONFIG_ALT1, INPUTCONFIG_ALT1) ||
mxc_request_iomux(MX31_PIN_CSPI1_SPI_RDY, /* USBH1_FS */
OUTPUTCONFIG_ALT1, INPUTCONFIG_ALT1)) {
return -EINVAL;
}
mxc_iomux_set_pad(MX31_PIN_CSPI1_MOSI, /* USBH1_RXDM */
(PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST));
mxc_iomux_set_pad(MX31_PIN_CSPI1_MISO, /* USBH1_RXDP */
(PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST));
mxc_iomux_set_pad(MX31_PIN_CSPI1_SS0, /* USBH1_TXDM */
(PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST));
mxc_iomux_set_pad(MX31_PIN_CSPI1_SS1, /* USBH1_TXDP */
(PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST));
mxc_iomux_set_pad(MX31_PIN_CSPI1_SS2, /* USBH1_RCV */
(PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST));
mxc_iomux_set_pad(MX31_PIN_CSPI1_SCLK, /* USBH1_OEB (_TXOE) */
(PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST));
mxc_iomux_set_pad(MX31_PIN_CSPI1_SPI_RDY, /* USBH1_FS */
(PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST));
/* USB_H1_SUSPEND collides with WRLAN INT# line */
// mxc_iomux_set_gpr(MUX_PGP_USB_SUSPEND, true);
return 0;
}
EXPORT_SYMBOL(gpio_usbh1_active);
void gpio_usbh1_inactive(void)
{
mxc_free_iomux(MX31_PIN_CSPI1_MOSI, /* USBH1_RXDM */
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_free_iomux(MX31_PIN_CSPI1_MISO, /* USBH1_RXDP */
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_free_iomux(MX31_PIN_CSPI1_SS0, /* USBH1_TXDM */
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_free_iomux(MX31_PIN_CSPI1_SS1, /* USBH1_TXDP */
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_free_iomux(MX31_PIN_CSPI1_SS2, /* USBH1_RCV */
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_free_iomux(MX31_PIN_CSPI1_SCLK, /* USBH1_OEB (_TXOE) */
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_free_iomux(MX31_PIN_CSPI1_SPI_RDY, /* USBH1_FS */
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_iomux_set_pad(MX31_PIN_CSPI1_MOSI, /* USBH1_RXDM */
(PAD_CTL_DRV_NORMAL | PAD_CTL_SRE_FAST));
mxc_iomux_set_pad(MX31_PIN_CSPI1_MISO, /* USBH1_RXDP */
(PAD_CTL_DRV_NORMAL | PAD_CTL_SRE_FAST));
mxc_iomux_set_pad(MX31_PIN_CSPI1_SS0, /* USBH1_TXDM */
(PAD_CTL_DRV_NORMAL | PAD_CTL_SRE_FAST));
mxc_iomux_set_pad(MX31_PIN_CSPI1_SS1, /* USBH1_TXDP */
(PAD_CTL_DRV_NORMAL | PAD_CTL_SRE_FAST));
mxc_iomux_set_pad(MX31_PIN_CSPI1_SS2, /* USBH1_RCV */
(PAD_CTL_DRV_NORMAL | PAD_CTL_SRE_SLOW));
mxc_iomux_set_pad(MX31_PIN_CSPI1_SCLK, /* USBH1_OEB (_TXOE) */
(PAD_CTL_DRV_NORMAL | PAD_CTL_SRE_SLOW));
mxc_iomux_set_pad(MX31_PIN_CSPI1_SPI_RDY /* USBH1_FS */,
(PAD_CTL_DRV_NORMAL | PAD_CTL_SRE_SLOW));
}
EXPORT_SYMBOL(gpio_usbh1_inactive);
/*
* USB Host 2
* pins conflict with UART5, PCMCIA
*/
int gpio_usbh2_active(void)
{
if (mxc_request_iomux(MX31_PIN_USBH2_CLK,
OUTPUTCONFIG_FUNC, INPUTCONFIG_FUNC) ||
mxc_request_iomux(MX31_PIN_USBH2_DIR,
OUTPUTCONFIG_FUNC, INPUTCONFIG_FUNC) ||
mxc_request_iomux(MX31_PIN_USBH2_NXT,
OUTPUTCONFIG_FUNC, INPUTCONFIG_FUNC) ||
mxc_request_iomux(MX31_PIN_USBH2_STP,
OUTPUTCONFIG_FUNC, INPUTCONFIG_FUNC) ||
mxc_request_iomux(MX31_PIN_USBH2_DATA0,
OUTPUTCONFIG_FUNC, INPUTCONFIG_FUNC) ||
mxc_request_iomux(MX31_PIN_USBH2_DATA1,
OUTPUTCONFIG_FUNC, INPUTCONFIG_FUNC) ||
mxc_request_iomux(MX31_PIN_STXD3, /* USBH2_DATA2 */
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE) ||
mxc_request_iomux(MX31_PIN_SRXD3, /* USBH2_DATA3 */
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE) ||
mxc_request_iomux(MX31_PIN_SCK3, /* USBH2_DATA4 */
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE) ||
mxc_request_iomux(MX31_PIN_SFS3, /* USBH2_DATA5 */
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE) ||
mxc_request_iomux(MX31_PIN_STXD6, /* USBH2_DATA6 */
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE) ||
mxc_request_iomux(MX31_PIN_SRXD6, /* USBH2_DATA7 */
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE) ||
mxc_request_iomux(MX31_PIN_DTR_DCE1, /* PORT2.8 */
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE)) {
return -EINVAL;
}
#define H2_PAD_CFG (PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST | PAD_CTL_HYS_CMOS | PAD_CTL_ODE_CMOS | PAD_CTL_100K_PU)
mxc_iomux_set_pad(MX31_PIN_USBH2_CLK, H2_PAD_CFG);
mxc_iomux_set_pad(MX31_PIN_USBH2_DIR, H2_PAD_CFG);
mxc_iomux_set_pad(MX31_PIN_USBH2_NXT, H2_PAD_CFG);
mxc_iomux_set_pad(MX31_PIN_USBH2_STP, H2_PAD_CFG);
mxc_iomux_set_pad(MX31_PIN_USBH2_DATA0, H2_PAD_CFG);
mxc_iomux_set_pad(MX31_PIN_USBH2_DATA1, H2_PAD_CFG);
mxc_iomux_set_pad(MX31_PIN_STXD3, H2_PAD_CFG); /* USBH2_DATA2 */
mxc_iomux_set_pad(MX31_PIN_SRXD3, H2_PAD_CFG); /* USBH2_DATA3 */
mxc_iomux_set_pad(MX31_PIN_SCK3, H2_PAD_CFG); /* USBH2_DATA4 */
mxc_iomux_set_pad(MX31_PIN_SFS3, H2_PAD_CFG); /* USBH2_DATA5 */
mxc_iomux_set_pad(MX31_PIN_STXD6, H2_PAD_CFG); /* USBH2_DATA6 */
mxc_iomux_set_pad(MX31_PIN_SRXD6, H2_PAD_CFG); /* USBH2_DATA7 */
mxc_iomux_set_pad(MX31_PIN_DTR_DCE1, H2_PAD_CFG);
#undef H2_PAD_CFG
mxc_iomux_set_gpr(MUX_PGP_UH2, true);
mxc_set_gpio_direction(MX31_PIN_DTR_DCE1, 0);
mxc_set_gpio_dataout(MX31_PIN_DTR_DCE1, 0);
return 0;
}
EXPORT_SYMBOL(gpio_usbh2_active);
void gpio_usbh2_inactive(void)
{
iomux_config_gpr(MUX_PGP_UH2, false);
mxc_set_gpio_dataout(MX31_PIN_DTR_DCE1, 1);
iomux_config_pad(MX31_PIN_USBH2_CLK,
(PAD_CTL_DRV_NORMAL | PAD_CTL_SRE_FAST));
iomux_config_pad(MX31_PIN_USBH2_DIR,
(PAD_CTL_DRV_NORMAL | PAD_CTL_SRE_FAST));
iomux_config_pad(MX31_PIN_USBH2_NXT,
(PAD_CTL_DRV_NORMAL | PAD_CTL_SRE_FAST));
iomux_config_pad(MX31_PIN_USBH2_STP,
(PAD_CTL_DRV_NORMAL | PAD_CTL_SRE_FAST));
iomux_config_pad(MX31_PIN_USBH2_DATA0,
(PAD_CTL_DRV_NORMAL | PAD_CTL_SRE_FAST));
iomux_config_pad(MX31_PIN_USBH2_DATA1,
(PAD_CTL_DRV_NORMAL | PAD_CTL_SRE_FAST));
iomux_config_pad(MX31_PIN_SRXD6, /* USBH2_DATA2 */
(PAD_CTL_DRV_NORMAL | PAD_CTL_SRE_FAST));
iomux_config_pad(MX31_PIN_STXD6, /* USBH2_DATA3 */
(PAD_CTL_DRV_NORMAL | PAD_CTL_SRE_FAST));
iomux_config_pad(MX31_PIN_SFS3, /* USBH2_DATA4 */
(PAD_CTL_DRV_NORMAL | PAD_CTL_SRE_FAST));
iomux_config_pad(MX31_PIN_SCK3, /* USBH2_DATA5 */
(PAD_CTL_DRV_NORMAL | PAD_CTL_SRE_FAST));
iomux_config_pad(MX31_PIN_SRXD3, /* USBH2_DATA6 */
(PAD_CTL_DRV_NORMAL | PAD_CTL_SRE_FAST));
iomux_config_pad(MX31_PIN_STXD3, /* USBH2_DATA7 */
(PAD_CTL_DRV_NORMAL | PAD_CTL_SRE_FAST));
mxc_free_iomux(MX31_PIN_USBH2_CLK,
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_free_iomux(MX31_PIN_USBH2_DIR,
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_free_iomux(MX31_PIN_USBH2_NXT,
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_free_iomux(MX31_PIN_USBH2_STP,
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_free_iomux(MX31_PIN_USBH2_DATA0,
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_free_iomux(MX31_PIN_USBH2_DATA1,
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_free_iomux(MX31_PIN_PC_VS2, /* USBH2_DATA2 */
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_free_iomux(MX31_PIN_PC_BVD1, /* USBH2_DATA3 */
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_free_iomux(MX31_PIN_PC_BVD2, /* USBH2_DATA4 */
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_free_iomux(MX31_PIN_PC_RST, /* USBH2_DATA5 */
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_free_iomux(MX31_PIN_IOIS16, /* USBH2_DATA6 */
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_free_iomux(MX31_PIN_PC_RW_B, /* USBH2_DATA7 */
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_free_iomux(MX31_PIN_NFWE_B,
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_free_iomux(MX31_PIN_NFRE_B,
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_free_iomux(MX31_PIN_NFALE,
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_free_iomux(MX31_PIN_NFCLE,
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_free_iomux(MX31_PIN_NFWP_B,
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_free_iomux(MX31_PIN_NFCE_B,
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_free_iomux(MX31_PIN_DTR_DCE1,
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
}
EXPORT_SYMBOL(gpio_usbh2_inactive);
/*
* USB OTG HS port
*/
int gpio_usbotg_hs_active(void)
{
if (mxc_request_iomux(MX31_PIN_USBOTG_DATA0,
OUTPUTCONFIG_FUNC, INPUTCONFIG_FUNC) ||
mxc_request_iomux(MX31_PIN_USBOTG_DATA1,
OUTPUTCONFIG_FUNC, INPUTCONFIG_FUNC) ||
mxc_request_iomux(MX31_PIN_USBOTG_DATA2,
OUTPUTCONFIG_FUNC, INPUTCONFIG_FUNC) ||
mxc_request_iomux(MX31_PIN_USBOTG_DATA3,
OUTPUTCONFIG_FUNC, INPUTCONFIG_FUNC) ||
mxc_request_iomux(MX31_PIN_USBOTG_DATA4,
OUTPUTCONFIG_FUNC, INPUTCONFIG_FUNC) ||
mxc_request_iomux(MX31_PIN_USBOTG_DATA5,
OUTPUTCONFIG_FUNC, INPUTCONFIG_FUNC) ||
mxc_request_iomux(MX31_PIN_USBOTG_DATA6,
OUTPUTCONFIG_FUNC, INPUTCONFIG_FUNC) ||
mxc_request_iomux(MX31_PIN_USBOTG_DATA7,
OUTPUTCONFIG_FUNC, INPUTCONFIG_FUNC) ||
mxc_request_iomux(MX31_PIN_USBOTG_CLK,
OUTPUTCONFIG_FUNC, INPUTCONFIG_FUNC) ||
mxc_request_iomux(MX31_PIN_USBOTG_DIR,
OUTPUTCONFIG_FUNC, INPUTCONFIG_FUNC) ||
mxc_request_iomux(MX31_PIN_USBOTG_NXT,
OUTPUTCONFIG_FUNC, INPUTCONFIG_FUNC) ||
mxc_request_iomux(MX31_PIN_USBOTG_STP,
OUTPUTCONFIG_FUNC, INPUTCONFIG_FUNC) ||
mxc_request_iomux(MX31_PIN_DTR_DCE2,
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE)) {
return -EINVAL;
}
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA0,
(PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST));
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA1,
(PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST));
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA2,
(PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST));
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA3,
(PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST));
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA4,
(PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST));
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA5,
(PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST));
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA6,
(PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST));
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA7,
(PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST));
mxc_iomux_set_pad(MX31_PIN_USBOTG_CLK,
(PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST));
mxc_iomux_set_pad(MX31_PIN_USBOTG_DIR,
(PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST));
mxc_iomux_set_pad(MX31_PIN_USBOTG_NXT,
(PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST));
mxc_iomux_set_pad(MX31_PIN_USBOTG_STP,
(PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST));
mxc_iomux_set_pad(MX31_PIN_DTR_DCE2,
(PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST | PAD_CTL_HYS_CMOS | PAD_CTL_ODE_CMOS ));
mxc_set_gpio_direction(MX31_PIN_DTR_DCE2, 0);
mxc_set_gpio_dataout(MX31_PIN_DTR_DCE2, 0);
return 0;
}
EXPORT_SYMBOL(gpio_usbotg_hs_active);
void gpio_usbotg_hs_inactive(void)
{
mxc_free_iomux(MX31_PIN_USBOTG_DATA0,
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_free_iomux(MX31_PIN_USBOTG_DATA1,
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_free_iomux(MX31_PIN_USBOTG_DATA2,
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_free_iomux(MX31_PIN_USBOTG_DATA3,
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_free_iomux(MX31_PIN_USBOTG_DATA4,
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_free_iomux(MX31_PIN_USBOTG_DATA5,
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_free_iomux(MX31_PIN_USBOTG_DATA6,
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_free_iomux(MX31_PIN_USBOTG_DATA7,
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_free_iomux(MX31_PIN_USBOTG_CLK,
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_free_iomux(MX31_PIN_USBOTG_DIR,
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_free_iomux(MX31_PIN_USBOTG_NXT,
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_free_iomux(MX31_PIN_USBOTG_STP,
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_free_iomux(MX31_PIN_DTR_DCE2,
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA0,
(PAD_CTL_DRV_NORMAL | PAD_CTL_SRE_SLOW));
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA1,
(PAD_CTL_DRV_NORMAL | PAD_CTL_SRE_SLOW));
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA2,
(PAD_CTL_DRV_NORMAL | PAD_CTL_SRE_SLOW));
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA3,
(PAD_CTL_DRV_NORMAL | PAD_CTL_SRE_SLOW));
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA4,
(PAD_CTL_DRV_NORMAL | PAD_CTL_SRE_SLOW));
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA5,
(PAD_CTL_DRV_NORMAL | PAD_CTL_SRE_SLOW));
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA6,
(PAD_CTL_DRV_NORMAL | PAD_CTL_SRE_SLOW));
mxc_iomux_set_pad(MX31_PIN_USBOTG_DATA7,
(PAD_CTL_DRV_NORMAL | PAD_CTL_SRE_SLOW));
mxc_iomux_set_pad(MX31_PIN_USBOTG_CLK,
(PAD_CTL_DRV_NORMAL | PAD_CTL_SRE_SLOW));
mxc_iomux_set_pad(MX31_PIN_USBOTG_DIR,
(PAD_CTL_DRV_NORMAL | PAD_CTL_SRE_SLOW));
mxc_iomux_set_pad(MX31_PIN_USBOTG_NXT,
(PAD_CTL_DRV_NORMAL | PAD_CTL_SRE_SLOW));
mxc_iomux_set_pad(MX31_PIN_USBOTG_STP,
(PAD_CTL_DRV_NORMAL | PAD_CTL_SRE_SLOW));
mxc_iomux_set_pad(MX31_PIN_DTR_DCE2,
(PAD_CTL_DRV_NORMAL | PAD_CTL_SRE_SLOW));
}
EXPORT_SYMBOL(gpio_usbotg_hs_inactive);
/*
* USB OTG FS port
*/
int gpio_usbotg_fs_active(void)
{
if (mxc_request_iomux(MX31_PIN_USBOTG_DATA0,
OUTPUTCONFIG_FUNC, INPUTCONFIG_FUNC) ||
mxc_request_iomux(MX31_PIN_USBOTG_DATA1,
OUTPUTCONFIG_FUNC, INPUTCONFIG_FUNC) ||
mxc_request_iomux(MX31_PIN_USBOTG_DATA2,
OUTPUTCONFIG_FUNC, INPUTCONFIG_FUNC) ||
mxc_request_iomux(MX31_PIN_USBOTG_DATA3,
OUTPUTCONFIG_FUNC, INPUTCONFIG_FUNC) ||
mxc_request_iomux(MX31_PIN_USBOTG_DATA4,
OUTPUTCONFIG_FUNC, INPUTCONFIG_FUNC) ||
mxc_request_iomux(MX31_PIN_USBOTG_DATA5,
OUTPUTCONFIG_FUNC, INPUTCONFIG_FUNC) ||
mxc_request_iomux(MX31_PIN_USBOTG_DATA6,
OUTPUTCONFIG_FUNC, INPUTCONFIG_FUNC) ||
mxc_request_iomux(MX31_PIN_USBOTG_DATA7,
OUTPUTCONFIG_FUNC, INPUTCONFIG_FUNC) ||
mxc_request_iomux(MX31_PIN_USBOTG_CLK,
OUTPUTCONFIG_FUNC, INPUTCONFIG_FUNC) ||
mxc_request_iomux(MX31_PIN_USBOTG_DIR,
OUTPUTCONFIG_FUNC, INPUTCONFIG_FUNC) ||
mxc_request_iomux(MX31_PIN_USBOTG_NXT,
OUTPUTCONFIG_FUNC, INPUTCONFIG_FUNC) ||
mxc_request_iomux(MX31_PIN_USBOTG_STP,
OUTPUTCONFIG_FUNC, INPUTCONFIG_FUNC) ||
mxc_request_iomux(MX31_PIN_USB_PWR,
OUTPUTCONFIG_FUNC, INPUTCONFIG_FUNC)) {
return -EINVAL;
}
return 0;
}
EXPORT_SYMBOL(gpio_usbotg_fs_active);
void gpio_usbotg_fs_inactive(void)
{
mxc_free_iomux(MX31_PIN_USBOTG_DATA0,
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_free_iomux(MX31_PIN_USBOTG_DATA1,
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_free_iomux(MX31_PIN_USBOTG_DATA2,
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_free_iomux(MX31_PIN_USBOTG_DATA3,
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_free_iomux(MX31_PIN_USBOTG_DATA4,
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_free_iomux(MX31_PIN_USBOTG_DATA5,
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_free_iomux(MX31_PIN_USBOTG_DATA6,
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_free_iomux(MX31_PIN_USBOTG_DATA7,
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_free_iomux(MX31_PIN_USBOTG_CLK,
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_free_iomux(MX31_PIN_USBOTG_DIR,
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_free_iomux(MX31_PIN_USBOTG_NXT,
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_free_iomux(MX31_PIN_USBOTG_STP,
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
mxc_free_iomux(MX31_PIN_USB_PWR,
OUTPUTCONFIG_GPIO, INPUTCONFIG_NONE);
}
EXPORT_SYMBOL(gpio_usbotg_fs_inactive);
Sorry for being so long! I just didn't want to forget anything.