| From 4fe58a1e5cb487f882266b410d34b2c5041eea7c Mon Sep 17 00:00:00 2001 |
| From: Mark Brown <broonie@opensource.wolfsonmicro.com> |
| Date: Thu, 8 Dec 2011 23:27:28 +0100 |
| Subject: PM / Domains: Provide an always on power domain governor |
| |
| Since systems are likely to have power domains that can't be turned off |
| for various reasons at least temporarily while implementing power domain |
| support provide a default governor which will always refuse to power off |
| the domain, saving platforms having to implement their own. |
| |
| Since the code is so tiny don't bother with a Kconfig symbol for it. |
| |
| Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> |
| Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl> |
| (cherry picked from commit 925b44a273aa8c4c23c006c1228aacd538eead09) |
| |
| Signed-off-by: Simon Horman <horms@verge.net.au> |
| --- |
| drivers/base/power/domain_governor.c | 13 +++++++++++++ |
| include/linux/pm_domain.h | 2 ++ |
| 2 files changed, 15 insertions(+) |
| |
| diff --git a/drivers/base/power/domain_governor.c b/drivers/base/power/domain_governor.c |
| index da78540..51527ee 100644 |
| --- a/drivers/base/power/domain_governor.c |
| +++ b/drivers/base/power/domain_governor.c |
| @@ -141,3 +141,16 @@ struct dev_power_governor simple_qos_governor = { |
| .stop_ok = default_stop_ok, |
| .power_down_ok = default_power_down_ok, |
| }; |
| + |
| +static bool always_on_power_down_ok(struct dev_pm_domain *domain) |
| +{ |
| + return false; |
| +} |
| + |
| +/** |
| + * pm_genpd_gov_always_on - A governor implementing an always-on policy |
| + */ |
| +struct dev_power_governor pm_domain_always_on_gov = { |
| + .power_down_ok = always_on_power_down_ok, |
| + .stop_ok = default_stop_ok, |
| +}; |
| diff --git a/include/linux/pm_domain.h b/include/linux/pm_domain.h |
| index fb809b9..a03a0ad 100644 |
| --- a/include/linux/pm_domain.h |
| +++ b/include/linux/pm_domain.h |
| @@ -140,6 +140,7 @@ extern int pm_genpd_poweron(struct generic_pm_domain *genpd); |
| |
| extern bool default_stop_ok(struct device *dev); |
| |
| +extern struct dev_power_governor pm_domain_always_on_gov; |
| #else |
| |
| static inline struct generic_pm_domain *dev_to_genpd(struct device *dev) |
| @@ -193,6 +194,7 @@ static inline bool default_stop_ok(struct device *dev) |
| { |
| return false; |
| } |
| +#define pm_domain_always_on_gov NULL |
| #endif |
| |
| static inline int pm_genpd_remove_callbacks(struct device *dev) |
| -- |
| 1.7.10.1.362.g242cab3 |
| |