USB直接作为host时省掉一个5V的DCDC,直接连接到5V的输入上面。对于Linux SDK,需要一个patch去确保这个设计能够正常工作,patch内容请参考:
static struct omap_musb_board_data musb_board_data = {
.interface_type = MUSB_INTERFACE_UTMI, /* EVM: MUSB_INTERFACE_ULPI */
/*
* mode[0:3] = USB0PORT's mode
* mode[4:7] = USB1PORT's mode
* AM335X beta EVM has USB0 in OTG mode and USB1 in host mode.
*/
/* Note: USB0 is for hub host, and USB1 should be connected with B or mini-B connector */
.mode = (MUSB_PERIPHERAL << 4) | MUSB_HOST, /* EVM: (MUSB_HOST << 4) | MUSB_OTG */
.power = 100, /* EVM: 500 */
#endif
.instances = 1,
};
diff --git a/arch/arm/mach-omap2/omap_phy_internal.c b/arch/arm/mach-omap2/omap_phy_internal.c index 13bfef3..e41b224 100644 --- a/arch/arm/mach-omap2/omap_phy_internal.c +++ b/arch/arm/mach-omap2/omap_phy_internal.c @@ -288,8 +288,17 @@ void ti81xx_musb_phy_power(u8 id, u8 on , bool wkup) TI816X_USBPHY0_NORMAL_MODE; usbphycfg &= ~TI816X_USBPHY_REFCLK_OSC; } else if (cpu_is_am33xx()) { - usbphycfg &= ~(USBPHY_CM_PWRDN | USBPHY_OTG_PWRDN); - usbphycfg |= (USBPHY_OTGVDET_EN | USBPHY_OTGSESSEND_EN); + usbphycfg &= ~(USBPHY_CM_PWRDN | USBPHY_OTG_PWRDN | USBPHY_OTGVDET_EN); + + /* HACK: If USB0 port is in host-only mode, clear its + * USBPHY_OTGVDET_EN bit to ignore first VBUS sensing. + * Change 0 to 1 if USB1 port is in host-only mode. + */ + if (id == 0) + usbphycfg |= USBPHY_OTGSESSEND_EN; + else + usbphycfg |= (USBPHY_OTGVDET_EN | USBPHY_OTGSESSEND_EN); + usbwkupctrl = AM33XX_USB_WKUP_CTRL_DISABLE; } } else {