aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/base/power/domain.c19
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
126static inline bool irq_safe_dev_in_no_sleep_domain(struct device *dev, 127static 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