diff options
| author | Ajay Kumar Gupta <ajay.gupta@ti.com> | 2010-10-19 10:08:11 +0300 | 
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@suse.de> | 2010-10-22 10:22:16 -0700 | 
| commit | 3a0d30bcdfa73bd865f29899eb4bf29b58c4f54a (patch) | |
| tree | 0f566b569e34af9fab7e22e2feec853b9a5cbfb5 /arch/arm/mach-omap2 | |
| parent | 436a389096e1feda2c382cad83b6a8d6de8615a0 (diff) | |
| download | olio-linux-3.10-3a0d30bcdfa73bd865f29899eb4bf29b58c4f54a.tar.xz olio-linux-3.10-3a0d30bcdfa73bd865f29899eb4bf29b58c4f54a.zip  | |
USB: AM35x: Add musb support
AM35x has musb interface (version 1.8) and uses CPPI41 DMA engine.
It has USB phy built inside the IP itself.
Signed-off-by: Ajay Kumar Gupta <ajay.gupta@ti.com>
Acked-by: Tony Lindgren <tony@atomide.com>
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-kernel@vger.kernel.org
Cc: linux-omap@vger.kernel.org
Signed-off-by: Felipe Balbi <balbi@ti.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'arch/arm/mach-omap2')
| -rw-r--r-- | arch/arm/mach-omap2/board-am3517evm.c | 30 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/usb-musb.c | 4 | 
2 files changed, 34 insertions, 0 deletions
diff --git a/arch/arm/mach-omap2/board-am3517evm.c b/arch/arm/mach-omap2/board-am3517evm.c index 4d0f5859286..9ac9de6bb97 100644 --- a/arch/arm/mach-omap2/board-am3517evm.c +++ b/arch/arm/mach-omap2/board-am3517evm.c @@ -375,6 +375,31 @@ static void __init am3517_evm_init_irq(void)  	omap_gpio_init();  } +static struct omap_musb_board_data musb_board_data = { +	.interface_type         = MUSB_INTERFACE_ULPI, +	.mode                   = MUSB_OTG, +	.power                  = 500, +}; + +static __init void am3517_evm_musb_init(void) +{ +	u32 devconf2; + +	/* +	 * Set up USB clock/mode in the DEVCONF2 register. +	 */ +	devconf2 = omap_ctrl_readl(AM35XX_CONTROL_DEVCONF2); + +	/* USB2.0 PHY reference clock is 13 MHz */ +	devconf2 &= ~(CONF2_REFFREQ | CONF2_OTGMODE | CONF2_PHY_GPIOMODE); +	devconf2 |=  CONF2_REFFREQ_13MHZ | CONF2_SESENDEN | CONF2_VBDTCTEN +			| CONF2_DATPOL; + +	omap_ctrl_writel(devconf2, AM35XX_CONTROL_DEVCONF2); + +	usb_musb_init(&musb_board_data); +} +  static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {  	.port_mode[0] = EHCI_HCD_OMAP_MODE_PHY,  #if defined(CONFIG_PANEL_SHARP_LQ043T1DG01) || \ @@ -393,6 +418,8 @@ static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {  #ifdef CONFIG_OMAP_MUX  static struct omap_board_mux board_mux[] __initdata = { +	/* USB OTG DRVVBUS offset = 0x212 */ +	OMAP3_MUX(SAD2D_MCAD23, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLDOWN),  	{ .reg_offset = OMAP_MUX_TERMINATOR },  };  #else @@ -459,6 +486,9 @@ static void __init am3517_evm_init(void)  				ARRAY_SIZE(am3517evm_i2c1_boardinfo));  	/*Ethernet*/  	am3517_evm_ethernet_init(&am3517_evm_emac_pdata); + +	/* MUSB */ +	am3517_evm_musb_init();  }  MACHINE_START(OMAP3517EVM, "OMAP3517/AM3517 EVM") diff --git a/arch/arm/mach-omap2/usb-musb.c b/arch/arm/mach-omap2/usb-musb.c index 33a5cde1c22..72605584bff 100644 --- a/arch/arm/mach-omap2/usb-musb.c +++ b/arch/arm/mach-omap2/usb-musb.c @@ -28,6 +28,7 @@  #include <mach/hardware.h>  #include <mach/irqs.h> +#include <mach/am35xx.h>  #include <plat/usb.h>  #ifdef CONFIG_USB_MUSB_SOC @@ -89,6 +90,9 @@ void __init usb_musb_init(struct omap_musb_board_data *board_data)  {  	if (cpu_is_omap243x()) {  		musb_resources[0].start = OMAP243X_HS_BASE; +	} else if (cpu_is_omap3517() || cpu_is_omap3505()) { +		musb_resources[0].start = AM35XX_IPSS_USBOTGSS_BASE; +		musb_resources[1].start = INT_35XX_USBOTG_IRQ;  	} else if (cpu_is_omap34xx()) {  		musb_resources[0].start = OMAP34XX_HSUSB_OTG_BASE;  	} else if (cpu_is_omap44xx()) {  |