diff options
-rw-r--r-- | drivers/base/power/domain.c | 8 | ||||
-rw-r--r-- | include/linux/pm_domain.h | 1 |
2 files changed, 9 insertions, 0 deletions
diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c index 33086e9afaf6..1aed94c73cfc 100644 --- a/drivers/base/power/domain.c +++ b/drivers/base/power/domain.c | |||
@@ -450,6 +450,10 @@ static int pm_genpd_suspend_noirq(struct device *dev) | |||
450 | if (ret) | 450 | if (ret) |
451 | return ret; | 451 | return ret; |
452 | 452 | ||
453 | if (device_may_wakeup(dev) | ||
454 | && genpd->active_wakeup && genpd->active_wakeup(dev)) | ||
455 | return 0; | ||
456 | |||
453 | if (genpd->stop_device) | 457 | if (genpd->stop_device) |
454 | genpd->stop_device(dev); | 458 | genpd->stop_device(dev); |
455 | 459 | ||
@@ -670,6 +674,10 @@ static int pm_genpd_dev_poweroff_noirq(struct device *dev) | |||
670 | if (ret) | 674 | if (ret) |
671 | return ret; | 675 | return ret; |
672 | 676 | ||
677 | if (device_may_wakeup(dev) | ||
678 | && genpd->active_wakeup && genpd->active_wakeup(dev)) | ||
679 | return 0; | ||
680 | |||
673 | if (genpd->stop_device) | 681 | if (genpd->stop_device) |
674 | genpd->stop_device(dev); | 682 | genpd->stop_device(dev); |
675 | 683 | ||
diff --git a/include/linux/pm_domain.h b/include/linux/pm_domain.h index 7961b0dac437..98491ee35102 100644 --- a/include/linux/pm_domain.h +++ b/include/linux/pm_domain.h | |||
@@ -38,6 +38,7 @@ struct generic_pm_domain { | |||
38 | int (*power_on)(struct generic_pm_domain *domain); | 38 | int (*power_on)(struct generic_pm_domain *domain); |
39 | int (*start_device)(struct device *dev); | 39 | int (*start_device)(struct device *dev); |
40 | int (*stop_device)(struct device *dev); | 40 | int (*stop_device)(struct device *dev); |
41 | bool (*active_wakeup)(struct device *dev); | ||
41 | }; | 42 | }; |
42 | 43 | ||
43 | static inline struct generic_pm_domain *pd_to_genpd(struct dev_pm_domain *pd) | 44 | static inline struct generic_pm_domain *pd_to_genpd(struct dev_pm_domain *pd) |