summaryrefslogtreecommitdiffstats
path: root/extras/recipes-kernel/linux/linux-omap-2.6.39/mfd/0005-arm-omap-usb-register-hwmods-of-usbhs.patch
diff options
context:
space:
mode:
Diffstat (limited to 'extras/recipes-kernel/linux/linux-omap-2.6.39/mfd/0005-arm-omap-usb-register-hwmods-of-usbhs.patch')
-rw-r--r--extras/recipes-kernel/linux/linux-omap-2.6.39/mfd/0005-arm-omap-usb-register-hwmods-of-usbhs.patch160
1 files changed, 160 insertions, 0 deletions
diff --git a/extras/recipes-kernel/linux/linux-omap-2.6.39/mfd/0005-arm-omap-usb-register-hwmods-of-usbhs.patch b/extras/recipes-kernel/linux/linux-omap-2.6.39/mfd/0005-arm-omap-usb-register-hwmods-of-usbhs.patch
new file mode 100644
index 00000000..8e9a4ba4
--- /dev/null
+++ b/extras/recipes-kernel/linux/linux-omap-2.6.39/mfd/0005-arm-omap-usb-register-hwmods-of-usbhs.patch
@@ -0,0 +1,160 @@
1From 70f5e1a0e6639710503a9ffb9008ddcd2bb3f06e Mon Sep 17 00:00:00 2001
2From: Keshava Munegowda <Keshava_mgowda@ti.com>
3Date: Wed, 1 Jun 2011 11:02:54 -0700
4Subject: [PATCH 05/13] arm: omap: usb: register hwmods of usbhs
5
6The hwmod structure of uhh and tll are retrived
7and registered with omap device
8
9Signed-off-by: Keshava Munegowda <keshava_mgowda@ti.com>
10---
11 arch/arm/mach-omap2/usb-host.c | 99 ++++++++++++++--------------------------
12 1 files changed, 35 insertions(+), 64 deletions(-)
13
14diff --git a/arch/arm/mach-omap2/usb-host.c b/arch/arm/mach-omap2/usb-host.c
15index 89ae298..9d762c4 100644
16--- a/arch/arm/mach-omap2/usb-host.c
17+++ b/arch/arm/mach-omap2/usb-host.c
18@@ -28,51 +28,28 @@
19 #include <mach/hardware.h>
20 #include <mach/irqs.h>
21 #include <plat/usb.h>
22+#include <plat/omap_device.h>
23
24 #include "mux.h"
25
26 #ifdef CONFIG_MFD_OMAP_USB_HOST
27
28-#define OMAP_USBHS_DEVICE "usbhs-omap"
29-
30-static struct resource usbhs_resources[] = {
31- {
32- .name = "uhh",
33- .flags = IORESOURCE_MEM,
34- },
35- {
36- .name = "tll",
37- .flags = IORESOURCE_MEM,
38- },
39- {
40- .name = "ehci",
41- .flags = IORESOURCE_MEM,
42- },
43- {
44- .name = "ehci-irq",
45- .flags = IORESOURCE_IRQ,
46- },
47- {
48- .name = "ohci",
49- .flags = IORESOURCE_MEM,
50- },
51- {
52- .name = "ohci-irq",
53- .flags = IORESOURCE_IRQ,
54- }
55-};
56-
57-static struct platform_device usbhs_device = {
58- .name = OMAP_USBHS_DEVICE,
59- .id = 0,
60- .num_resources = ARRAY_SIZE(usbhs_resources),
61- .resource = usbhs_resources,
62-};
63+#define OMAP_USBHS_DEVICE "usbhs_omap"
64+#define USBHS_UHH_HWMODNAME "usbhs_uhh"
65+#define USBHS_TLL_HWMODNAME "usbhs_tll"
66
67 static struct usbhs_omap_platform_data usbhs_data;
68 static struct ehci_hcd_omap_platform_data ehci_data;
69 static struct ohci_hcd_omap_platform_data ohci_data;
70
71+static struct omap_device_pm_latency omap_uhhtll_latency[] = {
72+ {
73+ .deactivate_func = omap_device_idle_hwmods,
74+ .activate_func = omap_device_enable_hwmods,
75+ .flags = OMAP_DEVICE_LATENCY_AUTO_ADJUST,
76+ },
77+};
78+
79 /* MUX settings for EHCI pins */
80 /*
81 * setup_ehci_io_mux - initialize IO pad mux for USBHOST
82@@ -508,7 +485,10 @@ static void setup_4430ohci_io_mux(const enum usbhs_omap_port_mode *port_mode)
83
84 void __init usbhs_init(const struct usbhs_omap_board_data *pdata)
85 {
86- int i;
87+ struct omap_hwmod *oh[2];
88+ struct omap_device *od;
89+ int bus_id = -1;
90+ int i;
91
92 for (i = 0; i < OMAP3_HS_USB_PORTS; i++) {
93 usbhs_data.port_mode[i] = pdata->port_mode[i];
94@@ -523,44 +503,35 @@ void __init usbhs_init(const struct usbhs_omap_board_data *pdata)
95 usbhs_data.ohci_data = &ohci_data;
96
97 if (cpu_is_omap34xx()) {
98- usbhs_resources[0].start = OMAP34XX_UHH_CONFIG_BASE;
99- usbhs_resources[0].end = OMAP34XX_UHH_CONFIG_BASE + SZ_1K - 1;
100- usbhs_resources[1].start = OMAP34XX_USBTLL_BASE;
101- usbhs_resources[1].end = OMAP34XX_USBTLL_BASE + SZ_4K - 1;
102- usbhs_resources[2].start = OMAP34XX_EHCI_BASE;
103- usbhs_resources[2].end = OMAP34XX_EHCI_BASE + SZ_1K - 1;
104- usbhs_resources[3].start = INT_34XX_EHCI_IRQ;
105- usbhs_resources[4].start = OMAP34XX_OHCI_BASE;
106- usbhs_resources[4].end = OMAP34XX_OHCI_BASE + SZ_1K - 1;
107- usbhs_resources[5].start = INT_34XX_OHCI_IRQ;
108 setup_ehci_io_mux(pdata->port_mode);
109 setup_ohci_io_mux(pdata->port_mode);
110 } else if (cpu_is_omap44xx()) {
111- usbhs_resources[0].start = OMAP44XX_UHH_CONFIG_BASE;
112- usbhs_resources[0].end = OMAP44XX_UHH_CONFIG_BASE + SZ_1K - 1;
113- usbhs_resources[1].start = OMAP44XX_USBTLL_BASE;
114- usbhs_resources[1].end = OMAP44XX_USBTLL_BASE + SZ_4K - 1;
115- usbhs_resources[2].start = OMAP44XX_HSUSB_EHCI_BASE;
116- usbhs_resources[2].end = OMAP44XX_HSUSB_EHCI_BASE + SZ_1K - 1;
117- usbhs_resources[3].start = OMAP44XX_IRQ_EHCI;
118- usbhs_resources[4].start = OMAP44XX_HSUSB_OHCI_BASE;
119- usbhs_resources[4].end = OMAP44XX_HSUSB_OHCI_BASE + SZ_1K - 1;
120- usbhs_resources[5].start = OMAP44XX_IRQ_OHCI;
121 setup_4430ehci_io_mux(pdata->port_mode);
122 setup_4430ohci_io_mux(pdata->port_mode);
123 }
124
125- if (platform_device_add_data(&usbhs_device,
126- &usbhs_data, sizeof(usbhs_data)) < 0) {
127- printk(KERN_ERR "USBHS platform_device_add_data failed\n");
128- goto init_end;
129+ oh[0] = omap_hwmod_lookup(USBHS_UHH_HWMODNAME);
130+ if (!oh[0]) {
131+ pr_err("Could not look up %s\n", USBHS_UHH_HWMODNAME);
132+ return;
133 }
134
135- if (platform_device_register(&usbhs_device) < 0)
136- printk(KERN_ERR "USBHS platform_device_register failed\n");
137+ oh[1] = omap_hwmod_lookup(USBHS_TLL_HWMODNAME);
138+ if (!oh[1]) {
139+ pr_err("Could not look up %s\n", USBHS_TLL_HWMODNAME);
140+ return;
141+ }
142
143-init_end:
144- return;
145+ od = omap_device_build_ss(OMAP_USBHS_DEVICE, bus_id, oh, 2,
146+ (void *)&usbhs_data, sizeof(usbhs_data),
147+ omap_uhhtll_latency,
148+ ARRAY_SIZE(omap_uhhtll_latency), false);
149+
150+ if (IS_ERR(od)) {
151+ pr_err("Could not build hwmod devices %s, %s\n",
152+ USBHS_UHH_HWMODNAME, USBHS_TLL_HWMODNAME);
153+ return;
154+ }
155 }
156
157 #else
158--
1591.6.6.1
160