PM / Runtime: Generic resume shouldn't set RPM_ACTIVE unconditionally
The __pm_generic_resume() function changes the given device's runtime PM status to RPM_ACTIVE if its driver's callback returns 0, but it only should do that if the rumtime PM is enabled for the device. Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
This commit is contained in:
parent
5c1a07ab3e
commit
4b31db8a16
2 changed files with 7 additions and 1 deletions
|
@ -185,7 +185,7 @@ static int __pm_generic_resume(struct device *dev, int event)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
ret = callback(dev);
|
ret = callback(dev);
|
||||||
if (!ret) {
|
if (!ret && pm_runtime_enabled(dev)) {
|
||||||
pm_runtime_disable(dev);
|
pm_runtime_disable(dev);
|
||||||
pm_runtime_set_active(dev);
|
pm_runtime_set_active(dev);
|
||||||
pm_runtime_enable(dev);
|
pm_runtime_enable(dev);
|
||||||
|
|
|
@ -82,6 +82,11 @@ static inline bool pm_runtime_suspended(struct device *dev)
|
||||||
&& !dev->power.disable_depth;
|
&& !dev->power.disable_depth;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline bool pm_runtime_enabled(struct device *dev)
|
||||||
|
{
|
||||||
|
return !dev->power.disable_depth;
|
||||||
|
}
|
||||||
|
|
||||||
static inline void pm_runtime_mark_last_busy(struct device *dev)
|
static inline void pm_runtime_mark_last_busy(struct device *dev)
|
||||||
{
|
{
|
||||||
ACCESS_ONCE(dev->power.last_busy) = jiffies;
|
ACCESS_ONCE(dev->power.last_busy) = jiffies;
|
||||||
|
@ -120,6 +125,7 @@ static inline void pm_runtime_put_noidle(struct device *dev) {}
|
||||||
static inline bool device_run_wake(struct device *dev) { return false; }
|
static inline bool device_run_wake(struct device *dev) { return false; }
|
||||||
static inline void device_set_run_wake(struct device *dev, bool enable) {}
|
static inline void device_set_run_wake(struct device *dev, bool enable) {}
|
||||||
static inline bool pm_runtime_suspended(struct device *dev) { return false; }
|
static inline bool pm_runtime_suspended(struct device *dev) { return false; }
|
||||||
|
static inline bool pm_runtime_enabled(struct device *dev) { return false; }
|
||||||
|
|
||||||
static inline int pm_generic_runtime_idle(struct device *dev) { return 0; }
|
static inline int pm_generic_runtime_idle(struct device *dev) { return 0; }
|
||||||
static inline int pm_generic_runtime_suspend(struct device *dev) { return 0; }
|
static inline int pm_generic_runtime_suspend(struct device *dev) { return 0; }
|
||||||
|
|
Loading…
Add table
Reference in a new issue