diff options
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.patch | 160 |
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 @@ | |||
1 | From 70f5e1a0e6639710503a9ffb9008ddcd2bb3f06e Mon Sep 17 00:00:00 2001 | ||
2 | From: Keshava Munegowda <Keshava_mgowda@ti.com> | ||
3 | Date: Wed, 1 Jun 2011 11:02:54 -0700 | ||
4 | Subject: [PATCH 05/13] arm: omap: usb: register hwmods of usbhs | ||
5 | |||
6 | The hwmod structure of uhh and tll are retrived | ||
7 | and registered with omap device | ||
8 | |||
9 | Signed-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 | |||
14 | diff --git a/arch/arm/mach-omap2/usb-host.c b/arch/arm/mach-omap2/usb-host.c | ||
15 | index 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 | -- | ||
159 | 1.6.6.1 | ||
160 | |||