diff options
author | Rafael J. Wysocki <rjw@sisk.pl> | 2012-03-26 23:25:24 +0200 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2012-04-02 10:32:10 -0700 |
commit | 166a1687a4d1ad2fa237452355a5ec018dc68cc5 (patch) | |
tree | 410094f4fce8700bc3314af8e50f73be040008e1 /include | |
parent | fd0682d1b4f47792cfe668c7979d73f168e9f1aa (diff) |
PM / Domains: Introduce "always on" device flag
This is a backport of mainline commit
1e78a0c7fc92aee076965d516cf54475c39e9894.
The TMU device on the Mackerel board belongs to the A4R power domain
and loses power when the domain is turned off. Unfortunately, the
TMU driver is not prepared to cope with such situations and crashes
the system when that happens. To work around this problem introduce
a new helper function, pm_genpd_dev_always_on(), allowing a device
driver to mark its device as "always on" in case it belongs to a PM
domain, which will make the generic PM domains core code avoid
powering off the domain containing the device, both at run time and
during system suspend.
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Tested-by: Simon Horman <horms@verge.net.au>
Acked-by: Paul Mundt <lethal@linux-sh.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/pm_domain.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/include/linux/pm_domain.h b/include/linux/pm_domain.h index a03a0ad998b8..5a82c0908bf3 100644 --- a/include/linux/pm_domain.h +++ b/include/linux/pm_domain.h @@ -97,6 +97,7 @@ struct generic_pm_domain_data { struct gpd_dev_ops ops; struct gpd_timing_data td; bool need_restore; + bool always_on; }; static inline struct generic_pm_domain_data *to_gpd_data(struct pm_domain_data *pdd) @@ -125,6 +126,7 @@ static inline int pm_genpd_add_device(struct generic_pm_domain *genpd, extern int pm_genpd_remove_device(struct generic_pm_domain *genpd, struct device *dev); +extern void pm_genpd_dev_always_on(struct device *dev, bool val); extern int pm_genpd_add_subdomain(struct generic_pm_domain *genpd, struct generic_pm_domain *new_subdomain); extern int pm_genpd_remove_subdomain(struct generic_pm_domain *genpd, @@ -163,6 +165,7 @@ static inline int pm_genpd_remove_device(struct generic_pm_domain *genpd, { return -ENOSYS; } +static inline void pm_genpd_dev_always_on(struct device *dev, bool val) {} static inline int pm_genpd_add_subdomain(struct generic_pm_domain *genpd, struct generic_pm_domain *new_sd) { |