diff options
Diffstat (limited to 'arch/arm/mach-omap2/usb-host.c')
| -rw-r--r-- | arch/arm/mach-omap2/usb-host.c | 100 | 
1 files changed, 34 insertions, 66 deletions
diff --git a/arch/arm/mach-omap2/usb-host.c b/arch/arm/mach-omap2/usb-host.c index 89ae29847c5..771dc781b74 100644 --- a/arch/arm/mach-omap2/usb-host.c +++ b/arch/arm/mach-omap2/usb-host.c @@ -28,51 +28,28 @@  #include <mach/hardware.h>  #include <mach/irqs.h>  #include <plat/usb.h> +#include <plat/omap_device.h>  #include "mux.h"  #ifdef CONFIG_MFD_OMAP_USB_HOST -#define OMAP_USBHS_DEVICE	"usbhs-omap" - -static struct resource usbhs_resources[] = { -	{ -		.name	= "uhh", -		.flags	= IORESOURCE_MEM, -	}, -	{ -		.name	= "tll", -		.flags	= IORESOURCE_MEM, -	}, -	{ -		.name	= "ehci", -		.flags	= IORESOURCE_MEM, -	}, -	{ -		.name	= "ehci-irq", -		.flags	= IORESOURCE_IRQ, -	}, -	{ -		.name	= "ohci", -		.flags	= IORESOURCE_MEM, -	}, -	{ -		.name	= "ohci-irq", -		.flags	= IORESOURCE_IRQ, -	} -}; - -static struct platform_device usbhs_device = { -	.name		= OMAP_USBHS_DEVICE, -	.id		= 0, -	.num_resources	= ARRAY_SIZE(usbhs_resources), -	.resource	= usbhs_resources, -}; +#define OMAP_USBHS_DEVICE	"usbhs_omap" +#define	USBHS_UHH_HWMODNAME	"usb_host_hs" +#define USBHS_TLL_HWMODNAME	"usb_tll_hs"  static struct usbhs_omap_platform_data		usbhs_data;  static struct ehci_hcd_omap_platform_data	ehci_data;  static struct ohci_hcd_omap_platform_data	ohci_data; +static struct omap_device_pm_latency omap_uhhtll_latency[] = { +	  { +		.deactivate_func = omap_device_idle_hwmods, +		.activate_func	 = omap_device_enable_hwmods, +		.flags = OMAP_DEVICE_LATENCY_AUTO_ADJUST, +	  }, +}; +  /* MUX settings for EHCI pins */  /*   * setup_ehci_io_mux - initialize IO pad mux for USBHOST @@ -508,7 +485,10 @@ static void setup_4430ohci_io_mux(const enum usbhs_omap_port_mode *port_mode)  void __init usbhs_init(const struct usbhs_omap_board_data *pdata)  { -	int	i; +	struct omap_hwmod	*oh[2]; +	struct omap_device	*od; +	int			bus_id = -1; +	int			i;  	for (i = 0; i < OMAP3_HS_USB_PORTS; i++) {  		usbhs_data.port_mode[i] = pdata->port_mode[i]; @@ -523,44 +503,34 @@ void __init usbhs_init(const struct usbhs_omap_board_data *pdata)  	usbhs_data.ohci_data = &ohci_data;  	if (cpu_is_omap34xx()) { -		usbhs_resources[0].start = OMAP34XX_UHH_CONFIG_BASE; -		usbhs_resources[0].end = OMAP34XX_UHH_CONFIG_BASE + SZ_1K - 1; -		usbhs_resources[1].start = OMAP34XX_USBTLL_BASE; -		usbhs_resources[1].end = OMAP34XX_USBTLL_BASE + SZ_4K - 1; -		usbhs_resources[2].start	= OMAP34XX_EHCI_BASE; -		usbhs_resources[2].end	= OMAP34XX_EHCI_BASE + SZ_1K - 1; -		usbhs_resources[3].start = INT_34XX_EHCI_IRQ; -		usbhs_resources[4].start	= OMAP34XX_OHCI_BASE; -		usbhs_resources[4].end	= OMAP34XX_OHCI_BASE + SZ_1K - 1; -		usbhs_resources[5].start = INT_34XX_OHCI_IRQ;  		setup_ehci_io_mux(pdata->port_mode);  		setup_ohci_io_mux(pdata->port_mode);  	} else if (cpu_is_omap44xx()) { -		usbhs_resources[0].start = OMAP44XX_UHH_CONFIG_BASE; -		usbhs_resources[0].end = OMAP44XX_UHH_CONFIG_BASE + SZ_1K - 1; -		usbhs_resources[1].start = OMAP44XX_USBTLL_BASE; -		usbhs_resources[1].end = OMAP44XX_USBTLL_BASE + SZ_4K - 1; -		usbhs_resources[2].start = OMAP44XX_HSUSB_EHCI_BASE; -		usbhs_resources[2].end = OMAP44XX_HSUSB_EHCI_BASE + SZ_1K - 1; -		usbhs_resources[3].start = OMAP44XX_IRQ_EHCI; -		usbhs_resources[4].start = OMAP44XX_HSUSB_OHCI_BASE; -		usbhs_resources[4].end = OMAP44XX_HSUSB_OHCI_BASE + SZ_1K - 1; -		usbhs_resources[5].start = OMAP44XX_IRQ_OHCI;  		setup_4430ehci_io_mux(pdata->port_mode);  		setup_4430ohci_io_mux(pdata->port_mode);  	} -	if (platform_device_add_data(&usbhs_device, -				&usbhs_data, sizeof(usbhs_data)) < 0) { -		printk(KERN_ERR "USBHS platform_device_add_data failed\n"); -		goto init_end; +	oh[0] = omap_hwmod_lookup(USBHS_UHH_HWMODNAME); +	if (!oh[0]) { +		pr_err("Could not look up %s\n", USBHS_UHH_HWMODNAME); +		return;  	} -	if (platform_device_register(&usbhs_device) < 0) -		printk(KERN_ERR "USBHS platform_device_register failed\n"); +	oh[1] = omap_hwmod_lookup(USBHS_TLL_HWMODNAME); +	if (!oh[1]) { +		pr_err("Could not look up %s\n", USBHS_TLL_HWMODNAME); +		return; +	} -init_end: -	return; +	od = omap_device_build_ss(OMAP_USBHS_DEVICE, bus_id, oh, 2, +				(void *)&usbhs_data, sizeof(usbhs_data), +				omap_uhhtll_latency, +				ARRAY_SIZE(omap_uhhtll_latency), false); +	if (IS_ERR(od)) { +		pr_err("Could not build hwmod devices %s,%s\n", +			USBHS_UHH_HWMODNAME, USBHS_TLL_HWMODNAME); +		return; +	}  }  #else @@ -570,5 +540,3 @@ void __init usbhs_init(const struct usbhs_omap_board_data *pdata)  }  #endif - -  |