diff options
author | Takashi Iwai <tiwai@suse.de> | 2012-11-19 21:25:27 +0100 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2012-11-19 21:25:27 +0100 |
commit | 87af0b80c933f05a4c7dd8c5edebe10365e76220 (patch) | |
tree | 6c33ab1a47b5f1ef196e8847586fb81b17152a0e /drivers/pci/pci.c | |
parent | ALSA: hda - Fix Acer Aspire models with analog mics. (diff) | |
parent | ALSA: hda - Limit runtime PM support only to known Intel chips (diff) | |
download | linux-dev-87af0b80c933f05a4c7dd8c5edebe10365e76220.tar.xz linux-dev-87af0b80c933f05a4c7dd8c5edebe10365e76220.zip |
Merge branch 'for-linus' into for-next
Merge the recent HD-audio codec change for fixing recursive suspend
calls.
Conflicts:
sound/pci/hda/hda_codec.c
Diffstat (limited to 'drivers/pci/pci.c')
-rw-r--r-- | drivers/pci/pci.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 54858838f098..aabf64798bda 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -1858,6 +1858,38 @@ bool pci_dev_run_wake(struct pci_dev *dev) } EXPORT_SYMBOL_GPL(pci_dev_run_wake); +void pci_config_pm_runtime_get(struct pci_dev *pdev) +{ + struct device *dev = &pdev->dev; + struct device *parent = dev->parent; + + if (parent) + pm_runtime_get_sync(parent); + pm_runtime_get_noresume(dev); + /* + * pdev->current_state is set to PCI_D3cold during suspending, + * so wait until suspending completes + */ + pm_runtime_barrier(dev); + /* + * Only need to resume devices in D3cold, because config + * registers are still accessible for devices suspended but + * not in D3cold. + */ + if (pdev->current_state == PCI_D3cold) + pm_runtime_resume(dev); +} + +void pci_config_pm_runtime_put(struct pci_dev *pdev) +{ + struct device *dev = &pdev->dev; + struct device *parent = dev->parent; + + pm_runtime_put(dev); + if (parent) + pm_runtime_put_sync(parent); +} + /** * pci_pm_init - Initialize PM functions of given PCI device * @dev: PCI device to handle. |