aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/usb/host/uhci-hcd.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/drivers/usb/host/uhci-hcd.c b/drivers/usb/host/uhci-hcd.c
index 73db5569f57b..83344d688ff0 100644
--- a/drivers/usb/host/uhci-hcd.c
+++ b/drivers/usb/host/uhci-hcd.c
@@ -140,8 +140,6 @@ static void finish_reset(struct uhci_hcd *uhci)
140 uhci->rh_state = UHCI_RH_RESET; 140 uhci->rh_state = UHCI_RH_RESET;
141 uhci->is_stopped = UHCI_IS_STOPPED; 141 uhci->is_stopped = UHCI_IS_STOPPED;
142 clear_bit(HCD_FLAG_POLL_RH, &uhci_to_hcd(uhci)->flags); 142 clear_bit(HCD_FLAG_POLL_RH, &uhci_to_hcd(uhci)->flags);
143
144 uhci->dead = 0; /* Full reset resurrects the controller */
145} 143}
146 144
147/* 145/*
@@ -837,16 +835,17 @@ static int uhci_pci_resume(struct usb_hcd *hcd, bool hibernated)
837 spin_lock_irq(&uhci->lock); 835 spin_lock_irq(&uhci->lock);
838 836
839 /* Make sure resume from hibernation re-enumerates everything */ 837 /* Make sure resume from hibernation re-enumerates everything */
840 if (hibernated) 838 if (hibernated) {
841 uhci_hc_died(uhci); 839 uhci_reset_hc(to_pci_dev(uhci_dev(uhci)), uhci->io_addr);
840 finish_reset(uhci);
841 }
842 842
843 /* The firmware or a boot kernel may have changed the controller 843 /* The firmware may have changed the controller settings during
844 * settings during a system wakeup. Check it and reconfigure 844 * a system wakeup. Check it and reconfigure to avoid problems.
845 * to avoid problems.
846 */ 845 */
847 check_and_reset_hc(uhci); 846 else {
848 847 check_and_reset_hc(uhci);
849 /* If the controller was dead before, it's back alive now */ 848 }
850 configure_hc(uhci); 849 configure_hc(uhci);
851 850
852 /* Tell the core if the controller had to be reset */ 851 /* Tell the core if the controller had to be reset */