diff options
| author | Rafael J. Wysocki <rjw@sisk.pl> | 2011-08-14 07:34:31 -0400 |
|---|---|---|
| committer | Rafael J. Wysocki <rjw@sisk.pl> | 2011-08-14 07:34:31 -0400 |
| commit | 17f2ae7f677f023997e02fd2ebabd90ea2a0390d (patch) | |
| tree | 9f333057d8771adc432687417c2bfe28164f1e48 | |
| parent | 91d85ea6786107aa2837bef3e957165ad7c8b823 (diff) | |
PM / Domains: Fix build for CONFIG_PM_RUNTIME unset
Function genpd_queue_power_off_work() is not defined for
CONFIG_PM_RUNTIME, so pm_genpd_poweroff_unused() causes a build
error to happen in that case. Fix the problem by making
pm_genpd_poweroff_unused() depend on CONFIG_PM_RUNTIME too.
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
| -rw-r--r-- | drivers/base/power/domain.c | 30 | ||||
| -rw-r--r-- | include/linux/pm_domain.h | 10 | ||||
| -rw-r--r-- | kernel/power/Kconfig | 4 |
3 files changed, 26 insertions, 18 deletions
diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c index e18566a0fedd..1c374579407c 100644 --- a/drivers/base/power/domain.c +++ b/drivers/base/power/domain.c | |||
| @@ -460,6 +460,21 @@ static int pm_genpd_runtime_resume(struct device *dev) | |||
| 460 | return 0; | 460 | return 0; |
| 461 | } | 461 | } |
| 462 | 462 | ||
| 463 | /** | ||
| 464 | * pm_genpd_poweroff_unused - Power off all PM domains with no devices in use. | ||
| 465 | */ | ||
| 466 | void pm_genpd_poweroff_unused(void) | ||
| 467 | { | ||
| 468 | struct generic_pm_domain *genpd; | ||
| 469 | |||
| 470 | mutex_lock(&gpd_list_lock); | ||
| 471 | |||
| 472 | list_for_each_entry(genpd, &gpd_list, gpd_list_node) | ||
| 473 | genpd_queue_power_off_work(genpd); | ||
| 474 | |||
| 475 | mutex_unlock(&gpd_list_lock); | ||
| 476 | } | ||
| 477 | |||
| 463 | #else | 478 | #else |
| 464 | 479 | ||
| 465 | static inline void genpd_power_off_work_fn(struct work_struct *work) {} | 480 | static inline void genpd_power_off_work_fn(struct work_struct *work) {} |
| @@ -1255,18 +1270,3 @@ void pm_genpd_init(struct generic_pm_domain *genpd, | |||
| 1255 | list_add(&genpd->gpd_list_node, &gpd_list); | 1270 | list_add(&genpd->gpd_list_node, &gpd_list); |
| 1256 | mutex_unlock(&gpd_list_lock); | 1271 | mutex_unlock(&gpd_list_lock); |
| 1257 | } | 1272 | } |
| 1258 | |||
| 1259 | /** | ||
| 1260 | * pm_genpd_poweroff_unused - Power off all PM domains with no devices in use. | ||
| 1261 | */ | ||
| 1262 | void pm_genpd_poweroff_unused(void) | ||
| 1263 | { | ||
| 1264 | struct generic_pm_domain *genpd; | ||
| 1265 | |||
| 1266 | mutex_lock(&gpd_list_lock); | ||
| 1267 | |||
| 1268 | list_for_each_entry(genpd, &gpd_list, gpd_list_node) | ||
| 1269 | genpd_queue_power_off_work(genpd); | ||
| 1270 | |||
| 1271 | mutex_unlock(&gpd_list_lock); | ||
| 1272 | } | ||
diff --git a/include/linux/pm_domain.h b/include/linux/pm_domain.h index 21097cb086fe..f9ec1736a116 100644 --- a/include/linux/pm_domain.h +++ b/include/linux/pm_domain.h | |||
| @@ -72,8 +72,6 @@ extern int pm_genpd_remove_subdomain(struct generic_pm_domain *genpd, | |||
| 72 | extern void pm_genpd_init(struct generic_pm_domain *genpd, | 72 | extern void pm_genpd_init(struct generic_pm_domain *genpd, |
| 73 | struct dev_power_governor *gov, bool is_off); | 73 | struct dev_power_governor *gov, bool is_off); |
| 74 | extern int pm_genpd_poweron(struct generic_pm_domain *genpd); | 74 | extern int pm_genpd_poweron(struct generic_pm_domain *genpd); |
| 75 | extern void pm_genpd_poweroff_unused(void); | ||
| 76 | extern void genpd_queue_power_off_work(struct generic_pm_domain *genpd); | ||
| 77 | #else | 75 | #else |
| 78 | static inline int pm_genpd_add_device(struct generic_pm_domain *genpd, | 76 | static inline int pm_genpd_add_device(struct generic_pm_domain *genpd, |
| 79 | struct device *dev) | 77 | struct device *dev) |
| @@ -101,8 +99,14 @@ static inline int pm_genpd_poweron(struct generic_pm_domain *genpd) | |||
| 101 | { | 99 | { |
| 102 | return -ENOSYS; | 100 | return -ENOSYS; |
| 103 | } | 101 | } |
| 104 | static inline void pm_genpd_poweroff_unused(void) {} | 102 | #endif |
| 103 | |||
| 104 | #ifdef CONFIG_PM_GENERIC_DOMAINS_RUNTIME | ||
| 105 | extern void genpd_queue_power_off_work(struct generic_pm_domain *genpd); | ||
| 106 | extern void pm_genpd_poweroff_unused(void); | ||
| 107 | #else | ||
| 105 | static inline void genpd_queue_power_off_work(struct generic_pm_domain *gpd) {} | 108 | static inline void genpd_queue_power_off_work(struct generic_pm_domain *gpd) {} |
| 109 | static inline void pm_genpd_poweroff_unused(void) {} | ||
| 106 | #endif | 110 | #endif |
| 107 | 111 | ||
| 108 | #endif /* _LINUX_PM_DOMAIN_H */ | 112 | #endif /* _LINUX_PM_DOMAIN_H */ |
diff --git a/kernel/power/Kconfig b/kernel/power/Kconfig index b1914cb9095c..3744c594b19b 100644 --- a/kernel/power/Kconfig +++ b/kernel/power/Kconfig | |||
| @@ -231,3 +231,7 @@ config PM_CLK | |||
| 231 | config PM_GENERIC_DOMAINS | 231 | config PM_GENERIC_DOMAINS |
| 232 | bool | 232 | bool |
| 233 | depends on PM | 233 | depends on PM |
| 234 | |||
| 235 | config PM_GENERIC_DOMAINS_RUNTIME | ||
| 236 | def_bool y | ||
| 237 | depends on PM_RUNTIME && PM_GENERIC_DOMAINS | ||
