diff options
-rw-r--r-- | drivers/pci/pci-acpi.c | 10 | ||||
-rw-r--r-- | drivers/pci/pci.c | 25 |
2 files changed, 21 insertions, 14 deletions
diff --git a/drivers/pci/pci-acpi.c b/drivers/pci/pci-acpi.c index ea15b0537457..e798c4736a66 100644 --- a/drivers/pci/pci-acpi.c +++ b/drivers/pci/pci-acpi.c | |||
@@ -111,12 +111,16 @@ static bool acpi_pci_can_wakeup(struct pci_dev *dev) | |||
111 | 111 | ||
112 | static int acpi_pci_sleep_wake(struct pci_dev *dev, bool enable) | 112 | static int acpi_pci_sleep_wake(struct pci_dev *dev, bool enable) |
113 | { | 113 | { |
114 | int error = acpi_pm_device_sleep_wake(&dev->dev, enable); | 114 | int error; |
115 | 115 | ||
116 | if (!acpi_pci_can_wakeup(dev)) | ||
117 | return 0; | ||
118 | |||
119 | error = acpi_pm_device_sleep_wake(&dev->dev, enable); | ||
116 | if (!error) | 120 | if (!error) |
117 | dev_printk(KERN_INFO, &dev->dev, | 121 | dev_info(&dev->dev, "wake-up capability %s by ACPI\n", |
118 | "wake-up capability %s by ACPI\n", | ||
119 | enable ? "enabled" : "disabled"); | 122 | enable ? "enabled" : "disabled"); |
123 | |||
120 | return error; | 124 | return error; |
121 | } | 125 | } |
122 | 126 | ||
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 8c663d628d03..84a6d6d30c5a 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c | |||
@@ -1220,8 +1220,7 @@ void pci_pme_active(struct pci_dev *dev, bool enable) | |||
1220 | */ | 1220 | */ |
1221 | int pci_enable_wake(struct pci_dev *dev, pci_power_t state, bool enable) | 1221 | int pci_enable_wake(struct pci_dev *dev, pci_power_t state, bool enable) |
1222 | { | 1222 | { |
1223 | int error = 0; | 1223 | int ret = 0; |
1224 | bool pme_done = false; | ||
1225 | 1224 | ||
1226 | if (enable && !device_may_wakeup(&dev->dev)) | 1225 | if (enable && !device_may_wakeup(&dev->dev)) |
1227 | return -EINVAL; | 1226 | return -EINVAL; |
@@ -1232,18 +1231,22 @@ int pci_enable_wake(struct pci_dev *dev, pci_power_t state, bool enable) | |||
1232 | * enable. To disable wake-up we call the platform first, for symmetry. | 1231 | * enable. To disable wake-up we call the platform first, for symmetry. |
1233 | */ | 1232 | */ |
1234 | 1233 | ||
1235 | if (!enable && platform_pci_can_wakeup(dev)) | 1234 | if (enable) { |
1236 | error = platform_pci_sleep_wake(dev, false); | 1235 | int error; |
1237 | |||
1238 | if (!enable || pci_pme_capable(dev, state)) { | ||
1239 | pci_pme_active(dev, enable); | ||
1240 | pme_done = true; | ||
1241 | } | ||
1242 | 1236 | ||
1243 | if (enable && platform_pci_can_wakeup(dev)) | 1237 | if (pci_pme_capable(dev, state)) |
1238 | pci_pme_active(dev, true); | ||
1239 | else | ||
1240 | ret = 1; | ||
1244 | error = platform_pci_sleep_wake(dev, true); | 1241 | error = platform_pci_sleep_wake(dev, true); |
1242 | if (ret) | ||
1243 | ret = error; | ||
1244 | } else { | ||
1245 | platform_pci_sleep_wake(dev, false); | ||
1246 | pci_pme_active(dev, false); | ||
1247 | } | ||
1245 | 1248 | ||
1246 | return pme_done ? 0 : error; | 1249 | return ret; |
1247 | } | 1250 | } |
1248 | 1251 | ||
1249 | /** | 1252 | /** |