diff options
Diffstat (limited to 'drivers/pci/pci-acpi.c')
| -rw-r--r-- | drivers/pci/pci-acpi.c | 12 | 
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/pci/pci-acpi.c b/drivers/pci/pci-acpi.c index 65113b6eed14..89ee6a2b6eb8 100644 --- a/drivers/pci/pci-acpi.c +++ b/drivers/pci/pci-acpi.c @@ -629,6 +629,18 @@ static bool acpi_pci_need_resume(struct pci_dev *dev)  {  	struct acpi_device *adev = ACPI_COMPANION(&dev->dev); +	/* +	 * In some cases (eg. Samsung 305V4A) leaving a bridge in suspend over +	 * system-wide suspend/resume confuses the platform firmware, so avoid +	 * doing that, unless the bridge has a driver that should take care of +	 * the PM handling.  According to Section 16.1.6 of ACPI 6.2, endpoint +	 * devices are expected to be in D3 before invoking the S3 entry path +	 * from the firmware, so they should not be affected by this issue. +	 */ +	if (pci_is_bridge(dev) && !dev->driver && +	    acpi_target_system_state() != ACPI_STATE_S0) +		return true; +  	if (!adev || !acpi_device_power_manageable(adev))  		return false;  |