@ -137,24 +137,29 @@ static const u8 utmip_elastic_limit = 16;
/* UTMIP High Speed Sync Start Delay */
static const u8 utmip_hs_sync_start_delay = 9 ;
/* Put the port into host mode (this only works for OTG ports) */
/* Put the port into host mode */
static void set_host_mode ( struct fdt_usb * config )
{
if ( config - > dr_mode = = DR_MODE_OTG ) {
/* Check whether remote host from USB1 is driving VBus */
if ( readl ( & config - > reg - > phy_vbus_sensors ) & VBUS_VLD_STS )
return ;
/*
* If not driving , we set the GPIO to enable VBUS . We assume
* that the pinmux is set up correctly for this .
*/
if ( fdt_gpio_isvalid ( & config - > vbus_gpio ) ) {
fdtdec_setup_gpio ( & config - > vbus_gpio ) ;
gpio_direction_output ( config - > vbus_gpio . gpio , 1 ) ;
debug ( " set_host_mode: GPIO %d high \n " ,
config - > vbus_gpio . gpio ) ;
}
/*
* If we are an OTG port , check if remote host is driving VBus and
* bail out in this case .
*/
if ( config - > dr_mode = = DR_MODE_OTG & &
( readl ( & config - > reg - > phy_vbus_sensors ) & VBUS_VLD_STS ) )
return ;
/*
* If not driving , we set the GPIO to enable VBUS . We assume
* that the pinmux is set up correctly for this .
*/
if ( fdt_gpio_isvalid ( & config - > vbus_gpio ) ) {
fdtdec_setup_gpio ( & config - > vbus_gpio ) ;
gpio_direction_output ( config - > vbus_gpio . gpio ,
( config - > vbus_gpio . flags & FDT_GPIO_ACTIVE_LOW ) ?
0 : 1 ) ;
debug ( " set_host_mode: GPIO %d %s \n " , config - > vbus_gpio . gpio ,
( config - > vbus_gpio . flags & FDT_GPIO_ACTIVE_LOW ) ?
" low " : " high " ) ;
}
}