|
@@ -405,6 +405,9 @@ static int device_resume_noirq(struct device *dev, pm_message_t state)
|
|
TRACE_DEVICE(dev);
|
|
TRACE_DEVICE(dev);
|
|
TRACE_RESUME(0);
|
|
TRACE_RESUME(0);
|
|
|
|
|
|
|
|
+ if (dev->power.syscore)
|
|
|
|
+ goto Out;
|
|
|
|
+
|
|
if (dev->pm_domain) {
|
|
if (dev->pm_domain) {
|
|
info = "noirq power domain ";
|
|
info = "noirq power domain ";
|
|
callback = pm_noirq_op(&dev->pm_domain->ops, state);
|
|
callback = pm_noirq_op(&dev->pm_domain->ops, state);
|
|
@@ -426,6 +429,7 @@ static int device_resume_noirq(struct device *dev, pm_message_t state)
|
|
|
|
|
|
error = dpm_run_callback(callback, dev, state, info);
|
|
error = dpm_run_callback(callback, dev, state, info);
|
|
|
|
|
|
|
|
+ Out:
|
|
TRACE_RESUME(error);
|
|
TRACE_RESUME(error);
|
|
return error;
|
|
return error;
|
|
}
|
|
}
|
|
@@ -483,6 +487,9 @@ static int device_resume_early(struct device *dev, pm_message_t state)
|
|
TRACE_DEVICE(dev);
|
|
TRACE_DEVICE(dev);
|
|
TRACE_RESUME(0);
|
|
TRACE_RESUME(0);
|
|
|
|
|
|
|
|
+ if (dev->power.syscore)
|
|
|
|
+ goto Out;
|
|
|
|
+
|
|
if (dev->pm_domain) {
|
|
if (dev->pm_domain) {
|
|
info = "early power domain ";
|
|
info = "early power domain ";
|
|
callback = pm_late_early_op(&dev->pm_domain->ops, state);
|
|
callback = pm_late_early_op(&dev->pm_domain->ops, state);
|
|
@@ -504,6 +511,7 @@ static int device_resume_early(struct device *dev, pm_message_t state)
|
|
|
|
|
|
error = dpm_run_callback(callback, dev, state, info);
|
|
error = dpm_run_callback(callback, dev, state, info);
|
|
|
|
|
|
|
|
+ Out:
|
|
TRACE_RESUME(error);
|
|
TRACE_RESUME(error);
|
|
return error;
|
|
return error;
|
|
}
|
|
}
|
|
@@ -567,6 +575,9 @@ static int device_resume(struct device *dev, pm_message_t state, bool async)
|
|
TRACE_DEVICE(dev);
|
|
TRACE_DEVICE(dev);
|
|
TRACE_RESUME(0);
|
|
TRACE_RESUME(0);
|
|
|
|
|
|
|
|
+ if (dev->power.syscore)
|
|
|
|
+ goto Complete;
|
|
|
|
+
|
|
dpm_wait(dev->parent, async);
|
|
dpm_wait(dev->parent, async);
|
|
device_lock(dev);
|
|
device_lock(dev);
|
|
|
|
|
|
@@ -629,6 +640,8 @@ static int device_resume(struct device *dev, pm_message_t state, bool async)
|
|
|
|
|
|
Unlock:
|
|
Unlock:
|
|
device_unlock(dev);
|
|
device_unlock(dev);
|
|
|
|
+
|
|
|
|
+ Complete:
|
|
complete_all(&dev->power.completion);
|
|
complete_all(&dev->power.completion);
|
|
|
|
|
|
TRACE_RESUME(error);
|
|
TRACE_RESUME(error);
|
|
@@ -719,6 +732,9 @@ static void device_complete(struct device *dev, pm_message_t state)
|
|
void (*callback)(struct device *) = NULL;
|
|
void (*callback)(struct device *) = NULL;
|
|
char *info = NULL;
|
|
char *info = NULL;
|
|
|
|
|
|
|
|
+ if (dev->power.syscore)
|
|
|
|
+ return;
|
|
|
|
+
|
|
device_lock(dev);
|
|
device_lock(dev);
|
|
|
|
|
|
if (dev->pm_domain) {
|
|
if (dev->pm_domain) {
|
|
@@ -831,6 +847,9 @@ static int device_suspend_noirq(struct device *dev, pm_message_t state)
|
|
pm_callback_t callback = NULL;
|
|
pm_callback_t callback = NULL;
|
|
char *info = NULL;
|
|
char *info = NULL;
|
|
|
|
|
|
|
|
+ if (dev->power.syscore)
|
|
|
|
+ return 0;
|
|
|
|
+
|
|
if (dev->pm_domain) {
|
|
if (dev->pm_domain) {
|
|
info = "noirq power domain ";
|
|
info = "noirq power domain ";
|
|
callback = pm_noirq_op(&dev->pm_domain->ops, state);
|
|
callback = pm_noirq_op(&dev->pm_domain->ops, state);
|
|
@@ -914,6 +933,9 @@ static int device_suspend_late(struct device *dev, pm_message_t state)
|
|
pm_callback_t callback = NULL;
|
|
pm_callback_t callback = NULL;
|
|
char *info = NULL;
|
|
char *info = NULL;
|
|
|
|
|
|
|
|
+ if (dev->power.syscore)
|
|
|
|
+ return 0;
|
|
|
|
+
|
|
if (dev->pm_domain) {
|
|
if (dev->pm_domain) {
|
|
info = "late power domain ";
|
|
info = "late power domain ";
|
|
callback = pm_late_early_op(&dev->pm_domain->ops, state);
|
|
callback = pm_late_early_op(&dev->pm_domain->ops, state);
|
|
@@ -1050,6 +1072,9 @@ static int __device_suspend(struct device *dev, pm_message_t state, bool async)
|
|
goto Complete;
|
|
goto Complete;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if (dev->power.syscore)
|
|
|
|
+ goto Complete;
|
|
|
|
+
|
|
device_lock(dev);
|
|
device_lock(dev);
|
|
|
|
|
|
if (dev->pm_domain) {
|
|
if (dev->pm_domain) {
|
|
@@ -1206,6 +1231,9 @@ static int device_prepare(struct device *dev, pm_message_t state)
|
|
char *info = NULL;
|
|
char *info = NULL;
|
|
int error = 0;
|
|
int error = 0;
|
|
|
|
|
|
|
|
+ if (dev->power.syscore)
|
|
|
|
+ return 0;
|
|
|
|
+
|
|
device_lock(dev);
|
|
device_lock(dev);
|
|
|
|
|
|
dev->power.wakeup_path = device_may_wakeup(dev);
|
|
dev->power.wakeup_path = device_may_wakeup(dev);
|