diff options
Diffstat (limited to 'drivers/pmdomain/core.c')
| -rw-r--r-- | drivers/pmdomain/core.c | 21 | 
1 files changed, 16 insertions, 5 deletions
diff --git a/drivers/pmdomain/core.c b/drivers/pmdomain/core.c index 4215ffd9b11c..623d15b68707 100644 --- a/drivers/pmdomain/core.c +++ b/drivers/pmdomain/core.c @@ -184,6 +184,16 @@ static struct generic_pm_domain *dev_to_genpd(struct device *dev)  	return pd_to_genpd(dev->pm_domain);  } +struct device *dev_to_genpd_dev(struct device *dev) +{ +	struct generic_pm_domain *genpd = dev_to_genpd(dev); + +	if (IS_ERR(genpd)) +		return ERR_CAST(genpd); + +	return &genpd->dev; +} +  static int genpd_stop_dev(const struct generic_pm_domain *genpd,  			  struct device *dev)  { @@ -1178,8 +1188,12 @@ static void genpd_sync_power_off(struct generic_pm_domain *genpd, bool use_lock,  	/* Choose the deepest state when suspending */  	genpd->state_idx = genpd->state_count - 1; -	if (_genpd_power_off(genpd, false)) +	if (_genpd_power_off(genpd, false)) { +		genpd->states[genpd->state_idx].rejected++;  		return; +	} else { +		genpd->states[genpd->state_idx].usage++; +	}  	genpd->status = GENPD_STATE_OFF; @@ -1251,10 +1265,7 @@ static int genpd_prepare(struct device *dev)  		return -EINVAL;  	genpd_lock(genpd); - -	if (genpd->prepared_count++ == 0) -		genpd->suspended_count = 0; - +	genpd->prepared_count++;  	genpd_unlock(genpd);  	ret = pm_generic_prepare(dev);  |