diff options
Diffstat (limited to 'drivers/usb/host/ehci-pci.c')
-rw-r--r-- | drivers/usb/host/ehci-pci.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/drivers/usb/host/ehci-pci.c b/drivers/usb/host/ehci-pci.c index cadffacd945b..08d0472d4f57 100644 --- a/drivers/usb/host/ehci-pci.c +++ b/drivers/usb/host/ehci-pci.c | |||
@@ -238,6 +238,12 @@ static int ehci_pci_suspend(struct usb_hcd *hcd, pm_message_t message) | |||
238 | writel (0, &ehci->regs->intr_enable); | 238 | writel (0, &ehci->regs->intr_enable); |
239 | (void)readl(&ehci->regs->intr_enable); | 239 | (void)readl(&ehci->regs->intr_enable); |
240 | 240 | ||
241 | /* make sure snapshot being resumed re-enumerates everything */ | ||
242 | if (message.event == PM_EVENT_PRETHAW) { | ||
243 | ehci_halt(ehci); | ||
244 | ehci_reset(ehci); | ||
245 | } | ||
246 | |||
241 | clear_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags); | 247 | clear_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags); |
242 | bail: | 248 | bail: |
243 | spin_unlock_irqrestore (&ehci->lock, flags); | 249 | spin_unlock_irqrestore (&ehci->lock, flags); |
@@ -297,7 +303,7 @@ restart: | |||
297 | /* emptying the schedule aborts any urbs */ | 303 | /* emptying the schedule aborts any urbs */ |
298 | spin_lock_irq(&ehci->lock); | 304 | spin_lock_irq(&ehci->lock); |
299 | if (ehci->reclaim) | 305 | if (ehci->reclaim) |
300 | ehci->reclaim_ready = 1; | 306 | end_unlink_async (ehci, NULL); |
301 | ehci_work(ehci, NULL); | 307 | ehci_work(ehci, NULL); |
302 | spin_unlock_irq(&ehci->lock); | 308 | spin_unlock_irq(&ehci->lock); |
303 | 309 | ||
@@ -332,6 +338,7 @@ static const struct hc_driver ehci_pci_hc_driver = { | |||
332 | .resume = ehci_pci_resume, | 338 | .resume = ehci_pci_resume, |
333 | #endif | 339 | #endif |
334 | .stop = ehci_stop, | 340 | .stop = ehci_stop, |
341 | .shutdown = ehci_shutdown, | ||
335 | 342 | ||
336 | /* | 343 | /* |
337 | * managing i/o requests and associated device resources | 344 | * managing i/o requests and associated device resources |
@@ -378,4 +385,5 @@ static struct pci_driver ehci_pci_driver = { | |||
378 | .suspend = usb_hcd_pci_suspend, | 385 | .suspend = usb_hcd_pci_suspend, |
379 | .resume = usb_hcd_pci_resume, | 386 | .resume = usb_hcd_pci_resume, |
380 | #endif | 387 | #endif |
388 | .shutdown = usb_hcd_pci_shutdown, | ||
381 | }; | 389 | }; |