Merge branches 'pm-opp', 'pm-qos', 'acpi-pm', 'pm-domains' and 'pm-tools'
* pm-opp: PM / OPP: Correct Documentation about library location opp: of: Support multiple suspend OPPs defined in DT dt-bindings: opp: Support multiple opp-suspend properties opp: core: add regulators enable and disable opp: Don't decrement uninitialized list_kref * pm-qos: PM: QoS: Get rid of unused flags * acpi-pm: ACPI: PM: Print debug messages on device power state changes * pm-domains: PM / Domains: Verify PM domain type in dev_pm_genpd_set_performance_state() PM / Domains: Simplify genpd_lookup_dev() PM / Domains: Align in-parameter names for some genpd functions * pm-tools: pm-graph: make setVal unbuffered again for python2 and python3 cpupower: update German translation tools/power/cpupower: fix 64bit detection when cross-compiling cpupower: Add missing newline at end of file pm-graph v5.5
This commit is contained in:
@@ -149,29 +149,24 @@ static inline bool irq_safe_dev_in_no_sleep_domain(struct device *dev,
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int genpd_runtime_suspend(struct device *dev);
|
||||
|
||||
/*
|
||||
* Get the generic PM domain for a particular struct device.
|
||||
* This validates the struct device pointer, the PM domain pointer,
|
||||
* and checks that the PM domain pointer is a real generic PM domain.
|
||||
* Any failure results in NULL being returned.
|
||||
*/
|
||||
static struct generic_pm_domain *genpd_lookup_dev(struct device *dev)
|
||||
static struct generic_pm_domain *dev_to_genpd_safe(struct device *dev)
|
||||
{
|
||||
struct generic_pm_domain *genpd = NULL, *gpd;
|
||||
|
||||
if (IS_ERR_OR_NULL(dev) || IS_ERR_OR_NULL(dev->pm_domain))
|
||||
return NULL;
|
||||
|
||||
mutex_lock(&gpd_list_lock);
|
||||
list_for_each_entry(gpd, &gpd_list, gpd_list_node) {
|
||||
if (&gpd->domain == dev->pm_domain) {
|
||||
genpd = gpd;
|
||||
break;
|
||||
}
|
||||
}
|
||||
mutex_unlock(&gpd_list_lock);
|
||||
/* A genpd's always have its ->runtime_suspend() callback assigned. */
|
||||
if (dev->pm_domain->ops.runtime_suspend == genpd_runtime_suspend)
|
||||
return pd_to_genpd(dev->pm_domain);
|
||||
|
||||
return genpd;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -385,8 +380,8 @@ int dev_pm_genpd_set_performance_state(struct device *dev, unsigned int state)
|
||||
unsigned int prev;
|
||||
int ret;
|
||||
|
||||
genpd = dev_to_genpd(dev);
|
||||
if (IS_ERR(genpd))
|
||||
genpd = dev_to_genpd_safe(dev);
|
||||
if (!genpd)
|
||||
return -ENODEV;
|
||||
|
||||
if (unlikely(!genpd->set_performance_state))
|
||||
@@ -1610,7 +1605,7 @@ static int genpd_remove_device(struct generic_pm_domain *genpd,
|
||||
*/
|
||||
int pm_genpd_remove_device(struct device *dev)
|
||||
{
|
||||
struct generic_pm_domain *genpd = genpd_lookup_dev(dev);
|
||||
struct generic_pm_domain *genpd = dev_to_genpd_safe(dev);
|
||||
|
||||
if (!genpd)
|
||||
return -EINVAL;
|
||||
|
Reference in New Issue
Block a user