diff options
-rw-r--r-- | Documentation/power/runtime_pm.txt | 5 | ||||
-rw-r--r-- | arch/arm/mach-omap2/omap_device.c | 7 | ||||
-rw-r--r-- | drivers/acpi/device_pm.c | 1 | ||||
-rw-r--r-- | drivers/amba/bus.c | 2 | ||||
-rw-r--r-- | drivers/ata/libata-core.c | 2 | ||||
-rw-r--r-- | drivers/base/platform.c | 1 | ||||
-rw-r--r-- | drivers/base/power/domain.c | 1 | ||||
-rw-r--r-- | drivers/base/power/generic_ops.c | 23 | ||||
-rw-r--r-- | drivers/base/power/runtime.c | 12 | ||||
-rw-r--r-- | drivers/dma/intel_mid_dma.c | 2 | ||||
-rw-r--r-- | drivers/gpio/gpio-langwell.c | 6 | ||||
-rw-r--r-- | drivers/i2c/i2c-core.c | 2 | ||||
-rw-r--r-- | drivers/mfd/ab8500-gpadc.c | 8 | ||||
-rw-r--r-- | drivers/mmc/core/bus.c | 2 | ||||
-rw-r--r-- | drivers/mmc/core/sdio_bus.c | 2 | ||||
-rw-r--r-- | drivers/pci/pci-driver.c | 14 | ||||
-rw-r--r-- | drivers/scsi/scsi_pm.c | 11 | ||||
-rw-r--r-- | drivers/sh/pm_runtime.c | 2 | ||||
-rw-r--r-- | drivers/spi/spi.c | 2 | ||||
-rw-r--r-- | drivers/tty/serial/mfd.c | 9 | ||||
-rw-r--r-- | drivers/usb/core/driver.c | 3 | ||||
-rw-r--r-- | drivers/usb/core/port.c | 1 | ||||
-rw-r--r-- | include/linux/pm_runtime.h | 2 |
23 files changed, 28 insertions, 92 deletions
diff --git a/Documentation/power/runtime_pm.txt b/Documentation/power/runtime_pm.txt index 6c9f5d9aa115..6c470c71ba27 100644 --- a/Documentation/power/runtime_pm.txt +++ b/Documentation/power/runtime_pm.txt | |||
@@ -660,11 +660,6 @@ Subsystems may wish to conserve code space by using the set of generic power | |||
660 | management callbacks provided by the PM core, defined in | 660 | management callbacks provided by the PM core, defined in |
661 | driver/base/power/generic_ops.c: | 661 | driver/base/power/generic_ops.c: |
662 | 662 | ||
663 | int pm_generic_runtime_idle(struct device *dev); | ||
664 | - invoke the ->runtime_idle() callback provided by the driver of this | ||
665 | device, if defined, and call pm_runtime_suspend() for this device if the | ||
666 | return value is 0 or the callback is not defined | ||
667 | |||
668 | int pm_generic_runtime_suspend(struct device *dev); | 663 | int pm_generic_runtime_suspend(struct device *dev); |
669 | - invoke the ->runtime_suspend() callback provided by the driver of this | 664 | - invoke the ->runtime_suspend() callback provided by the driver of this |
670 | device and return its result, or return -EINVAL if not defined | 665 | device and return its result, or return -EINVAL if not defined |
diff --git a/arch/arm/mach-omap2/omap_device.c b/arch/arm/mach-omap2/omap_device.c index e6d230700b2b..e37feb2f05a3 100644 --- a/arch/arm/mach-omap2/omap_device.c +++ b/arch/arm/mach-omap2/omap_device.c | |||
@@ -591,11 +591,6 @@ static int _od_runtime_suspend(struct device *dev) | |||
591 | return ret; | 591 | return ret; |
592 | } | 592 | } |
593 | 593 | ||
594 | static int _od_runtime_idle(struct device *dev) | ||
595 | { | ||
596 | return pm_generic_runtime_idle(dev); | ||
597 | } | ||
598 | |||
599 | static int _od_runtime_resume(struct device *dev) | 594 | static int _od_runtime_resume(struct device *dev) |
600 | { | 595 | { |
601 | struct platform_device *pdev = to_platform_device(dev); | 596 | struct platform_device *pdev = to_platform_device(dev); |
@@ -653,7 +648,7 @@ static int _od_resume_noirq(struct device *dev) | |||
653 | struct dev_pm_domain omap_device_pm_domain = { | 648 | struct dev_pm_domain omap_device_pm_domain = { |
654 | .ops = { | 649 | .ops = { |
655 | SET_RUNTIME_PM_OPS(_od_runtime_suspend, _od_runtime_resume, | 650 | SET_RUNTIME_PM_OPS(_od_runtime_suspend, _od_runtime_resume, |
656 | _od_runtime_idle) | 651 | NULL) |
657 | USE_PLATFORM_PM_SLEEP_OPS | 652 | USE_PLATFORM_PM_SLEEP_OPS |
658 | .suspend_noirq = _od_suspend_noirq, | 653 | .suspend_noirq = _od_suspend_noirq, |
659 | .resume_noirq = _od_resume_noirq, | 654 | .resume_noirq = _od_resume_noirq, |
diff --git a/drivers/acpi/device_pm.c b/drivers/acpi/device_pm.c index bc493aa3af19..1eb8b6258786 100644 --- a/drivers/acpi/device_pm.c +++ b/drivers/acpi/device_pm.c | |||
@@ -886,7 +886,6 @@ static struct dev_pm_domain acpi_general_pm_domain = { | |||
886 | #ifdef CONFIG_PM_RUNTIME | 886 | #ifdef CONFIG_PM_RUNTIME |
887 | .runtime_suspend = acpi_subsys_runtime_suspend, | 887 | .runtime_suspend = acpi_subsys_runtime_suspend, |
888 | .runtime_resume = acpi_subsys_runtime_resume, | 888 | .runtime_resume = acpi_subsys_runtime_resume, |
889 | .runtime_idle = pm_generic_runtime_idle, | ||
890 | #endif | 889 | #endif |
891 | #ifdef CONFIG_PM_SLEEP | 890 | #ifdef CONFIG_PM_SLEEP |
892 | .prepare = acpi_subsys_prepare, | 891 | .prepare = acpi_subsys_prepare, |
diff --git a/drivers/amba/bus.c b/drivers/amba/bus.c index cdbad3a454a0..c6707278a6bb 100644 --- a/drivers/amba/bus.c +++ b/drivers/amba/bus.c | |||
@@ -284,7 +284,7 @@ static const struct dev_pm_ops amba_pm = { | |||
284 | SET_RUNTIME_PM_OPS( | 284 | SET_RUNTIME_PM_OPS( |
285 | amba_pm_runtime_suspend, | 285 | amba_pm_runtime_suspend, |
286 | amba_pm_runtime_resume, | 286 | amba_pm_runtime_resume, |
287 | pm_generic_runtime_idle | 287 | NULL |
288 | ) | 288 | ) |
289 | }; | 289 | }; |
290 | 290 | ||
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index 63c743baf920..84e3b62aa368 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c | |||
@@ -5430,7 +5430,7 @@ static int ata_port_runtime_idle(struct device *dev) | |||
5430 | return -EBUSY; | 5430 | return -EBUSY; |
5431 | } | 5431 | } |
5432 | 5432 | ||
5433 | return pm_runtime_suspend(dev); | 5433 | return 0; |
5434 | } | 5434 | } |
5435 | 5435 | ||
5436 | static int ata_port_runtime_suspend(struct device *dev) | 5436 | static int ata_port_runtime_suspend(struct device *dev) |
diff --git a/drivers/base/platform.c b/drivers/base/platform.c index 9eda84246ffd..96a930387ebc 100644 --- a/drivers/base/platform.c +++ b/drivers/base/platform.c | |||
@@ -888,7 +888,6 @@ int platform_pm_restore(struct device *dev) | |||
888 | static const struct dev_pm_ops platform_dev_pm_ops = { | 888 | static const struct dev_pm_ops platform_dev_pm_ops = { |
889 | .runtime_suspend = pm_generic_runtime_suspend, | 889 | .runtime_suspend = pm_generic_runtime_suspend, |
890 | .runtime_resume = pm_generic_runtime_resume, | 890 | .runtime_resume = pm_generic_runtime_resume, |
891 | .runtime_idle = pm_generic_runtime_idle, | ||
892 | USE_PLATFORM_PM_SLEEP_OPS | 891 | USE_PLATFORM_PM_SLEEP_OPS |
893 | }; | 892 | }; |
894 | 893 | ||
diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c index 7072404c8b6d..bfb8955c406c 100644 --- a/drivers/base/power/domain.c +++ b/drivers/base/power/domain.c | |||
@@ -2143,7 +2143,6 @@ void pm_genpd_init(struct generic_pm_domain *genpd, | |||
2143 | genpd->max_off_time_changed = true; | 2143 | genpd->max_off_time_changed = true; |
2144 | genpd->domain.ops.runtime_suspend = pm_genpd_runtime_suspend; | 2144 | genpd->domain.ops.runtime_suspend = pm_genpd_runtime_suspend; |
2145 | genpd->domain.ops.runtime_resume = pm_genpd_runtime_resume; | 2145 | genpd->domain.ops.runtime_resume = pm_genpd_runtime_resume; |
2146 | genpd->domain.ops.runtime_idle = pm_generic_runtime_idle; | ||
2147 | genpd->domain.ops.prepare = pm_genpd_prepare; | 2146 | genpd->domain.ops.prepare = pm_genpd_prepare; |
2148 | genpd->domain.ops.suspend = pm_genpd_suspend; | 2147 | genpd->domain.ops.suspend = pm_genpd_suspend; |
2149 | genpd->domain.ops.suspend_late = pm_genpd_suspend_late; | 2148 | genpd->domain.ops.suspend_late = pm_genpd_suspend_late; |
diff --git a/drivers/base/power/generic_ops.c b/drivers/base/power/generic_ops.c index bfd898b8988e..5ee030a864f9 100644 --- a/drivers/base/power/generic_ops.c +++ b/drivers/base/power/generic_ops.c | |||
@@ -12,29 +12,6 @@ | |||
12 | 12 | ||
13 | #ifdef CONFIG_PM_RUNTIME | 13 | #ifdef CONFIG_PM_RUNTIME |
14 | /** | 14 | /** |
15 | * pm_generic_runtime_idle - Generic runtime idle callback for subsystems. | ||
16 | * @dev: Device to handle. | ||
17 | * | ||
18 | * If PM operations are defined for the @dev's driver and they include | ||
19 | * ->runtime_idle(), execute it and return its error code, if nonzero. | ||
20 | * Otherwise, execute pm_runtime_suspend() for the device and return 0. | ||
21 | */ | ||
22 | int pm_generic_runtime_idle(struct device *dev) | ||
23 | { | ||
24 | const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; | ||
25 | |||
26 | if (pm && pm->runtime_idle) { | ||
27 | int ret = pm->runtime_idle(dev); | ||
28 | if (ret) | ||
29 | return ret; | ||
30 | } | ||
31 | |||
32 | pm_runtime_suspend(dev); | ||
33 | return 0; | ||
34 | } | ||
35 | EXPORT_SYMBOL_GPL(pm_generic_runtime_idle); | ||
36 | |||
37 | /** | ||
38 | * pm_generic_runtime_suspend - Generic runtime suspend callback for subsystems. | 15 | * pm_generic_runtime_suspend - Generic runtime suspend callback for subsystems. |
39 | * @dev: Device to suspend. | 16 | * @dev: Device to suspend. |
40 | * | 17 | * |
diff --git a/drivers/base/power/runtime.c b/drivers/base/power/runtime.c index ef13ad08afb2..268a35097578 100644 --- a/drivers/base/power/runtime.c +++ b/drivers/base/power/runtime.c | |||
@@ -293,11 +293,8 @@ static int rpm_idle(struct device *dev, int rpmflags) | |||
293 | /* Pending requests need to be canceled. */ | 293 | /* Pending requests need to be canceled. */ |
294 | dev->power.request = RPM_REQ_NONE; | 294 | dev->power.request = RPM_REQ_NONE; |
295 | 295 | ||
296 | if (dev->power.no_callbacks) { | 296 | if (dev->power.no_callbacks) |
297 | /* Assume ->runtime_idle() callback would have suspended. */ | ||
298 | retval = rpm_suspend(dev, rpmflags); | ||
299 | goto out; | 297 | goto out; |
300 | } | ||
301 | 298 | ||
302 | /* Carry out an asynchronous or a synchronous idle notification. */ | 299 | /* Carry out an asynchronous or a synchronous idle notification. */ |
303 | if (rpmflags & RPM_ASYNC) { | 300 | if (rpmflags & RPM_ASYNC) { |
@@ -306,7 +303,8 @@ static int rpm_idle(struct device *dev, int rpmflags) | |||
306 | dev->power.request_pending = true; | 303 | dev->power.request_pending = true; |
307 | queue_work(pm_wq, &dev->power.work); | 304 | queue_work(pm_wq, &dev->power.work); |
308 | } | 305 | } |
309 | goto out; | 306 | trace_rpm_return_int(dev, _THIS_IP_, 0); |
307 | return 0; | ||
310 | } | 308 | } |
311 | 309 | ||
312 | dev->power.idle_notification = true; | 310 | dev->power.idle_notification = true; |
@@ -326,14 +324,14 @@ static int rpm_idle(struct device *dev, int rpmflags) | |||
326 | callback = dev->driver->pm->runtime_idle; | 324 | callback = dev->driver->pm->runtime_idle; |
327 | 325 | ||
328 | if (callback) | 326 | if (callback) |
329 | __rpm_callback(callback, dev); | 327 | retval = __rpm_callback(callback, dev); |
330 | 328 | ||
331 | dev->power.idle_notification = false; | 329 | dev->power.idle_notification = false; |
332 | wake_up_all(&dev->power.wait_queue); | 330 | wake_up_all(&dev->power.wait_queue); |
333 | 331 | ||
334 | out: | 332 | out: |
335 | trace_rpm_return_int(dev, _THIS_IP_, retval); | 333 | trace_rpm_return_int(dev, _THIS_IP_, retval); |
336 | return retval; | 334 | return retval ? retval : rpm_suspend(dev, rpmflags); |
337 | } | 335 | } |
338 | 336 | ||
339 | /** | 337 | /** |
diff --git a/drivers/dma/intel_mid_dma.c b/drivers/dma/intel_mid_dma.c index a0de82e21a7c..a975ebebea8a 100644 --- a/drivers/dma/intel_mid_dma.c +++ b/drivers/dma/intel_mid_dma.c | |||
@@ -1405,7 +1405,7 @@ static int dma_runtime_idle(struct device *dev) | |||
1405 | return -EAGAIN; | 1405 | return -EAGAIN; |
1406 | } | 1406 | } |
1407 | 1407 | ||
1408 | return pm_schedule_suspend(dev, 0); | 1408 | return 0; |
1409 | } | 1409 | } |
1410 | 1410 | ||
1411 | /****************************************************************************** | 1411 | /****************************************************************************** |
diff --git a/drivers/gpio/gpio-langwell.c b/drivers/gpio/gpio-langwell.c index 62ef10a641c4..89d0d2a3b1bb 100644 --- a/drivers/gpio/gpio-langwell.c +++ b/drivers/gpio/gpio-langwell.c | |||
@@ -305,11 +305,7 @@ static const struct irq_domain_ops lnw_gpio_irq_ops = { | |||
305 | 305 | ||
306 | static int lnw_gpio_runtime_idle(struct device *dev) | 306 | static int lnw_gpio_runtime_idle(struct device *dev) |
307 | { | 307 | { |
308 | int err = pm_schedule_suspend(dev, 500); | 308 | pm_schedule_suspend(dev, 500); |
309 | |||
310 | if (!err) | ||
311 | return 0; | ||
312 | |||
313 | return -EBUSY; | 309 | return -EBUSY; |
314 | } | 310 | } |
315 | 311 | ||
diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c index 48e31ed69dbf..f32ca293ae0e 100644 --- a/drivers/i2c/i2c-core.c +++ b/drivers/i2c/i2c-core.c | |||
@@ -435,7 +435,7 @@ static const struct dev_pm_ops i2c_device_pm_ops = { | |||
435 | SET_RUNTIME_PM_OPS( | 435 | SET_RUNTIME_PM_OPS( |
436 | pm_generic_runtime_suspend, | 436 | pm_generic_runtime_suspend, |
437 | pm_generic_runtime_resume, | 437 | pm_generic_runtime_resume, |
438 | pm_generic_runtime_idle | 438 | NULL |
439 | ) | 439 | ) |
440 | }; | 440 | }; |
441 | 441 | ||
diff --git a/drivers/mfd/ab8500-gpadc.c b/drivers/mfd/ab8500-gpadc.c index 13f7866de46e..3598b0ecf8c7 100644 --- a/drivers/mfd/ab8500-gpadc.c +++ b/drivers/mfd/ab8500-gpadc.c | |||
@@ -886,12 +886,6 @@ static int ab8500_gpadc_runtime_resume(struct device *dev) | |||
886 | return ret; | 886 | return ret; |
887 | } | 887 | } |
888 | 888 | ||
889 | static int ab8500_gpadc_runtime_idle(struct device *dev) | ||
890 | { | ||
891 | pm_runtime_suspend(dev); | ||
892 | return 0; | ||
893 | } | ||
894 | |||
895 | static int ab8500_gpadc_suspend(struct device *dev) | 889 | static int ab8500_gpadc_suspend(struct device *dev) |
896 | { | 890 | { |
897 | struct ab8500_gpadc *gpadc = dev_get_drvdata(dev); | 891 | struct ab8500_gpadc *gpadc = dev_get_drvdata(dev); |
@@ -1039,7 +1033,7 @@ static int ab8500_gpadc_remove(struct platform_device *pdev) | |||
1039 | static const struct dev_pm_ops ab8500_gpadc_pm_ops = { | 1033 | static const struct dev_pm_ops ab8500_gpadc_pm_ops = { |
1040 | SET_RUNTIME_PM_OPS(ab8500_gpadc_runtime_suspend, | 1034 | SET_RUNTIME_PM_OPS(ab8500_gpadc_runtime_suspend, |
1041 | ab8500_gpadc_runtime_resume, | 1035 | ab8500_gpadc_runtime_resume, |
1042 | ab8500_gpadc_runtime_idle) | 1036 | NULL) |
1043 | SET_SYSTEM_SLEEP_PM_OPS(ab8500_gpadc_suspend, | 1037 | SET_SYSTEM_SLEEP_PM_OPS(ab8500_gpadc_suspend, |
1044 | ab8500_gpadc_resume) | 1038 | ab8500_gpadc_resume) |
1045 | 1039 | ||
diff --git a/drivers/mmc/core/bus.c b/drivers/mmc/core/bus.c index e219c97a02a4..9d5c71125576 100644 --- a/drivers/mmc/core/bus.c +++ b/drivers/mmc/core/bus.c | |||
@@ -164,7 +164,7 @@ static int mmc_runtime_resume(struct device *dev) | |||
164 | 164 | ||
165 | static int mmc_runtime_idle(struct device *dev) | 165 | static int mmc_runtime_idle(struct device *dev) |
166 | { | 166 | { |
167 | return pm_runtime_suspend(dev); | 167 | return 0; |
168 | } | 168 | } |
169 | 169 | ||
170 | #endif /* !CONFIG_PM_RUNTIME */ | 170 | #endif /* !CONFIG_PM_RUNTIME */ |
diff --git a/drivers/mmc/core/sdio_bus.c b/drivers/mmc/core/sdio_bus.c index 546c67c2bbbf..6d67492a9247 100644 --- a/drivers/mmc/core/sdio_bus.c +++ b/drivers/mmc/core/sdio_bus.c | |||
@@ -211,7 +211,7 @@ static const struct dev_pm_ops sdio_bus_pm_ops = { | |||
211 | SET_RUNTIME_PM_OPS( | 211 | SET_RUNTIME_PM_OPS( |
212 | pm_generic_runtime_suspend, | 212 | pm_generic_runtime_suspend, |
213 | pm_generic_runtime_resume, | 213 | pm_generic_runtime_resume, |
214 | pm_generic_runtime_idle | 214 | NULL |
215 | ) | 215 | ) |
216 | }; | 216 | }; |
217 | 217 | ||
diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c index 79277fb36c6b..e6515e21afa3 100644 --- a/drivers/pci/pci-driver.c +++ b/drivers/pci/pci-driver.c | |||
@@ -1050,26 +1050,22 @@ static int pci_pm_runtime_idle(struct device *dev) | |||
1050 | { | 1050 | { |
1051 | struct pci_dev *pci_dev = to_pci_dev(dev); | 1051 | struct pci_dev *pci_dev = to_pci_dev(dev); |
1052 | const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; | 1052 | const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; |
1053 | int ret = 0; | ||
1053 | 1054 | ||
1054 | /* | 1055 | /* |
1055 | * If pci_dev->driver is not set (unbound), the device should | 1056 | * If pci_dev->driver is not set (unbound), the device should |
1056 | * always remain in D0 regardless of the runtime PM status | 1057 | * always remain in D0 regardless of the runtime PM status |
1057 | */ | 1058 | */ |
1058 | if (!pci_dev->driver) | 1059 | if (!pci_dev->driver) |
1059 | goto out; | 1060 | return 0; |
1060 | 1061 | ||
1061 | if (!pm) | 1062 | if (!pm) |
1062 | return -ENOSYS; | 1063 | return -ENOSYS; |
1063 | 1064 | ||
1064 | if (pm->runtime_idle) { | 1065 | if (pm->runtime_idle) |
1065 | int ret = pm->runtime_idle(dev); | 1066 | ret = pm->runtime_idle(dev); |
1066 | if (ret) | ||
1067 | return ret; | ||
1068 | } | ||
1069 | 1067 | ||
1070 | out: | 1068 | return ret; |
1071 | pm_runtime_suspend(dev); | ||
1072 | return 0; | ||
1073 | } | 1069 | } |
1074 | 1070 | ||
1075 | #else /* !CONFIG_PM_RUNTIME */ | 1071 | #else /* !CONFIG_PM_RUNTIME */ |
diff --git a/drivers/scsi/scsi_pm.c b/drivers/scsi/scsi_pm.c index 42539ee2cb11..4c5aabe21755 100644 --- a/drivers/scsi/scsi_pm.c +++ b/drivers/scsi/scsi_pm.c | |||
@@ -229,8 +229,6 @@ static int scsi_runtime_resume(struct device *dev) | |||
229 | 229 | ||
230 | static int scsi_runtime_idle(struct device *dev) | 230 | static int scsi_runtime_idle(struct device *dev) |
231 | { | 231 | { |
232 | int err; | ||
233 | |||
234 | dev_dbg(dev, "scsi_runtime_idle\n"); | 232 | dev_dbg(dev, "scsi_runtime_idle\n"); |
235 | 233 | ||
236 | /* Insert hooks here for targets, hosts, and transport classes */ | 234 | /* Insert hooks here for targets, hosts, and transport classes */ |
@@ -240,14 +238,11 @@ static int scsi_runtime_idle(struct device *dev) | |||
240 | 238 | ||
241 | if (sdev->request_queue->dev) { | 239 | if (sdev->request_queue->dev) { |
242 | pm_runtime_mark_last_busy(dev); | 240 | pm_runtime_mark_last_busy(dev); |
243 | err = pm_runtime_autosuspend(dev); | 241 | pm_runtime_autosuspend(dev); |
244 | } else { | 242 | return -EBUSY; |
245 | err = pm_runtime_suspend(dev); | ||
246 | } | 243 | } |
247 | } else { | ||
248 | err = pm_runtime_suspend(dev); | ||
249 | } | 244 | } |
250 | return err; | 245 | return 0; |
251 | } | 246 | } |
252 | 247 | ||
253 | int scsi_autopm_get_device(struct scsi_device *sdev) | 248 | int scsi_autopm_get_device(struct scsi_device *sdev) |
diff --git a/drivers/sh/pm_runtime.c b/drivers/sh/pm_runtime.c index afe9282629b9..8afa5a4589f2 100644 --- a/drivers/sh/pm_runtime.c +++ b/drivers/sh/pm_runtime.c | |||
@@ -25,7 +25,7 @@ | |||
25 | static int default_platform_runtime_idle(struct device *dev) | 25 | static int default_platform_runtime_idle(struct device *dev) |
26 | { | 26 | { |
27 | /* suspend synchronously to disable clocks immediately */ | 27 | /* suspend synchronously to disable clocks immediately */ |
28 | return pm_runtime_suspend(dev); | 28 | return 0; |
29 | } | 29 | } |
30 | 30 | ||
31 | static struct dev_pm_domain default_pm_domain = { | 31 | static struct dev_pm_domain default_pm_domain = { |
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c index 32b7bb111eb6..095cfaded1c0 100644 --- a/drivers/spi/spi.c +++ b/drivers/spi/spi.c | |||
@@ -223,7 +223,7 @@ static const struct dev_pm_ops spi_pm = { | |||
223 | SET_RUNTIME_PM_OPS( | 223 | SET_RUNTIME_PM_OPS( |
224 | pm_generic_runtime_suspend, | 224 | pm_generic_runtime_suspend, |
225 | pm_generic_runtime_resume, | 225 | pm_generic_runtime_resume, |
226 | pm_generic_runtime_idle | 226 | NULL |
227 | ) | 227 | ) |
228 | }; | 228 | }; |
229 | 229 | ||
diff --git a/drivers/tty/serial/mfd.c b/drivers/tty/serial/mfd.c index 5f4765a7a5c5..5dfcf3bae23a 100644 --- a/drivers/tty/serial/mfd.c +++ b/drivers/tty/serial/mfd.c | |||
@@ -1248,13 +1248,8 @@ static int serial_hsu_resume(struct pci_dev *pdev) | |||
1248 | #ifdef CONFIG_PM_RUNTIME | 1248 | #ifdef CONFIG_PM_RUNTIME |
1249 | static int serial_hsu_runtime_idle(struct device *dev) | 1249 | static int serial_hsu_runtime_idle(struct device *dev) |
1250 | { | 1250 | { |
1251 | int err; | 1251 | pm_schedule_suspend(dev, 500); |
1252 | 1252 | return -EBUSY; | |
1253 | err = pm_schedule_suspend(dev, 500); | ||
1254 | if (err) | ||
1255 | return -EBUSY; | ||
1256 | |||
1257 | return 0; | ||
1258 | } | 1253 | } |
1259 | 1254 | ||
1260 | static int serial_hsu_runtime_suspend(struct device *dev) | 1255 | static int serial_hsu_runtime_suspend(struct device *dev) |
diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c index 6eab440e1542..7609ac4aed1c 100644 --- a/drivers/usb/core/driver.c +++ b/drivers/usb/core/driver.c | |||
@@ -1765,7 +1765,8 @@ int usb_runtime_idle(struct device *dev) | |||
1765 | */ | 1765 | */ |
1766 | if (autosuspend_check(udev) == 0) | 1766 | if (autosuspend_check(udev) == 0) |
1767 | pm_runtime_autosuspend(dev); | 1767 | pm_runtime_autosuspend(dev); |
1768 | return 0; | 1768 | /* Tell the core not to suspend it, though. */ |
1769 | return -EBUSY; | ||
1769 | } | 1770 | } |
1770 | 1771 | ||
1771 | int usb_set_usb2_hardware_lpm(struct usb_device *udev, int enable) | 1772 | int usb_set_usb2_hardware_lpm(struct usb_device *udev, int enable) |
diff --git a/drivers/usb/core/port.c b/drivers/usb/core/port.c index b8bad294eeb8..8c1b2c509467 100644 --- a/drivers/usb/core/port.c +++ b/drivers/usb/core/port.c | |||
@@ -141,7 +141,6 @@ static const struct dev_pm_ops usb_port_pm_ops = { | |||
141 | #ifdef CONFIG_PM_RUNTIME | 141 | #ifdef CONFIG_PM_RUNTIME |
142 | .runtime_suspend = usb_port_runtime_suspend, | 142 | .runtime_suspend = usb_port_runtime_suspend, |
143 | .runtime_resume = usb_port_runtime_resume, | 143 | .runtime_resume = usb_port_runtime_resume, |
144 | .runtime_idle = pm_generic_runtime_idle, | ||
145 | #endif | 144 | #endif |
146 | }; | 145 | }; |
147 | 146 | ||
diff --git a/include/linux/pm_runtime.h b/include/linux/pm_runtime.h index 7d7e09efff9b..6fa7cea25da9 100644 --- a/include/linux/pm_runtime.h +++ b/include/linux/pm_runtime.h | |||
@@ -37,7 +37,6 @@ extern void pm_runtime_enable(struct device *dev); | |||
37 | extern void __pm_runtime_disable(struct device *dev, bool check_resume); | 37 | extern void __pm_runtime_disable(struct device *dev, bool check_resume); |
38 | extern void pm_runtime_allow(struct device *dev); | 38 | extern void pm_runtime_allow(struct device *dev); |
39 | extern void pm_runtime_forbid(struct device *dev); | 39 | extern void pm_runtime_forbid(struct device *dev); |
40 | extern int pm_generic_runtime_idle(struct device *dev); | ||
41 | extern int pm_generic_runtime_suspend(struct device *dev); | 40 | extern int pm_generic_runtime_suspend(struct device *dev); |
42 | extern int pm_generic_runtime_resume(struct device *dev); | 41 | extern int pm_generic_runtime_resume(struct device *dev); |
43 | extern void pm_runtime_no_callbacks(struct device *dev); | 42 | extern void pm_runtime_no_callbacks(struct device *dev); |
@@ -143,7 +142,6 @@ static inline bool pm_runtime_active(struct device *dev) { return true; } | |||
143 | static inline bool pm_runtime_status_suspended(struct device *dev) { return false; } | 142 | static inline bool pm_runtime_status_suspended(struct device *dev) { return false; } |
144 | static inline bool pm_runtime_enabled(struct device *dev) { return false; } | 143 | static inline bool pm_runtime_enabled(struct device *dev) { return false; } |
145 | 144 | ||
146 | static inline int pm_generic_runtime_idle(struct device *dev) { return 0; } | ||
147 | static inline int pm_generic_runtime_suspend(struct device *dev) { return 0; } | 145 | static inline int pm_generic_runtime_suspend(struct device *dev) { return 0; } |
148 | static inline int pm_generic_runtime_resume(struct device *dev) { return 0; } | 146 | static inline int pm_generic_runtime_resume(struct device *dev) { return 0; } |
149 | static inline void pm_runtime_no_callbacks(struct device *dev) {} | 147 | static inline void pm_runtime_no_callbacks(struct device *dev) {} |