mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-30 15:44:13 +08:00
pmdomain: core: Manage the default required OPP from a separate function
To improve the readability of the code in __genpd_dev_pm_attach(), let's move out the required OPP handling into a separate function. Acked-by: Viresh Kumar <viresh.kumar@linaro.org> Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> Link: https://lore.kernel.org/r/20241002122232.194245-6-ulf.hansson@linaro.org
This commit is contained in:
parent
98d277a791
commit
cf06fb6f0b
@ -2884,12 +2884,34 @@ static void genpd_dev_pm_sync(struct device *dev)
|
|||||||
genpd_queue_power_off_work(pd);
|
genpd_queue_power_off_work(pd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int genpd_set_required_opp(struct device *dev, unsigned int index)
|
||||||
|
{
|
||||||
|
int ret, pstate;
|
||||||
|
|
||||||
|
/* Set the default performance state */
|
||||||
|
pstate = of_get_required_opp_performance_state(dev->of_node, index);
|
||||||
|
if (pstate < 0 && pstate != -ENODEV && pstate != -EOPNOTSUPP) {
|
||||||
|
ret = pstate;
|
||||||
|
goto err;
|
||||||
|
} else if (pstate > 0) {
|
||||||
|
ret = dev_pm_genpd_set_performance_state(dev, pstate);
|
||||||
|
if (ret)
|
||||||
|
goto err;
|
||||||
|
dev_gpd_data(dev)->default_pstate = pstate;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
err:
|
||||||
|
dev_err(dev, "failed to set required performance state for power-domain %s: %d\n",
|
||||||
|
dev_to_genpd(dev)->name, ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static int __genpd_dev_pm_attach(struct device *dev, struct device *base_dev,
|
static int __genpd_dev_pm_attach(struct device *dev, struct device *base_dev,
|
||||||
unsigned int index, bool power_on)
|
unsigned int index, bool power_on)
|
||||||
{
|
{
|
||||||
struct of_phandle_args pd_args;
|
struct of_phandle_args pd_args;
|
||||||
struct generic_pm_domain *pd;
|
struct generic_pm_domain *pd;
|
||||||
int pstate;
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = of_parse_phandle_with_args(dev->of_node, "power-domains",
|
ret = of_parse_phandle_with_args(dev->of_node, "power-domains",
|
||||||
@ -2918,17 +2940,9 @@ static int __genpd_dev_pm_attach(struct device *dev, struct device *base_dev,
|
|||||||
dev->pm_domain->detach = genpd_dev_pm_detach;
|
dev->pm_domain->detach = genpd_dev_pm_detach;
|
||||||
dev->pm_domain->sync = genpd_dev_pm_sync;
|
dev->pm_domain->sync = genpd_dev_pm_sync;
|
||||||
|
|
||||||
/* Set the default performance state */
|
ret = genpd_set_required_opp(dev, index);
|
||||||
pstate = of_get_required_opp_performance_state(dev->of_node, index);
|
if (ret)
|
||||||
if (pstate < 0 && pstate != -ENODEV && pstate != -EOPNOTSUPP) {
|
|
||||||
ret = pstate;
|
|
||||||
goto err;
|
goto err;
|
||||||
} else if (pstate > 0) {
|
|
||||||
ret = dev_pm_genpd_set_performance_state(dev, pstate);
|
|
||||||
if (ret)
|
|
||||||
goto err;
|
|
||||||
dev_gpd_data(dev)->default_pstate = pstate;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (power_on) {
|
if (power_on) {
|
||||||
genpd_lock(pd);
|
genpd_lock(pd);
|
||||||
@ -2950,8 +2964,6 @@ static int __genpd_dev_pm_attach(struct device *dev, struct device *base_dev,
|
|||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
err:
|
err:
|
||||||
dev_err(dev, "failed to set required performance state for power-domain %s: %d\n",
|
|
||||||
pd->name, ret);
|
|
||||||
genpd_remove_device(pd, dev);
|
genpd_remove_device(pd, dev);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user