diff options
Diffstat (limited to 'recipes/linux/linux-omap-2.6.39/mfd/0005-arm-omap-usb-register-hwmods-of-usbhs.patch')
-rw-r--r-- | recipes/linux/linux-omap-2.6.39/mfd/0005-arm-omap-usb-register-hwmods-of-usbhs.patch | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/recipes/linux/linux-omap-2.6.39/mfd/0005-arm-omap-usb-register-hwmods-of-usbhs.patch b/recipes/linux/linux-omap-2.6.39/mfd/0005-arm-omap-usb-register-hwmods-of-usbhs.patch new file mode 100644 index 0000000000..8e9a4ba48b --- /dev/null +++ b/recipes/linux/linux-omap-2.6.39/mfd/0005-arm-omap-usb-register-hwmods-of-usbhs.patch @@ -0,0 +1,160 @@ +From 70f5e1a0e6639710503a9ffb9008ddcd2bb3f06e Mon Sep 17 00:00:00 2001 +From: Keshava Munegowda <Keshava_mgowda@ti.com> +Date: Wed, 1 Jun 2011 11:02:54 -0700 +Subject: [PATCH 05/13] arm: omap: usb: register hwmods of usbhs + +The hwmod structure of uhh and tll are retrived +and registered with omap device + +Signed-off-by: Keshava Munegowda <keshava_mgowda@ti.com> +--- + arch/arm/mach-omap2/usb-host.c | 99 ++++++++++++++-------------------------- + 1 files changed, 35 insertions(+), 64 deletions(-) + +diff --git a/arch/arm/mach-omap2/usb-host.c b/arch/arm/mach-omap2/usb-host.c +index 89ae298..9d762c4 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 "usbhs_uhh" ++#define USBHS_TLL_HWMODNAME "usbhs_tll" + + 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,35 @@ 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 +-- +1.6.6.1 + |