diff options
author | Florian Fainelli <florian@openwrt.org> | 2012-10-08 09:11:39 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2012-10-22 14:29:12 -0400 |
commit | bb5da43e4525d3338f51edb980e3067b111b78aa (patch) | |
tree | b3864aba6f7343aa204c07dfc483b71d30b76ed2 /drivers/usb/host | |
parent | e223a4cca70fb6d3954abab7e96a5f54d64d79d4 (diff) |
USB: OHCI: remove Alchemy OHCI platform driver.
All users have been converted to use the OHCI platform driver instead, thus
making ohci-au1xxx obsolete, remove it.
Signed-off-by: Florian Fainelli <florian@openwrt.org>
Acked-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/usb/host')
-rw-r--r-- | drivers/usb/host/ohci-au1xxx.c | 234 | ||||
-rw-r--r-- | drivers/usb/host/ohci-hcd.c | 5 |
2 files changed, 0 insertions, 239 deletions
diff --git a/drivers/usb/host/ohci-au1xxx.c b/drivers/usb/host/ohci-au1xxx.c deleted file mode 100644 index c611699b4aa6..000000000000 --- a/drivers/usb/host/ohci-au1xxx.c +++ /dev/null | |||
@@ -1,234 +0,0 @@ | |||
1 | /* | ||
2 | * OHCI HCD (Host Controller Driver) for USB. | ||
3 | * | ||
4 | * (C) Copyright 1999 Roman Weissgaerber <weissg@vienna.at> | ||
5 | * (C) Copyright 2000-2002 David Brownell <dbrownell@users.sourceforge.net> | ||
6 | * (C) Copyright 2002 Hewlett-Packard Company | ||
7 | * | ||
8 | * Bus Glue for AMD Alchemy Au1xxx | ||
9 | * | ||
10 | * Written by Christopher Hoover <ch@hpl.hp.com> | ||
11 | * Based on fragments of previous driver by Russell King et al. | ||
12 | * | ||
13 | * Modified for LH7A404 from ohci-sa1111.c | ||
14 | * by Durgesh Pattamatta <pattamattad@sharpsec.com> | ||
15 | * Modified for AMD Alchemy Au1xxx | ||
16 | * by Matt Porter <mporter@kernel.crashing.org> | ||
17 | * | ||
18 | * This file is licenced under the GPL. | ||
19 | */ | ||
20 | |||
21 | #include <linux/platform_device.h> | ||
22 | #include <linux/signal.h> | ||
23 | |||
24 | #include <asm/mach-au1x00/au1000.h> | ||
25 | |||
26 | |||
27 | extern int usb_disabled(void); | ||
28 | |||
29 | static int __devinit ohci_au1xxx_start(struct usb_hcd *hcd) | ||
30 | { | ||
31 | struct ohci_hcd *ohci = hcd_to_ohci(hcd); | ||
32 | int ret; | ||
33 | |||
34 | ohci_dbg(ohci, "ohci_au1xxx_start, ohci:%p", ohci); | ||
35 | |||
36 | if ((ret = ohci_init(ohci)) < 0) | ||
37 | return ret; | ||
38 | |||
39 | if ((ret = ohci_run(ohci)) < 0) { | ||
40 | dev_err(hcd->self.controller, "can't start %s", | ||
41 | hcd->self.bus_name); | ||
42 | ohci_stop(hcd); | ||
43 | return ret; | ||
44 | } | ||
45 | |||
46 | return 0; | ||
47 | } | ||
48 | |||
49 | static const struct hc_driver ohci_au1xxx_hc_driver = { | ||
50 | .description = hcd_name, | ||
51 | .product_desc = "Au1xxx OHCI", | ||
52 | .hcd_priv_size = sizeof(struct ohci_hcd), | ||
53 | |||
54 | /* | ||
55 | * generic hardware linkage | ||
56 | */ | ||
57 | .irq = ohci_irq, | ||
58 | .flags = HCD_USB11 | HCD_MEMORY, | ||
59 | |||
60 | /* | ||
61 | * basic lifecycle operations | ||
62 | */ | ||
63 | .start = ohci_au1xxx_start, | ||
64 | .stop = ohci_stop, | ||
65 | .shutdown = ohci_shutdown, | ||
66 | |||
67 | /* | ||
68 | * managing i/o requests and associated device resources | ||
69 | */ | ||
70 | .urb_enqueue = ohci_urb_enqueue, | ||
71 | .urb_dequeue = ohci_urb_dequeue, | ||
72 | .endpoint_disable = ohci_endpoint_disable, | ||
73 | |||
74 | /* | ||
75 | * scheduling support | ||
76 | */ | ||
77 | .get_frame_number = ohci_get_frame, | ||
78 | |||
79 | /* | ||
80 | * root hub support | ||
81 | */ | ||
82 | .hub_status_data = ohci_hub_status_data, | ||
83 | .hub_control = ohci_hub_control, | ||
84 | #ifdef CONFIG_PM | ||
85 | .bus_suspend = ohci_bus_suspend, | ||
86 | .bus_resume = ohci_bus_resume, | ||
87 | #endif | ||
88 | .start_port_reset = ohci_start_port_reset, | ||
89 | }; | ||
90 | |||
91 | static int ohci_hcd_au1xxx_drv_probe(struct platform_device *pdev) | ||
92 | { | ||
93 | int ret, unit; | ||
94 | struct usb_hcd *hcd; | ||
95 | |||
96 | if (usb_disabled()) | ||
97 | return -ENODEV; | ||
98 | |||
99 | if (pdev->resource[1].flags != IORESOURCE_IRQ) { | ||
100 | pr_debug("resource[1] is not IORESOURCE_IRQ\n"); | ||
101 | return -ENOMEM; | ||
102 | } | ||
103 | |||
104 | hcd = usb_create_hcd(&ohci_au1xxx_hc_driver, &pdev->dev, "au1xxx"); | ||
105 | if (!hcd) | ||
106 | return -ENOMEM; | ||
107 | |||
108 | hcd->rsrc_start = pdev->resource[0].start; | ||
109 | hcd->rsrc_len = pdev->resource[0].end - pdev->resource[0].start + 1; | ||
110 | |||
111 | if (!request_mem_region(hcd->rsrc_start, hcd->rsrc_len, hcd_name)) { | ||
112 | pr_debug("request_mem_region failed\n"); | ||
113 | ret = -EBUSY; | ||
114 | goto err1; | ||
115 | } | ||
116 | |||
117 | hcd->regs = ioremap(hcd->rsrc_start, hcd->rsrc_len); | ||
118 | if (!hcd->regs) { | ||
119 | pr_debug("ioremap failed\n"); | ||
120 | ret = -ENOMEM; | ||
121 | goto err2; | ||
122 | } | ||
123 | |||
124 | unit = (hcd->rsrc_start == AU1300_USB_OHCI1_PHYS_ADDR) ? | ||
125 | ALCHEMY_USB_OHCI1 : ALCHEMY_USB_OHCI0; | ||
126 | if (alchemy_usb_control(unit, 1)) { | ||
127 | printk(KERN_INFO "%s: controller init failed!\n", pdev->name); | ||
128 | ret = -ENODEV; | ||
129 | goto err3; | ||
130 | } | ||
131 | |||
132 | ohci_hcd_init(hcd_to_ohci(hcd)); | ||
133 | |||
134 | ret = usb_add_hcd(hcd, pdev->resource[1].start, | ||
135 | IRQF_SHARED); | ||
136 | if (ret == 0) { | ||
137 | platform_set_drvdata(pdev, hcd); | ||
138 | return ret; | ||
139 | } | ||
140 | |||
141 | alchemy_usb_control(unit, 0); | ||
142 | err3: | ||
143 | iounmap(hcd->regs); | ||
144 | err2: | ||
145 | release_mem_region(hcd->rsrc_start, hcd->rsrc_len); | ||
146 | err1: | ||
147 | usb_put_hcd(hcd); | ||
148 | return ret; | ||
149 | } | ||
150 | |||
151 | static int ohci_hcd_au1xxx_drv_remove(struct platform_device *pdev) | ||
152 | { | ||
153 | struct usb_hcd *hcd = platform_get_drvdata(pdev); | ||
154 | int unit; | ||
155 | |||
156 | unit = (hcd->rsrc_start == AU1300_USB_OHCI1_PHYS_ADDR) ? | ||
157 | ALCHEMY_USB_OHCI1 : ALCHEMY_USB_OHCI0; | ||
158 | usb_remove_hcd(hcd); | ||
159 | alchemy_usb_control(unit, 0); | ||
160 | iounmap(hcd->regs); | ||
161 | release_mem_region(hcd->rsrc_start, hcd->rsrc_len); | ||
162 | usb_put_hcd(hcd); | ||
163 | platform_set_drvdata(pdev, NULL); | ||
164 | |||
165 | return 0; | ||
166 | } | ||
167 | |||
168 | #ifdef CONFIG_PM | ||
169 | static int ohci_hcd_au1xxx_drv_suspend(struct device *dev) | ||
170 | { | ||
171 | struct usb_hcd *hcd = dev_get_drvdata(dev); | ||
172 | struct ohci_hcd *ohci = hcd_to_ohci(hcd); | ||
173 | unsigned long flags; | ||
174 | int rc; | ||
175 | |||
176 | rc = 0; | ||
177 | |||
178 | /* Root hub was already suspended. Disable irq emission and | ||
179 | * mark HW unaccessible, bail out if RH has been resumed. Use | ||
180 | * the spinlock to properly synchronize with possible pending | ||
181 | * RH suspend or resume activity. | ||
182 | */ | ||
183 | spin_lock_irqsave(&ohci->lock, flags); | ||
184 | if (ohci->rh_state != OHCI_RH_SUSPENDED) { | ||
185 | rc = -EINVAL; | ||
186 | goto bail; | ||
187 | } | ||
188 | ohci_writel(ohci, OHCI_INTR_MIE, &ohci->regs->intrdisable); | ||
189 | (void)ohci_readl(ohci, &ohci->regs->intrdisable); | ||
190 | |||
191 | clear_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags); | ||
192 | |||
193 | alchemy_usb_control(ALCHEMY_USB_OHCI0, 0); | ||
194 | bail: | ||
195 | spin_unlock_irqrestore(&ohci->lock, flags); | ||
196 | |||
197 | return rc; | ||
198 | } | ||
199 | |||
200 | static int ohci_hcd_au1xxx_drv_resume(struct device *dev) | ||
201 | { | ||
202 | struct usb_hcd *hcd = dev_get_drvdata(dev); | ||
203 | |||
204 | alchemy_usb_control(ALCHEMY_USB_OHCI0, 1); | ||
205 | |||
206 | set_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags); | ||
207 | ohci_finish_controller_resume(hcd); | ||
208 | |||
209 | return 0; | ||
210 | } | ||
211 | |||
212 | static const struct dev_pm_ops au1xxx_ohci_pmops = { | ||
213 | .suspend = ohci_hcd_au1xxx_drv_suspend, | ||
214 | .resume = ohci_hcd_au1xxx_drv_resume, | ||
215 | }; | ||
216 | |||
217 | #define AU1XXX_OHCI_PMOPS &au1xxx_ohci_pmops | ||
218 | |||
219 | #else | ||
220 | #define AU1XXX_OHCI_PMOPS NULL | ||
221 | #endif | ||
222 | |||
223 | static struct platform_driver ohci_hcd_au1xxx_driver = { | ||
224 | .probe = ohci_hcd_au1xxx_drv_probe, | ||
225 | .remove = ohci_hcd_au1xxx_drv_remove, | ||
226 | .shutdown = usb_hcd_platform_shutdown, | ||
227 | .driver = { | ||
228 | .name = "au1xxx-ohci", | ||
229 | .owner = THIS_MODULE, | ||
230 | .pm = AU1XXX_OHCI_PMOPS, | ||
231 | }, | ||
232 | }; | ||
233 | |||
234 | MODULE_ALIAS("platform:au1xxx-ohci"); | ||
diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c index ecff612ad3b0..180a2b01db56 100644 --- a/drivers/usb/host/ohci-hcd.c +++ b/drivers/usb/host/ohci-hcd.c | |||
@@ -1130,11 +1130,6 @@ MODULE_LICENSE ("GPL"); | |||
1130 | #define PLATFORM_DRIVER ohci_hcd_ep93xx_driver | 1130 | #define PLATFORM_DRIVER ohci_hcd_ep93xx_driver |
1131 | #endif | 1131 | #endif |
1132 | 1132 | ||
1133 | #ifdef CONFIG_MIPS_ALCHEMY | ||
1134 | #include "ohci-au1xxx.c" | ||
1135 | #define PLATFORM_DRIVER ohci_hcd_au1xxx_driver | ||
1136 | #endif | ||
1137 | |||
1138 | #ifdef CONFIG_ARCH_AT91 | 1133 | #ifdef CONFIG_ARCH_AT91 |
1139 | #include "ohci-at91.c" | 1134 | #include "ohci-at91.c" |
1140 | #define PLATFORM_DRIVER ohci_hcd_at91_driver | 1135 | #define PLATFORM_DRIVER ohci_hcd_at91_driver |