diff options
author | Raag Jadav <raag.jadav@intel.com> | 2024-02-27 07:26:48 +0100 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2024-02-29 22:59:03 +0100 |
commit | fa885b06ec7ee07c2498ad0ce4e0717c3b7dd487 (patch) | |
tree | 0ee3c8fecef94d527bbc0f53392fc17c0e068c05 /drivers/pci | |
parent | Revert "ACPI: PM: Block ASUS B1400CEAE from suspend to idle by default" (diff) | |
download | linux-fa885b06ec7ee07c2498ad0ce4e0717c3b7dd487.tar.xz linux-fa885b06ec7ee07c2498ad0ce4e0717c3b7dd487.zip |
PCI/PM: Allow runtime PM with no PM callbacks at all
Commit c5eb1190074c ("PCI / PM: Allow runtime PM without callback
functions") eliminated the need for PM callbacks in
pci_pm_runtime_suspend() and pci_pm_runtime_resume(), but
didn't do the same for pci_pm_runtime_idle().
Therefore, runtime suspend worked as long as the driver implemented at
least one PM callback. But if the driver doesn't implement any PM
callbacks at all (driver->pm is NULL), pci_pm_runtime_idle() returned
-ENOSYS, which prevented runtime suspend.
Modify pci_pm_runtime_idle() to allow PCI device power state transitions
without runtime PM callbacks and complete the original intention of commit
c5eb1190074c ("PCI / PM: Allow runtime PM without callback functions").
Link: https://lore.kernel.org/r/20240227062648.16579-1-raag.jadav@intel.com
Signed-off-by: Raag Jadav <raag.jadav@intel.com>
[bhelgaas: commit log]
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Tested-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Stanislaw Gruszka <stanislaw.gruszka@linux.intel.com>
Acked-by: Rafael J. Wysocki <rafael@kernel.org>
Diffstat (limited to 'drivers/pci')
-rw-r--r-- | drivers/pci/pci-driver.c | 5 |
1 files changed, 1 insertions, 4 deletions
diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c index 51ec9e7e784f..bb7f6775b350 100644 --- a/drivers/pci/pci-driver.c +++ b/drivers/pci/pci-driver.c @@ -1382,10 +1382,7 @@ static int pci_pm_runtime_idle(struct device *dev) if (!pci_dev->driver) return 0; - if (!pm) - return -ENOSYS; - - if (pm->runtime_idle) + if (pm && pm->runtime_idle) return pm->runtime_idle(dev); return 0; |