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 {