mirror of https://github.com/OpenIPC/firmware.git
63 lines
1.9 KiB
Diff
63 lines
1.9 KiB
Diff
diff -drupN a/drivers/base/power/main.c b/drivers/base/power/main.c
|
|
--- a/drivers/base/power/main.c 2018-08-06 17:23:04.000000000 +0300
|
|
+++ b/drivers/base/power/main.c 2022-06-12 05:28:14.000000000 +0300
|
|
@@ -33,6 +33,7 @@
|
|
#include <linux/cpufreq.h>
|
|
#include <linux/cpuidle.h>
|
|
#include <linux/timer.h>
|
|
+#include <linux/wakeup_reason.h>
|
|
|
|
#include "../base.h"
|
|
#include "power.h"
|
|
@@ -95,6 +96,7 @@ void device_pm_sleep_init(struct device
|
|
dev->power.is_suspended = false;
|
|
dev->power.is_noirq_suspended = false;
|
|
dev->power.is_late_suspended = false;
|
|
+ dev->power.is_runtime_disabled = false;
|
|
init_completion(&dev->power.completion);
|
|
complete_all(&dev->power.completion);
|
|
dev->power.wakeup = NULL;
|
|
@@ -746,7 +748,10 @@ static int device_resume(struct device *
|
|
|
|
if (dev->power.direct_complete) {
|
|
/* Match the pm_runtime_disable() in __device_suspend(). */
|
|
- pm_runtime_enable(dev);
|
|
+ if (dev->power.is_runtime_disabled == true) {
|
|
+ pm_runtime_enable(dev);
|
|
+ dev->power.is_runtime_disabled = false;
|
|
+ }
|
|
goto Complete;
|
|
}
|
|
|
|
@@ -1353,6 +1358,7 @@ static int __device_suspend(struct devic
|
|
pm_callback_t callback = NULL;
|
|
char *info = NULL;
|
|
int error = 0;
|
|
+ char suspend_abort[MAX_SUSPEND_ABORT_LEN];
|
|
DECLARE_DPM_WATCHDOG_ON_STACK(wd);
|
|
|
|
TRACE_DEVICE(dev);
|
|
@@ -1373,6 +1379,9 @@ static int __device_suspend(struct devic
|
|
pm_wakeup_event(dev, 0);
|
|
|
|
if (pm_wakeup_pending()) {
|
|
+ pm_get_active_wakeup_sources(suspend_abort,
|
|
+ MAX_SUSPEND_ABORT_LEN);
|
|
+ log_suspend_abort_reason(suspend_abort);
|
|
async_error = -EBUSY;
|
|
goto Complete;
|
|
}
|
|
@@ -1383,10 +1392,12 @@ static int __device_suspend(struct devic
|
|
if (dev->power.direct_complete) {
|
|
if (pm_runtime_status_suspended(dev)) {
|
|
pm_runtime_disable(dev);
|
|
+ dev->power.is_runtime_disabled = true;
|
|
if (pm_runtime_status_suspended(dev))
|
|
goto Complete;
|
|
|
|
pm_runtime_enable(dev);
|
|
+ dev->power.is_runtime_disabled = false;
|
|
}
|
|
dev->power.direct_complete = false;
|
|
}
|