pmdomain: core: Manage the default required OPP from a separate function
authorUlf Hansson <ulf.hansson@linaro.org>
Wed, 2 Oct 2024 12:22:26 +0000 (14:22 +0200)
committerUlf Hansson <ulf.hansson@linaro.org>
Thu, 10 Oct 2024 12:14:36 +0000 (14:14 +0200)
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
drivers/pmdomain/core.c

index 5ede0f7..259abd3 100644 (file)
@@ -2884,12 +2884,34 @@ static void genpd_dev_pm_sync(struct device *dev)
        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,
                                 unsigned int index, bool power_on)
 {
        struct of_phandle_args pd_args;
        struct generic_pm_domain *pd;
-       int pstate;
        int ret;
 
        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->sync = genpd_dev_pm_sync;
 
-       /* 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;
+       ret = genpd_set_required_opp(dev, index);
+       if (ret)
                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) {
                genpd_lock(pd);
@@ -2950,8 +2964,6 @@ static int __genpd_dev_pm_attach(struct device *dev, struct device *base_dev,
        return 1;
 
 err:
-       dev_err(dev, "failed to set required performance state for power-domain %s: %d\n",
-               pd->name, ret);
        genpd_remove_device(pd, dev);
        return ret;
 }