aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/usb/host/ohci-at91.c2
-rw-r--r--drivers/usb/host/ohci-au1xxx.c5
-rw-r--r--drivers/usb/host/ohci-dbg.c5
-rw-r--r--drivers/usb/host/ohci-ep93xx.c1
-rw-r--r--drivers/usb/host/ohci-hcd.c41
-rw-r--r--drivers/usb/host/ohci-hub.c67
-rw-r--r--drivers/usb/host/ohci-lh7a404.c5
-rw-r--r--drivers/usb/host/ohci-omap.c5
-rw-r--r--drivers/usb/host/ohci-pci.c5
-rw-r--r--drivers/usb/host/ohci-ppc-soc.c1
-rw-r--r--drivers/usb/host/ohci-pxa27x.c1
-rw-r--r--drivers/usb/host/ohci-s3c2410.c1
-rw-r--r--drivers/usb/host/ohci-sa1111.c5
13 files changed, 99 insertions, 45 deletions
diff --git a/drivers/usb/host/ohci-at91.c b/drivers/usb/host/ohci-at91.c
index 85cc059705a6..33b75087bc0c 100644
--- a/drivers/usb/host/ohci-at91.c
+++ b/drivers/usb/host/ohci-at91.c
@@ -239,7 +239,7 @@ static const struct hc_driver ohci_at91_hc_driver = {
239 */ 239 */
240 .hub_status_data = ohci_hub_status_data, 240 .hub_status_data = ohci_hub_status_data,
241 .hub_control = ohci_hub_control, 241 .hub_control = ohci_hub_control,
242 242 .hub_irq_enable = ohci_rhsc_enable,
243#ifdef CONFIG_PM 243#ifdef CONFIG_PM
244 .bus_suspend = ohci_bus_suspend, 244 .bus_suspend = ohci_bus_suspend,
245 .bus_resume = ohci_bus_resume, 245 .bus_resume = ohci_bus_resume,
diff --git a/drivers/usb/host/ohci-au1xxx.c b/drivers/usb/host/ohci-au1xxx.c
index f7a975d5db09..44ed3a4c01ef 100644
--- a/drivers/usb/host/ohci-au1xxx.c
+++ b/drivers/usb/host/ohci-au1xxx.c
@@ -268,10 +268,6 @@ static const struct hc_driver ohci_au1xxx_hc_driver = {
268 * basic lifecycle operations 268 * basic lifecycle operations
269 */ 269 */
270 .start = ohci_au1xxx_start, 270 .start = ohci_au1xxx_start,
271#ifdef CONFIG_PM
272 /* suspend: ohci_au1xxx_suspend, -- tbd */
273 /* resume: ohci_au1xxx_resume, -- tbd */
274#endif /*CONFIG_PM*/
275 .stop = ohci_stop, 271 .stop = ohci_stop,
276 272
277 /* 273 /*
@@ -291,6 +287,7 @@ static const struct hc_driver ohci_au1xxx_hc_driver = {
291 */ 287 */
292 .hub_status_data = ohci_hub_status_data, 288 .hub_status_data = ohci_hub_status_data,
293 .hub_control = ohci_hub_control, 289 .hub_control = ohci_hub_control,
290 .hub_irq_enable = ohci_rhsc_enable,
294#ifdef CONFIG_PM 291#ifdef CONFIG_PM
295 .bus_suspend = ohci_bus_suspend, 292 .bus_suspend = ohci_bus_suspend,
296 .bus_resume = ohci_bus_resume, 293 .bus_resume = ohci_bus_resume,
diff --git a/drivers/usb/host/ohci-dbg.c b/drivers/usb/host/ohci-dbg.c
index 7bfffcbbd226..da52609a9290 100644
--- a/drivers/usb/host/ohci-dbg.c
+++ b/drivers/usb/host/ohci-dbg.c
@@ -667,6 +667,11 @@ show_registers (struct class_device *class_dev, char *buf)
667 size -= temp; 667 size -= temp;
668 next += temp; 668 next += temp;
669 669
670 temp = scnprintf (next, size, "hub poll timer %s\n",
671 ohci_to_hcd(ohci)->poll_rh ? "ON" : "off");
672 size -= temp;
673 next += temp;
674
670 /* roothub */ 675 /* roothub */
671 ohci_dump_roothub (ohci, 1, &next, &size); 676 ohci_dump_roothub (ohci, 1, &next, &size);
672 677
diff --git a/drivers/usb/host/ohci-ep93xx.c b/drivers/usb/host/ohci-ep93xx.c
index 6531c4d26527..1a1d320b7995 100644
--- a/drivers/usb/host/ohci-ep93xx.c
+++ b/drivers/usb/host/ohci-ep93xx.c
@@ -134,6 +134,7 @@ static struct hc_driver ohci_ep93xx_hc_driver = {
134 .get_frame_number = ohci_get_frame, 134 .get_frame_number = ohci_get_frame,
135 .hub_status_data = ohci_hub_status_data, 135 .hub_status_data = ohci_hub_status_data,
136 .hub_control = ohci_hub_control, 136 .hub_control = ohci_hub_control,
137 .hub_irq_enable = ohci_rhsc_enable,
137#ifdef CONFIG_PM 138#ifdef CONFIG_PM
138 .bus_suspend = ohci_bus_suspend, 139 .bus_suspend = ohci_bus_suspend,
139 .bus_resume = ohci_bus_resume, 140 .bus_resume = ohci_bus_resume,
diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c
index 94d8cf4b36c1..0684f57c14a0 100644
--- a/drivers/usb/host/ohci-hcd.c
+++ b/drivers/usb/host/ohci-hcd.c
@@ -101,7 +101,7 @@
101 101
102#include "../core/hcd.h" 102#include "../core/hcd.h"
103 103
104#define DRIVER_VERSION "2005 April 22" 104#define DRIVER_VERSION "2006 August 04"
105#define DRIVER_AUTHOR "Roman Weissgaerber, David Brownell" 105#define DRIVER_AUTHOR "Roman Weissgaerber, David Brownell"
106#define DRIVER_DESC "USB 1.1 'Open' Host Controller (OHCI) Driver" 106#define DRIVER_DESC "USB 1.1 'Open' Host Controller (OHCI) Driver"
107 107
@@ -110,9 +110,10 @@
110#undef OHCI_VERBOSE_DEBUG /* not always helpful */ 110#undef OHCI_VERBOSE_DEBUG /* not always helpful */
111 111
112/* For initializing controller (mask in an HCFS mode too) */ 112/* For initializing controller (mask in an HCFS mode too) */
113#define OHCI_CONTROL_INIT OHCI_CTRL_CBSR 113#define OHCI_CONTROL_INIT OHCI_CTRL_CBSR
114#define OHCI_INTR_INIT \ 114#define OHCI_INTR_INIT \
115 (OHCI_INTR_MIE | OHCI_INTR_UE | OHCI_INTR_RD | OHCI_INTR_WDH) 115 (OHCI_INTR_MIE | OHCI_INTR_RHSC | OHCI_INTR_UE \
116 | OHCI_INTR_RD | OHCI_INTR_WDH)
116 117
117#ifdef __hppa__ 118#ifdef __hppa__
118/* On PA-RISC, PDC can leave IR set incorrectly; ignore it there. */ 119/* On PA-RISC, PDC can leave IR set incorrectly; ignore it there. */
@@ -128,6 +129,8 @@
128 129
129static const char hcd_name [] = "ohci_hcd"; 130static const char hcd_name [] = "ohci_hcd";
130 131
132#define STATECHANGE_DELAY msecs_to_jiffies(300)
133
131#include "ohci.h" 134#include "ohci.h"
132 135
133static void ohci_dump (struct ohci_hcd *ohci, int verbose); 136static void ohci_dump (struct ohci_hcd *ohci, int verbose);
@@ -446,7 +449,6 @@ static int ohci_init (struct ohci_hcd *ohci)
446 449
447 disable (ohci); 450 disable (ohci);
448 ohci->regs = hcd->regs; 451 ohci->regs = hcd->regs;
449 ohci->next_statechange = jiffies;
450 452
451 /* REVISIT this BIOS handshake is now moved into PCI "quirks", and 453 /* REVISIT this BIOS handshake is now moved into PCI "quirks", and
452 * was never needed for most non-PCI systems ... remove the code? 454 * was never needed for most non-PCI systems ... remove the code?
@@ -637,10 +639,14 @@ retry:
637 return -EOVERFLOW; 639 return -EOVERFLOW;
638 } 640 }
639 641
640 /* start controller operations */ 642 /* use rhsc irqs after khubd is fully initialized */
643 hcd->poll_rh = 1;
644 hcd->uses_new_polling = 1;
645
646 /* start controller operations */
641 ohci->hc_control &= OHCI_CTRL_RWC; 647 ohci->hc_control &= OHCI_CTRL_RWC;
642 ohci->hc_control |= OHCI_CONTROL_INIT | OHCI_USB_OPER; 648 ohci->hc_control |= OHCI_CONTROL_INIT | OHCI_USB_OPER;
643 ohci_writel (ohci, ohci->hc_control, &ohci->regs->control); 649 ohci_writel (ohci, ohci->hc_control, &ohci->regs->control);
644 hcd->state = HC_STATE_RUNNING; 650 hcd->state = HC_STATE_RUNNING;
645 651
646 /* wake on ConnectStatusChange, matching external hubs */ 652 /* wake on ConnectStatusChange, matching external hubs */
@@ -648,7 +654,7 @@ retry:
648 654
649 /* Choose the interrupts we care about now, others later on demand */ 655 /* Choose the interrupts we care about now, others later on demand */
650 mask = OHCI_INTR_INIT; 656 mask = OHCI_INTR_INIT;
651 ohci_writel (ohci, mask, &ohci->regs->intrstatus); 657 ohci_writel (ohci, ~0, &ohci->regs->intrstatus);
652 ohci_writel (ohci, mask, &ohci->regs->intrenable); 658 ohci_writel (ohci, mask, &ohci->regs->intrenable);
653 659
654 /* handle root hub init quirks ... */ 660 /* handle root hub init quirks ... */
@@ -672,6 +678,7 @@ retry:
672 // flush those writes 678 // flush those writes
673 (void) ohci_readl (ohci, &ohci->regs->control); 679 (void) ohci_readl (ohci, &ohci->regs->control);
674 680
681 ohci->next_statechange = jiffies + STATECHANGE_DELAY;
675 spin_unlock_irq (&ohci->lock); 682 spin_unlock_irq (&ohci->lock);
676 683
677 // POTPGT delay is bits 24-31, in 2 ms units. 684 // POTPGT delay is bits 24-31, in 2 ms units.
@@ -709,7 +716,23 @@ static irqreturn_t ohci_irq (struct usb_hcd *hcd, struct pt_regs *ptregs)
709 /* interrupt for some other device? */ 716 /* interrupt for some other device? */
710 } else if ((ints &= ohci_readl (ohci, &regs->intrenable)) == 0) { 717 } else if ((ints &= ohci_readl (ohci, &regs->intrenable)) == 0) {
711 return IRQ_NOTMINE; 718 return IRQ_NOTMINE;
712 } 719 }
720
721 /* NOTE: vendors didn't always make the same implementation
722 * choices for RHSC. Sometimes it triggers on an edge (like
723 * setting and maybe clearing a port status change bit); and
724 * it's level-triggered on other silicon, active until khubd
725 * clears all active port status change bits. Poll by timer
726 * til it's fully debounced and the difference won't matter.
727 */
728 if (ints & OHCI_INTR_RHSC) {
729 ohci_vdbg (ohci, "rhsc\n");
730 ohci_writel (ohci, OHCI_INTR_RHSC, &regs->intrdisable);
731 hcd->poll_rh = 1;
732 ohci->next_statechange = jiffies + STATECHANGE_DELAY;
733 ohci_writel (ohci, OHCI_INTR_RHSC, &regs->intrstatus);
734 usb_hcd_poll_rh_status(hcd);
735 }
713 736
714 if (ints & OHCI_INTR_UE) { 737 if (ints & OHCI_INTR_UE) {
715 disable (ohci); 738 disable (ohci);
diff --git a/drivers/usb/host/ohci-hub.c b/drivers/usb/host/ohci-hub.c
index 5b0a23fd798b..f1b1ed086bde 100644
--- a/drivers/usb/host/ohci-hub.c
+++ b/drivers/usb/host/ohci-hub.c
@@ -36,6 +36,14 @@
36 36
37/*-------------------------------------------------------------------------*/ 37/*-------------------------------------------------------------------------*/
38 38
39/* hcd->hub_irq_enable() */
40static void ohci_rhsc_enable (struct usb_hcd *hcd)
41{
42 struct ohci_hcd *ohci = hcd_to_ohci (hcd);
43
44 ohci_writel (ohci, OHCI_INTR_RHSC, &ohci->regs->intrenable);
45}
46
39#ifdef CONFIG_PM 47#ifdef CONFIG_PM
40 48
41#define OHCI_SCHED_ENABLES \ 49#define OHCI_SCHED_ENABLES \
@@ -123,6 +131,9 @@ static int ohci_bus_suspend (struct usb_hcd *hcd)
123 /* no resumes until devices finish suspending */ 131 /* no resumes until devices finish suspending */
124 ohci->next_statechange = jiffies + msecs_to_jiffies (5); 132 ohci->next_statechange = jiffies + msecs_to_jiffies (5);
125 133
134 /* no timer polling */
135 hcd->poll_rh = 0;
136
126done: 137done:
127 /* external suspend vs self autosuspend ... same effect */ 138 /* external suspend vs self autosuspend ... same effect */
128 if (status == 0) 139 if (status == 0)
@@ -256,8 +267,8 @@ static int ohci_bus_resume (struct usb_hcd *hcd)
256 /* TRSMRCY */ 267 /* TRSMRCY */
257 msleep (10); 268 msleep (10);
258 269
259 /* keep it alive for ~5x suspend + resume costs */ 270 /* keep it alive for more than ~5x suspend + resume costs */
260 ohci->next_statechange = jiffies + msecs_to_jiffies (250); 271 ohci->next_statechange = jiffies + STATECHANGE_DELAY;
261 272
262 /* maybe turn schedules back on */ 273 /* maybe turn schedules back on */
263 enables = 0; 274 enables = 0;
@@ -302,9 +313,10 @@ ohci_hub_status_data (struct usb_hcd *hcd, char *buf)
302{ 313{
303 struct ohci_hcd *ohci = hcd_to_ohci (hcd); 314 struct ohci_hcd *ohci = hcd_to_ohci (hcd);
304 int i, changed = 0, length = 1; 315 int i, changed = 0, length = 1;
305 int can_suspend = device_may_wakeup(&hcd->self.root_hub->dev); 316 int can_suspend;
306 unsigned long flags; 317 unsigned long flags;
307 318
319 can_suspend = device_may_wakeup(&hcd->self.root_hub->dev);
308 spin_lock_irqsave (&ohci->lock, flags); 320 spin_lock_irqsave (&ohci->lock, flags);
309 321
310 /* handle autosuspended root: finish resuming before 322 /* handle autosuspended root: finish resuming before
@@ -339,6 +351,10 @@ ohci_hub_status_data (struct usb_hcd *hcd, char *buf)
339 for (i = 0; i < ohci->num_ports; i++) { 351 for (i = 0; i < ohci->num_ports; i++) {
340 u32 status = roothub_portstatus (ohci, i); 352 u32 status = roothub_portstatus (ohci, i);
341 353
354 /* can't autosuspend with active ports */
355 if ((status & RH_PS_PES) && !(status & RH_PS_PSS))
356 can_suspend = 0;
357
342 if (status & (RH_PS_CSC | RH_PS_PESC | RH_PS_PSSC 358 if (status & (RH_PS_CSC | RH_PS_PESC | RH_PS_PSSC
343 | RH_PS_OCIC | RH_PS_PRSC)) { 359 | RH_PS_OCIC | RH_PS_PRSC)) {
344 changed = 1; 360 changed = 1;
@@ -348,32 +364,41 @@ ohci_hub_status_data (struct usb_hcd *hcd, char *buf)
348 buf [1] |= 1 << (i - 7); 364 buf [1] |= 1 << (i - 7);
349 continue; 365 continue;
350 } 366 }
367 }
351 368
352 /* can suspend if no ports are enabled; or if all all 369 /* after root hub changes, stop polling after debouncing
353 * enabled ports are suspended AND remote wakeup is on. 370 * for a while and maybe kicking in autosuspend
354 */ 371 */
355 if (!(status & RH_PS_CCS)) 372 if (changed) {
356 continue; 373 ohci->next_statechange = jiffies + STATECHANGE_DELAY;
357 if ((status & RH_PS_PSS) && can_suspend)
358 continue;
359 can_suspend = 0; 374 can_suspend = 0;
375 } else if (time_before (jiffies, ohci->next_statechange)) {
376 can_suspend = 0;
377 } else {
378#ifdef CONFIG_PM
379 can_suspend = can_suspend
380 && !ohci->ed_rm_list
381 && ((OHCI_CTRL_HCFS | OHCI_SCHED_ENABLES)
382 & ohci->hc_control)
383 == OHCI_USB_OPER;
384#endif
385 if (hcd->uses_new_polling) {
386 hcd->poll_rh = 0;
387 /* use INTR_RHSC iff INTR_RD won't apply */
388 if (!can_suspend)
389 ohci_writel (ohci, OHCI_INTR_RHSC,
390 &ohci->regs->intrenable);
391 }
360 } 392 }
393
361done: 394done:
362 spin_unlock_irqrestore (&ohci->lock, flags); 395 spin_unlock_irqrestore (&ohci->lock, flags);
363 396
364#ifdef CONFIG_PM 397#ifdef CONFIG_PM
365 /* save power by suspending idle root hubs; 398 /* save power by autosuspending idle root hubs;
366 * INTR_RD wakes us when there's work 399 * INTR_RD wakes us when there's work
367 */ 400 */
368 if (can_suspend 401 if (can_suspend && usb_trylock_device (hcd->self.root_hub) == 0) {
369 && !changed
370 && !ohci->ed_rm_list
371 && ((OHCI_CTRL_HCFS | OHCI_SCHED_ENABLES)
372 & ohci->hc_control)
373 == OHCI_USB_OPER
374 && time_after (jiffies, ohci->next_statechange)
375 && usb_trylock_device (hcd->self.root_hub) == 0
376 ) {
377 ohci_vdbg (ohci, "autosuspend\n"); 402 ohci_vdbg (ohci, "autosuspend\n");
378 (void) ohci_bus_suspend (hcd); 403 (void) ohci_bus_suspend (hcd);
379 usb_unlock_device (hcd->self.root_hub); 404 usb_unlock_device (hcd->self.root_hub);
diff --git a/drivers/usb/host/ohci-lh7a404.c b/drivers/usb/host/ohci-lh7a404.c
index 5602da9bd52c..f2c9161d6d6a 100644
--- a/drivers/usb/host/ohci-lh7a404.c
+++ b/drivers/usb/host/ohci-lh7a404.c
@@ -173,10 +173,6 @@ static const struct hc_driver ohci_lh7a404_hc_driver = {
173 * basic lifecycle operations 173 * basic lifecycle operations
174 */ 174 */
175 .start = ohci_lh7a404_start, 175 .start = ohci_lh7a404_start,
176#ifdef CONFIG_PM
177 /* suspend: ohci_lh7a404_suspend, -- tbd */
178 /* resume: ohci_lh7a404_resume, -- tbd */
179#endif /*CONFIG_PM*/
180 .stop = ohci_stop, 176 .stop = ohci_stop,
181 177
182 /* 178 /*
@@ -196,6 +192,7 @@ static const struct hc_driver ohci_lh7a404_hc_driver = {
196 */ 192 */
197 .hub_status_data = ohci_hub_status_data, 193 .hub_status_data = ohci_hub_status_data,
198 .hub_control = ohci_hub_control, 194 .hub_control = ohci_hub_control,
195 .hub_irq_enable = ohci_rhsc_enable,
199#ifdef CONFIG_PM 196#ifdef CONFIG_PM
200 .bus_suspend = ohci_bus_suspend, 197 .bus_suspend = ohci_bus_suspend,
201 .bus_resume = ohci_bus_resume, 198 .bus_resume = ohci_bus_resume,
diff --git a/drivers/usb/host/ohci-omap.c b/drivers/usb/host/ohci-omap.c
index c4c4babd4767..47f1c9bbef87 100644
--- a/drivers/usb/host/ohci-omap.c
+++ b/drivers/usb/host/ohci-omap.c
@@ -382,8 +382,10 @@ ohci_omap_start (struct usb_hcd *hcd)
382 int ret; 382 int ret;
383 383
384 config = hcd->self.controller->platform_data; 384 config = hcd->self.controller->platform_data;
385 if (config->otg || config->rwc) 385 if (config->otg || config->rwc) {
386 ohci->hc_control = OHCI_CTRL_RWC;
386 writel(OHCI_CTRL_RWC, &ohci->regs->control); 387 writel(OHCI_CTRL_RWC, &ohci->regs->control);
388 }
387 389
388 if ((ret = ohci_run (ohci)) < 0) { 390 if ((ret = ohci_run (ohci)) < 0) {
389 dev_err(hcd->self.controller, "can't start\n"); 391 dev_err(hcd->self.controller, "can't start\n");
@@ -429,6 +431,7 @@ static const struct hc_driver ohci_omap_hc_driver = {
429 */ 431 */
430 .hub_status_data = ohci_hub_status_data, 432 .hub_status_data = ohci_hub_status_data,
431 .hub_control = ohci_hub_control, 433 .hub_control = ohci_hub_control,
434 .hub_irq_enable = ohci_rhsc_enable,
432#ifdef CONFIG_PM 435#ifdef CONFIG_PM
433 .bus_suspend = ohci_bus_suspend, 436 .bus_suspend = ohci_bus_suspend,
434 .bus_resume = ohci_bus_resume, 437 .bus_resume = ohci_bus_resume,
diff --git a/drivers/usb/host/ohci-pci.c b/drivers/usb/host/ohci-pci.c
index 37e122812b67..ef874443aa9f 100644
--- a/drivers/usb/host/ohci-pci.c
+++ b/drivers/usb/host/ohci-pci.c
@@ -176,11 +176,13 @@ static const struct hc_driver ohci_pci_hc_driver = {
176 */ 176 */
177 .reset = ohci_pci_reset, 177 .reset = ohci_pci_reset,
178 .start = ohci_pci_start, 178 .start = ohci_pci_start,
179 .stop = ohci_stop,
180
179#ifdef CONFIG_PM 181#ifdef CONFIG_PM
182 /* these suspend/resume entries are for upstream PCI glue ONLY */
180 .suspend = ohci_pci_suspend, 183 .suspend = ohci_pci_suspend,
181 .resume = ohci_pci_resume, 184 .resume = ohci_pci_resume,
182#endif 185#endif
183 .stop = ohci_stop,
184 186
185 /* 187 /*
186 * managing i/o requests and associated device resources 188 * managing i/o requests and associated device resources
@@ -199,6 +201,7 @@ static const struct hc_driver ohci_pci_hc_driver = {
199 */ 201 */
200 .hub_status_data = ohci_hub_status_data, 202 .hub_status_data = ohci_hub_status_data,
201 .hub_control = ohci_hub_control, 203 .hub_control = ohci_hub_control,
204 .hub_irq_enable = ohci_rhsc_enable,
202#ifdef CONFIG_PM 205#ifdef CONFIG_PM
203 .bus_suspend = ohci_bus_suspend, 206 .bus_suspend = ohci_bus_suspend,
204 .bus_resume = ohci_bus_resume, 207 .bus_resume = ohci_bus_resume,
diff --git a/drivers/usb/host/ohci-ppc-soc.c b/drivers/usb/host/ohci-ppc-soc.c
index 9fe56ff1615d..270aaaad8c6d 100644
--- a/drivers/usb/host/ohci-ppc-soc.c
+++ b/drivers/usb/host/ohci-ppc-soc.c
@@ -166,6 +166,7 @@ static const struct hc_driver ohci_ppc_soc_hc_driver = {
166 */ 166 */
167 .hub_status_data = ohci_hub_status_data, 167 .hub_status_data = ohci_hub_status_data,
168 .hub_control = ohci_hub_control, 168 .hub_control = ohci_hub_control,
169 .hub_irq_enable = ohci_rhsc_enable,
169#ifdef CONFIG_PM 170#ifdef CONFIG_PM
170 .bus_suspend = ohci_bus_suspend, 171 .bus_suspend = ohci_bus_suspend,
171 .bus_resume = ohci_bus_resume, 172 .bus_resume = ohci_bus_resume,
diff --git a/drivers/usb/host/ohci-pxa27x.c b/drivers/usb/host/ohci-pxa27x.c
index 6f559e102789..2752d36c2a78 100644
--- a/drivers/usb/host/ohci-pxa27x.c
+++ b/drivers/usb/host/ohci-pxa27x.c
@@ -288,6 +288,7 @@ static const struct hc_driver ohci_pxa27x_hc_driver = {
288 */ 288 */
289 .hub_status_data = ohci_hub_status_data, 289 .hub_status_data = ohci_hub_status_data,
290 .hub_control = ohci_hub_control, 290 .hub_control = ohci_hub_control,
291 .hub_irq_enable = ohci_rhsc_enable,
291#ifdef CONFIG_PM 292#ifdef CONFIG_PM
292 .bus_suspend = ohci_bus_suspend, 293 .bus_suspend = ohci_bus_suspend,
293 .bus_resume = ohci_bus_resume, 294 .bus_resume = ohci_bus_resume,
diff --git a/drivers/usb/host/ohci-s3c2410.c b/drivers/usb/host/ohci-s3c2410.c
index d2fc6969a9f7..c4c77d26ca1f 100644
--- a/drivers/usb/host/ohci-s3c2410.c
+++ b/drivers/usb/host/ohci-s3c2410.c
@@ -465,6 +465,7 @@ static const struct hc_driver ohci_s3c2410_hc_driver = {
465 */ 465 */
466 .hub_status_data = ohci_s3c2410_hub_status_data, 466 .hub_status_data = ohci_s3c2410_hub_status_data,
467 .hub_control = ohci_s3c2410_hub_control, 467 .hub_control = ohci_s3c2410_hub_control,
468 .hub_irq_enable = ohci_rhsc_enable,
468#ifdef CONFIG_PM 469#ifdef CONFIG_PM
469 .bus_suspend = ohci_bus_suspend, 470 .bus_suspend = ohci_bus_suspend,
470 .bus_resume = ohci_bus_resume, 471 .bus_resume = ohci_bus_resume,
diff --git a/drivers/usb/host/ohci-sa1111.c b/drivers/usb/host/ohci-sa1111.c
index ce3de106cadc..71371de32ada 100644
--- a/drivers/usb/host/ohci-sa1111.c
+++ b/drivers/usb/host/ohci-sa1111.c
@@ -212,10 +212,6 @@ static const struct hc_driver ohci_sa1111_hc_driver = {
212 * basic lifecycle operations 212 * basic lifecycle operations
213 */ 213 */
214 .start = ohci_sa1111_start, 214 .start = ohci_sa1111_start,
215#ifdef CONFIG_PM
216 /* suspend: ohci_sa1111_suspend, -- tbd */
217 /* resume: ohci_sa1111_resume, -- tbd */
218#endif
219 .stop = ohci_stop, 215 .stop = ohci_stop,
220 216
221 /* 217 /*
@@ -235,6 +231,7 @@ static const struct hc_driver ohci_sa1111_hc_driver = {
235 */ 231 */
236 .hub_status_data = ohci_hub_status_data, 232 .hub_status_data = ohci_hub_status_data,
237 .hub_control = ohci_hub_control, 233 .hub_control = ohci_hub_control,
234 .hub_irq_enable = ohci_rhsc_enable,
238#ifdef CONFIG_PM 235#ifdef CONFIG_PM
239 .bus_suspend = ohci_bus_suspend, 236 .bus_suspend = ohci_bus_suspend,
240 .bus_resume = ohci_bus_resume, 237 .bus_resume = ohci_bus_resume,