|
@@ -493,6 +493,15 @@ static int hcd_pci_suspend_noirq(struct device *dev)
|
|
|
|
|
|
pci_save_state(pci_dev);
|
|
pci_save_state(pci_dev);
|
|
|
|
|
|
|
|
+ /*
|
|
|
|
+ * Some systems crash if an EHCI controller is in D3 during
|
|
|
|
+ * a sleep transition. We have to leave such controllers in D0.
|
|
|
|
+ */
|
|
|
|
+ if (hcd->broken_pci_sleep) {
|
|
|
|
+ dev_dbg(dev, "Staying in PCI D0\n");
|
|
|
|
+ return retval;
|
|
|
|
+ }
|
|
|
|
+
|
|
/* If the root hub is dead rather than suspended, disallow remote
|
|
/* If the root hub is dead rather than suspended, disallow remote
|
|
* wakeup. usb_hc_died() should ensure that both hosts are marked as
|
|
* wakeup. usb_hc_died() should ensure that both hosts are marked as
|
|
* dying, so we only need to check the primary roothub.
|
|
* dying, so we only need to check the primary roothub.
|