|
@@ -1036,6 +1036,7 @@ int ohci_suspend(struct usb_hcd *hcd, bool do_wakeup)
|
|
|
{
|
|
|
struct ohci_hcd *ohci = hcd_to_ohci (hcd);
|
|
|
unsigned long flags;
|
|
|
+ int rc = 0;
|
|
|
|
|
|
/* Disable irq emission and mark HW unaccessible. Use
|
|
|
* the spinlock to properly synchronize with possible pending
|
|
@@ -1048,7 +1049,13 @@ int ohci_suspend(struct usb_hcd *hcd, bool do_wakeup)
|
|
|
clear_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags);
|
|
|
spin_unlock_irqrestore (&ohci->lock, flags);
|
|
|
|
|
|
- return 0;
|
|
|
+ synchronize_irq(hcd->irq);
|
|
|
+
|
|
|
+ if (do_wakeup && HCD_WAKEUP_PENDING(hcd)) {
|
|
|
+ ohci_resume(hcd, false);
|
|
|
+ rc = -EBUSY;
|
|
|
+ }
|
|
|
+ return rc;
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(ohci_suspend);
|
|
|
|