diff options
Diffstat (limited to 'drivers/usb/host/xhci-pci.c')
| -rw-r--r-- | drivers/usb/host/xhci-pci.c | 12 | 
1 files changed, 10 insertions, 2 deletions
diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c index ddb79f23fb3b..79b3691f373f 100644 --- a/drivers/usb/host/xhci-pci.c +++ b/drivers/usb/host/xhci-pci.c @@ -13,6 +13,7 @@  #include <linux/module.h>  #include <linux/acpi.h>  #include <linux/reset.h> +#include <linux/suspend.h>  #include "xhci.h"  #include "xhci-trace.h" @@ -387,7 +388,7 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)  	if (pdev->vendor == PCI_VENDOR_ID_AMD &&  		pdev->device == PCI_DEVICE_ID_AMD_RENOIR_XHCI) -		xhci->quirks |= XHCI_BROKEN_D3COLD; +		xhci->quirks |= XHCI_BROKEN_D3COLD_S2I;  	if (pdev->vendor == PCI_VENDOR_ID_INTEL) {  		xhci->quirks |= XHCI_LPM_SUPPORT; @@ -801,9 +802,16 @@ static int xhci_pci_suspend(struct usb_hcd *hcd, bool do_wakeup)  	 * Systems with the TI redriver that loses port status change events  	 * need to have the registers polled during D3, so avoid D3cold.  	 */ -	if (xhci->quirks & (XHCI_COMP_MODE_QUIRK | XHCI_BROKEN_D3COLD)) +	if (xhci->quirks & XHCI_COMP_MODE_QUIRK)  		pci_d3cold_disable(pdev); +#ifdef CONFIG_SUSPEND +	/* d3cold is broken, but only when s2idle is used */ +	if (pm_suspend_target_state == PM_SUSPEND_TO_IDLE && +	    xhci->quirks & (XHCI_BROKEN_D3COLD_S2I)) +		pci_d3cold_disable(pdev); +#endif +  	if (xhci->quirks & XHCI_PME_STUCK_QUIRK)  		xhci_pme_quirk(hcd);  | 
