diff options
-rw-r--r-- | drivers/base/power/domain.c | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c index 1a0549f1944a..792fbab3dfc4 100644 --- a/drivers/base/power/domain.c +++ b/drivers/base/power/domain.c | |||
@@ -121,6 +121,7 @@ static const struct genpd_lock_ops genpd_spin_ops = { | |||
121 | #define genpd_lock_interruptible(p) p->lock_ops->lock_interruptible(p) | 121 | #define genpd_lock_interruptible(p) p->lock_ops->lock_interruptible(p) |
122 | #define genpd_unlock(p) p->lock_ops->unlock(p) | 122 | #define genpd_unlock(p) p->lock_ops->unlock(p) |
123 | 123 | ||
124 | #define genpd_status_on(genpd) (genpd->status == GPD_STATE_ACTIVE) | ||
124 | #define genpd_is_irq_safe(genpd) (genpd->flags & GENPD_FLAG_IRQ_SAFE) | 125 | #define genpd_is_irq_safe(genpd) (genpd->flags & GENPD_FLAG_IRQ_SAFE) |
125 | 126 | ||
126 | static inline bool irq_safe_dev_in_no_sleep_domain(struct device *dev, | 127 | static inline bool irq_safe_dev_in_no_sleep_domain(struct device *dev, |
@@ -296,8 +297,7 @@ static int genpd_power_off(struct generic_pm_domain *genpd, bool one_dev_on, | |||
296 | * (1) The domain is already in the "power off" state. | 297 | * (1) The domain is already in the "power off" state. |
297 | * (2) System suspend is in progress. | 298 | * (2) System suspend is in progress. |
298 | */ | 299 | */ |
299 | if (genpd->status == GPD_STATE_POWER_OFF | 300 | if (!genpd_status_on(genpd) || genpd->prepared_count > 0) |
300 | || genpd->prepared_count > 0) | ||
301 | return 0; | 301 | return 0; |
302 | 302 | ||
303 | if (atomic_read(&genpd->sd_count) > 0) | 303 | if (atomic_read(&genpd->sd_count) > 0) |
@@ -373,7 +373,7 @@ static int genpd_power_on(struct generic_pm_domain *genpd, unsigned int depth) | |||
373 | struct gpd_link *link; | 373 | struct gpd_link *link; |
374 | int ret = 0; | 374 | int ret = 0; |
375 | 375 | ||
376 | if (genpd->status == GPD_STATE_ACTIVE) | 376 | if (genpd_status_on(genpd)) |
377 | return 0; | 377 | return 0; |
378 | 378 | ||
379 | /* | 379 | /* |
@@ -752,7 +752,7 @@ static void genpd_sync_power_off(struct generic_pm_domain *genpd, bool use_lock, | |||
752 | { | 752 | { |
753 | struct gpd_link *link; | 753 | struct gpd_link *link; |
754 | 754 | ||
755 | if (genpd->status == GPD_STATE_POWER_OFF) | 755 | if (!genpd_status_on(genpd)) |
756 | return; | 756 | return; |
757 | 757 | ||
758 | if (genpd->suspended_count != genpd->device_count | 758 | if (genpd->suspended_count != genpd->device_count |
@@ -793,7 +793,7 @@ static void genpd_sync_power_on(struct generic_pm_domain *genpd, bool use_lock, | |||
793 | { | 793 | { |
794 | struct gpd_link *link; | 794 | struct gpd_link *link; |
795 | 795 | ||
796 | if (genpd->status == GPD_STATE_ACTIVE) | 796 | if (genpd_status_on(genpd)) |
797 | return; | 797 | return; |
798 | 798 | ||
799 | list_for_each_entry(link, &genpd->slave_links, slave_node) { | 799 | list_for_each_entry(link, &genpd->slave_links, slave_node) { |
@@ -1329,8 +1329,7 @@ static int genpd_add_subdomain(struct generic_pm_domain *genpd, | |||
1329 | genpd_lock(subdomain); | 1329 | genpd_lock(subdomain); |
1330 | genpd_lock_nested(genpd, SINGLE_DEPTH_NESTING); | 1330 | genpd_lock_nested(genpd, SINGLE_DEPTH_NESTING); |
1331 | 1331 | ||
1332 | if (genpd->status == GPD_STATE_POWER_OFF | 1332 | if (!genpd_status_on(genpd) && genpd_status_on(subdomain)) { |
1333 | && subdomain->status != GPD_STATE_POWER_OFF) { | ||
1334 | ret = -EINVAL; | 1333 | ret = -EINVAL; |
1335 | goto out; | 1334 | goto out; |
1336 | } | 1335 | } |
@@ -1346,7 +1345,7 @@ static int genpd_add_subdomain(struct generic_pm_domain *genpd, | |||
1346 | list_add_tail(&link->master_node, &genpd->master_links); | 1345 | list_add_tail(&link->master_node, &genpd->master_links); |
1347 | link->slave = subdomain; | 1346 | link->slave = subdomain; |
1348 | list_add_tail(&link->slave_node, &subdomain->slave_links); | 1347 | list_add_tail(&link->slave_node, &subdomain->slave_links); |
1349 | if (subdomain->status != GPD_STATE_POWER_OFF) | 1348 | if (genpd_status_on(subdomain)) |
1350 | genpd_sd_counter_inc(genpd); | 1349 | genpd_sd_counter_inc(genpd); |
1351 | 1350 | ||
1352 | out: | 1351 | out: |
@@ -1406,7 +1405,7 @@ int pm_genpd_remove_subdomain(struct generic_pm_domain *genpd, | |||
1406 | list_del(&link->master_node); | 1405 | list_del(&link->master_node); |
1407 | list_del(&link->slave_node); | 1406 | list_del(&link->slave_node); |
1408 | kfree(link); | 1407 | kfree(link); |
1409 | if (subdomain->status != GPD_STATE_POWER_OFF) | 1408 | if (genpd_status_on(subdomain)) |
1410 | genpd_sd_counter_dec(genpd); | 1409 | genpd_sd_counter_dec(genpd); |
1411 | 1410 | ||
1412 | ret = 0; | 1411 | ret = 0; |
@@ -2221,7 +2220,7 @@ static int pm_genpd_summary_one(struct seq_file *s, | |||
2221 | 2220 | ||
2222 | if (WARN_ON(genpd->status >= ARRAY_SIZE(status_lookup))) | 2221 | if (WARN_ON(genpd->status >= ARRAY_SIZE(status_lookup))) |
2223 | goto exit; | 2222 | goto exit; |
2224 | if (genpd->status == GPD_STATE_POWER_OFF) | 2223 | if (!genpd_status_on(genpd)) |
2225 | snprintf(state, sizeof(state), "%s-%u", | 2224 | snprintf(state, sizeof(state), "%s-%u", |
2226 | status_lookup[genpd->status], genpd->state_idx); | 2225 | status_lookup[genpd->status], genpd->state_idx); |
2227 | else | 2226 | else |