Skip to content

Commit cf06fb6

Browse files
committed
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
1 parent 98d277a commit cf06fb6

File tree

1 file changed

+25
-13
lines changed

1 file changed

+25
-13
lines changed

drivers/pmdomain/core.c

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2884,12 +2884,34 @@ static void genpd_dev_pm_sync(struct device *dev)
28842884
genpd_queue_power_off_work(pd);
28852885
}
28862886

2887+
static int genpd_set_required_opp(struct device *dev, unsigned int index)
2888+
{
2889+
int ret, pstate;
2890+
2891+
/* Set the default performance state */
2892+
pstate = of_get_required_opp_performance_state(dev->of_node, index);
2893+
if (pstate < 0 && pstate != -ENODEV && pstate != -EOPNOTSUPP) {
2894+
ret = pstate;
2895+
goto err;
2896+
} else if (pstate > 0) {
2897+
ret = dev_pm_genpd_set_performance_state(dev, pstate);
2898+
if (ret)
2899+
goto err;
2900+
dev_gpd_data(dev)->default_pstate = pstate;
2901+
}
2902+
2903+
return 0;
2904+
err:
2905+
dev_err(dev, "failed to set required performance state for power-domain %s: %d\n",
2906+
dev_to_genpd(dev)->name, ret);
2907+
return ret;
2908+
}
2909+
28872910
static int __genpd_dev_pm_attach(struct device *dev, struct device *base_dev,
28882911
unsigned int index, bool power_on)
28892912
{
28902913
struct of_phandle_args pd_args;
28912914
struct generic_pm_domain *pd;
2892-
int pstate;
28932915
int ret;
28942916

28952917
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,
29182940
dev->pm_domain->detach = genpd_dev_pm_detach;
29192941
dev->pm_domain->sync = genpd_dev_pm_sync;
29202942

2921-
/* Set the default performance state */
2922-
pstate = of_get_required_opp_performance_state(dev->of_node, index);
2923-
if (pstate < 0 && pstate != -ENODEV && pstate != -EOPNOTSUPP) {
2924-
ret = pstate;
2943+
ret = genpd_set_required_opp(dev, index);
2944+
if (ret)
29252945
goto err;
2926-
} else if (pstate > 0) {
2927-
ret = dev_pm_genpd_set_performance_state(dev, pstate);
2928-
if (ret)
2929-
goto err;
2930-
dev_gpd_data(dev)->default_pstate = pstate;
2931-
}
29322946

29332947
if (power_on) {
29342948
genpd_lock(pd);
@@ -2950,8 +2964,6 @@ static int __genpd_dev_pm_attach(struct device *dev, struct device *base_dev,
29502964
return 1;
29512965

29522966
err:
2953-
dev_err(dev, "failed to set required performance state for power-domain %s: %d\n",
2954-
pd->name, ret);
29552967
genpd_remove_device(pd, dev);
29562968
return ret;
29572969
}

0 commit comments

Comments
 (0)