Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

PCI / PM: Simplify device wakeup settings code

After previous changes it is not necessary to distinguish between
device wakeup for run time and device wakeup from system sleep states
any more, so rework the PCI device wakeup settings code accordingly.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Acked-by: Bjorn Helgaas <bhelgaas@google.com>

+17 -52
+1 -2
drivers/pci/pci-acpi.c
··· 615 615 .set_state = acpi_pci_set_power_state, 616 616 .get_state = acpi_pci_get_power_state, 617 617 .choose_state = acpi_pci_choose_state, 618 - .sleep_wake = acpi_pci_wakeup, 619 - .run_wake = acpi_pci_wakeup, 618 + .set_wakeup = acpi_pci_wakeup, 620 619 .need_resume = acpi_pci_need_resume, 621 620 }; 622 621
+1 -1
drivers/pci/pci-driver.c
··· 1216 1216 1217 1217 pci_restore_standard_config(pci_dev); 1218 1218 pci_fixup_device(pci_fixup_resume_early, pci_dev); 1219 - __pci_enable_wake(pci_dev, PCI_D0, true, false); 1219 + pci_enable_wake(pci_dev, PCI_D0, false); 1220 1220 pci_fixup_device(pci_fixup_resume, pci_dev); 1221 1221 1222 1222 rc = pm->runtime_resume(dev);
+2 -8
drivers/pci/pci-mid.c
··· 39 39 return PCI_D3hot; 40 40 } 41 41 42 - static int mid_pci_sleep_wake(struct pci_dev *dev, bool enable) 43 - { 44 - return 0; 45 - } 46 - 47 - static int mid_pci_run_wake(struct pci_dev *dev, bool enable) 42 + static int mid_pci_wakeup(struct pci_dev *dev, bool enable) 48 43 { 49 44 return 0; 50 45 } ··· 54 59 .set_state = mid_pci_set_power_state, 55 60 .get_state = mid_pci_get_power_state, 56 61 .choose_state = mid_pci_choose_state, 57 - .sleep_wake = mid_pci_sleep_wake, 58 - .run_wake = mid_pci_run_wake, 62 + .set_wakeup = mid_pci_wakeup, 59 63 .need_resume = mid_pci_need_resume, 60 64 }; 61 65
+10 -26
drivers/pci/pci.c
··· 574 574 int pci_set_platform_pm(const struct pci_platform_pm_ops *ops) 575 575 { 576 576 if (!ops->is_manageable || !ops->set_state || !ops->get_state || 577 - !ops->choose_state || !ops->sleep_wake || !ops->run_wake || 578 - !ops->need_resume) 577 + !ops->choose_state || !ops->set_wakeup || !ops->need_resume) 579 578 return -EINVAL; 580 579 pci_platform_pm = ops; 581 580 return 0; ··· 602 603 pci_platform_pm->choose_state(dev) : PCI_POWER_ERROR; 603 604 } 604 605 605 - static inline int platform_pci_sleep_wake(struct pci_dev *dev, bool enable) 606 + static inline int platform_pci_set_wakeup(struct pci_dev *dev, bool enable) 606 607 { 607 608 return pci_platform_pm ? 608 - pci_platform_pm->sleep_wake(dev, enable) : -ENODEV; 609 - } 610 - 611 - static inline int platform_pci_run_wake(struct pci_dev *dev, bool enable) 612 - { 613 - return pci_platform_pm ? 614 - pci_platform_pm->run_wake(dev, enable) : -ENODEV; 609 + pci_platform_pm->set_wakeup(dev, enable) : -ENODEV; 615 610 } 616 611 617 612 static inline bool platform_pci_need_resume(struct pci_dev *dev) ··· 1882 1889 EXPORT_SYMBOL(pci_pme_active); 1883 1890 1884 1891 /** 1885 - * __pci_enable_wake - enable PCI device as wakeup event source 1892 + * pci_enable_wake - enable PCI device as wakeup event source 1886 1893 * @dev: PCI device affected 1887 1894 * @state: PCI state from which device will issue wakeup events 1888 - * @runtime: True if the events are to be generated at run time 1889 1895 * @enable: True to enable event generation; false to disable 1890 1896 * 1891 1897 * This enables the device as a wakeup event source, or disables it. ··· 1900 1908 * Error code depending on the platform is returned if both the platform and 1901 1909 * the native mechanism fail to enable the generation of wake-up events 1902 1910 */ 1903 - int __pci_enable_wake(struct pci_dev *dev, pci_power_t state, 1904 - bool runtime, bool enable) 1911 + int pci_enable_wake(struct pci_dev *dev, pci_power_t state, bool enable) 1905 1912 { 1906 1913 int ret = 0; 1907 - 1908 - if (enable && !runtime && !device_may_wakeup(&dev->dev)) 1909 - return -EINVAL; 1910 1914 1911 1915 /* 1912 1916 * Don't do the same thing twice in a row for one device, but restore ··· 1926 1938 pci_pme_active(dev, true); 1927 1939 else 1928 1940 ret = 1; 1929 - error = runtime ? platform_pci_run_wake(dev, true) : 1930 - platform_pci_sleep_wake(dev, true); 1941 + error = platform_pci_set_wakeup(dev, true); 1931 1942 if (ret) 1932 1943 ret = error; 1933 1944 if (!ret) 1934 1945 dev->wakeup_prepared = true; 1935 1946 } else { 1936 - if (runtime) 1937 - platform_pci_run_wake(dev, false); 1938 - else 1939 - platform_pci_sleep_wake(dev, false); 1947 + platform_pci_set_wakeup(dev, false); 1940 1948 pci_pme_active(dev, false); 1941 1949 dev->wakeup_prepared = false; 1942 1950 } 1943 1951 1944 1952 return ret; 1945 1953 } 1946 - EXPORT_SYMBOL(__pci_enable_wake); 1954 + EXPORT_SYMBOL(pci_enable_wake); 1947 1955 1948 1956 /** 1949 1957 * pci_wake_from_d3 - enable/disable device to wake up from D3_hot or D3_cold ··· 2081 2097 2082 2098 dev->runtime_d3cold = target_state == PCI_D3cold; 2083 2099 2084 - __pci_enable_wake(dev, target_state, true, pci_dev_run_wake(dev)); 2100 + pci_enable_wake(dev, target_state, pci_dev_run_wake(dev)); 2085 2101 2086 2102 error = pci_set_power_state(dev, target_state); 2087 2103 2088 2104 if (error) { 2089 - __pci_enable_wake(dev, target_state, true, false); 2105 + pci_enable_wake(dev, target_state, false); 2090 2106 dev->runtime_d3cold = false; 2091 2107 } 2092 2108
+2 -7
drivers/pci/pci.h
··· 47 47 * platform; to be used during system-wide transitions from a 48 48 * sleeping state to the working state and vice versa 49 49 * 50 - * @sleep_wake: enables/disables the system wake up capability of given device 51 - * 52 - * @run_wake: enables/disables the platform to generate run-time wake-up events 53 - * for given device (the device's wake-up capability has to be 54 - * enabled by @sleep_wake for this feature to work) 50 + * @set_wakeup: enables/disables wakeup capability for the device 55 51 * 56 52 * @need_resume: returns 'true' if the given device (which is currently 57 53 * suspended) needs to be resumed to be configured for system ··· 61 65 int (*set_state)(struct pci_dev *dev, pci_power_t state); 62 66 pci_power_t (*get_state)(struct pci_dev *dev); 63 67 pci_power_t (*choose_state)(struct pci_dev *dev); 64 - int (*sleep_wake)(struct pci_dev *dev, bool enable); 65 - int (*run_wake)(struct pci_dev *dev, bool enable); 68 + int (*set_wakeup)(struct pci_dev *dev, bool enable); 66 69 bool (*need_resume)(struct pci_dev *dev); 67 70 }; 68 71
+1 -8
include/linux/pci.h
··· 1097 1097 pci_power_t pci_choose_state(struct pci_dev *dev, pm_message_t state); 1098 1098 bool pci_pme_capable(struct pci_dev *dev, pci_power_t state); 1099 1099 void pci_pme_active(struct pci_dev *dev, bool enable); 1100 - int __pci_enable_wake(struct pci_dev *dev, pci_power_t state, 1101 - bool runtime, bool enable); 1100 + int pci_enable_wake(struct pci_dev *dev, pci_power_t state, bool enable); 1102 1101 int pci_wake_from_d3(struct pci_dev *dev, bool enable); 1103 1102 int pci_prepare_to_sleep(struct pci_dev *dev); 1104 1103 int pci_back_from_sleep(struct pci_dev *dev); ··· 1106 1107 void pci_pme_wakeup_bus(struct pci_bus *bus); 1107 1108 void pci_d3cold_enable(struct pci_dev *dev); 1108 1109 void pci_d3cold_disable(struct pci_dev *dev); 1109 - 1110 - static inline int pci_enable_wake(struct pci_dev *dev, pci_power_t state, 1111 - bool enable) 1112 - { 1113 - return __pci_enable_wake(dev, state, false, enable); 1114 - } 1115 1110 1116 1111 /* PCI Virtual Channel */ 1117 1112 int pci_save_vc_state(struct pci_dev *dev);