
Dear Ilya Yanok,
AM33xx has support for dual port MUSB OTG controller. This patch adds initialization for the controller using new MUSB gadget driver and ether gadget.
Signed-off-by: Ilya Yanok ilya.yanok@cogentembedded.com
Changes in v2:
- init both musb IPs (conditionally) from arch_init not from eth_initialize
arch/arm/cpu/armv7/am33xx/board.c | 107 ++++++++++++++++++++++++++- arch/arm/cpu/armv7/am33xx/clock.c | 8 ++ arch/arm/include/asm/arch-am33xx/cpu.h | 11 ++- arch/arm/include/asm/arch-am33xx/hardware.h | 4 + 4 files changed, 126 insertions(+), 4 deletions(-)
diff --git a/arch/arm/cpu/armv7/am33xx/board.c b/arch/arm/cpu/armv7/am33xx/board.c index b387ac2..9007356 100644 --- a/arch/arm/cpu/armv7/am33xx/board.c +++ b/arch/arm/cpu/armv7/am33xx/board.c @@ -33,6 +33,11 @@ #include <i2c.h> #include <miiphy.h> #include <cpsw.h> +#include <asm/errno.h> +#include <linux/usb/ch9.h> +#include <linux/usb/gadget.h> +#include <linux/usb/musb.h> +#include <asm/omap_musb.h>
DECLARE_GLOBAL_DATA_PTR;
@@ -227,6 +232,88 @@ void setup_clocks_for_console(void) return; }
+/* AM33XX has two MUSB controllers which can be host or gadget */ +#if (defined(CONFIG_MUSB_GADGET) || defined(CONFIG_MUSB_HOST)) && \
- (defined(CONFIG_AM335X_USB0) || defined(CONFIG_AM335X_USB1))
+/* USB 2.0 PHY Control */ +#define CM_PHY_PWRDN (1 << 0) +#define CM_PHY_OTG_PWRDN (1 << 1) +#define OTGVDET_EN (1 << 19) +#define OTGSESSENDEN (1 << 20)
+static void am33xx_usb_set_phy_power(u8 on, u32 *reg_addr) +{
- u32 usb_ctrl_reg;
- usb_ctrl_reg = readl(reg_addr);
- if (on) {
usb_ctrl_reg &= ~(CM_PHY_PWRDN | CM_PHY_OTG_PWRDN);
usb_ctrl_reg |= (OTGVDET_EN | OTGSESSENDEN);
- } else {
usb_ctrl_reg |= (CM_PHY_PWRDN | CM_PHY_OTG_PWRDN);
- }
- writel(usb_ctrl_reg, reg_addr);
clrsetbits_le32() ?
[...]