[PATCH 4.4.y-cip 16/23] cpufreq: dt: No need to allocate resources anymore


Chen-Yu Tsai (Moxa) <wens@...>
 

From: Viresh Kumar <viresh.kumar@linaro.org>

commit dd02a3d920083b6cb0ee4f0eaf2c599b740bf5fe upstream.

OPP layer manages it now and cpufreq-dt driver doesn't need it. But, we
still need to check for availability of resources for deferred probing.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Reviewed-by: Stephen Boyd <sboyd@codeaurora.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Chen-Yu Tsai (Moxa) <wens@csie.org>
---
drivers/cpufreq/cpufreq-dt.c | 112 ++++++++++++++---------------------
1 file changed, 45 insertions(+), 67 deletions(-)

diff --git a/drivers/cpufreq/cpufreq-dt.c b/drivers/cpufreq/cpufreq-dt.c
index bbafd7b63d1a2..f951f911786e0 100644
--- a/drivers/cpufreq/cpufreq-dt.c
+++ b/drivers/cpufreq/cpufreq-dt.c
@@ -31,7 +31,6 @@
=20
struct private_data {
struct device *cpu_dev;
- struct regulator *cpu_reg;
struct thermal_cooling_device *cdev;
const char *reg_name;
};
@@ -88,73 +87,59 @@ node_put:
return name;
}
=20
-static int allocate_resources(int cpu, struct device **cdev,
- struct regulator **creg, struct clk **cclk)
+static int resources_available(void)
{
struct device *cpu_dev;
struct regulator *cpu_reg;
struct clk *cpu_clk;
int ret =3D 0;
- char *reg_cpu0 =3D "cpu0", *reg_cpu =3D "cpu", *reg;
+ const char *name;
=20
- cpu_dev =3D get_cpu_device(cpu);
+ cpu_dev =3D get_cpu_device(0);
if (!cpu_dev) {
- pr_err("failed to get cpu%d device\n", cpu);
+ pr_err("failed to get cpu0 device\n");
return -ENODEV;
}
=20
- /* Try "cpu0" for older DTs */
- if (!cpu)
- reg =3D reg_cpu0;
- else
- reg =3D reg_cpu;
-
-try_again:
- cpu_reg =3D regulator_get_optional(cpu_dev, reg);
- ret =3D PTR_ERR_OR_ZERO(cpu_reg);
+ cpu_clk =3D clk_get(cpu_dev, NULL);
+ ret =3D PTR_ERR_OR_ZERO(cpu_clk);
if (ret) {
/*
- * If cpu's regulator supply node is present, but regulator is
- * not yet registered, we should try defering probe.
+ * If cpu's clk node is present, but clock is not yet
+ * registered, we should try defering probe.
*/
- if (ret =3D=3D -EPROBE_DEFER) {
- dev_dbg(cpu_dev, "cpu%d regulator not ready, retry\n",
- cpu);
- return ret;
- }
-
- /* Try with "cpu-supply" */
- if (reg =3D=3D reg_cpu0) {
- reg =3D reg_cpu;
- goto try_again;
- }
+ if (ret =3D=3D -EPROBE_DEFER)
+ dev_dbg(cpu_dev, "clock not ready, retry\n");
+ else
+ dev_err(cpu_dev, "failed to get clock: %d\n", ret);
=20
- dev_dbg(cpu_dev, "no regulator for cpu%d: %d\n", cpu, ret);
+ return ret;
}
=20
- cpu_clk =3D clk_get(cpu_dev, NULL);
- ret =3D PTR_ERR_OR_ZERO(cpu_clk);
- if (ret) {
- /* put regulator */
- if (!IS_ERR(cpu_reg))
- regulator_put(cpu_reg);
+ clk_put(cpu_clk);
+
+ name =3D find_supply_name(cpu_dev);
+ /* Platform doesn't require regulator */
+ if (!name)
+ return 0;
=20
+ cpu_reg =3D regulator_get_optional(cpu_dev, name);
+ ret =3D PTR_ERR_OR_ZERO(cpu_reg);
+ if (ret) {
/*
- * If cpu's clk node is present, but clock is not yet
- * registered, we should try defering probe.
+ * If cpu's regulator supply node is present, but regulator is
+ * not yet registered, we should try defering probe.
*/
if (ret =3D=3D -EPROBE_DEFER)
- dev_dbg(cpu_dev, "cpu%d clock not ready, retry\n", cpu);
+ dev_dbg(cpu_dev, "cpu0 regulator not ready, retry\n");
else
- dev_err(cpu_dev, "failed to get cpu%d clock: %d\n", cpu,
- ret);
- } else {
- *cdev =3D cpu_dev;
- *creg =3D cpu_reg;
- *cclk =3D cpu_clk;
+ dev_dbg(cpu_dev, "no regulator for cpu0: %d\n", ret);
+
+ return ret;
}
=20
- return ret;
+ regulator_put(cpu_reg);
+ return 0;
}
=20
static int cpufreq_init(struct cpufreq_policy *policy)
@@ -162,7 +147,6 @@ static int cpufreq_init(struct cpufreq_policy *policy=
)
struct cpufreq_frequency_table *freq_table;
struct private_data *priv;
struct device *cpu_dev;
- struct regulator *cpu_reg;
struct clk *cpu_clk;
struct dev_pm_opp *suspend_opp;
unsigned int transition_latency;
@@ -170,9 +154,16 @@ static int cpufreq_init(struct cpufreq_policy *polic=
y)
const char *name;
int ret;
=20
- ret =3D allocate_resources(policy->cpu, &cpu_dev, &cpu_reg, &cpu_clk);
- if (ret) {
- pr_err("%s: Failed to allocate resources: %d\n", __func__, ret);
+ cpu_dev =3D get_cpu_device(policy->cpu);
+ if (!cpu_dev) {
+ pr_err("failed to get cpu%d device\n", policy->cpu);
+ return -ENODEV;
+ }
+
+ cpu_clk =3D clk_get(cpu_dev, NULL);
+ if (IS_ERR(cpu_clk)) {
+ ret =3D PTR_ERR(cpu_clk);
+ dev_err(cpu_dev, "%s: failed to get clk: %d\n", __func__, ret);
return ret;
}
=20
@@ -186,7 +177,7 @@ static int cpufreq_init(struct cpufreq_policy *policy=
)
if (ret =3D=3D -ENOENT)
opp_v1 =3D true;
else
- goto out_put_reg_clk;
+ goto out_put_clk;
}
=20
/*
@@ -199,7 +190,7 @@ static int cpufreq_init(struct cpufreq_policy *policy=
)
if (ret) {
dev_err(cpu_dev, "Failed to set regulator for cpu%d: %d\n",
policy->cpu, ret);
- goto out_put_reg_clk;
+ goto out_put_clk;
}
}
=20
@@ -257,9 +248,7 @@ static int cpufreq_init(struct cpufreq_policy *policy=
)
}
=20
priv->cpu_dev =3D cpu_dev;
- priv->cpu_reg =3D cpu_reg;
policy->driver_data =3D priv;
-
policy->clk =3D cpu_clk;
=20
rcu_read_lock();
@@ -300,10 +289,8 @@ out_free_opp:
dev_pm_opp_of_cpumask_remove_table(policy->cpus);
if (name)
dev_pm_opp_put_regulator(cpu_dev);
-out_put_reg_clk:
+out_put_clk:
clk_put(cpu_clk);
- if (!IS_ERR(cpu_reg))
- regulator_put(cpu_reg);
=20
return ret;
}
@@ -319,8 +306,6 @@ static int cpufreq_exit(struct cpufreq_policy *policy=
)
dev_pm_opp_put_regulator(priv->cpu_dev);
=20
clk_put(policy->clk);
- if (!IS_ERR(priv->cpu_reg))
- regulator_put(priv->cpu_reg);
kfree(priv);
=20
return 0;
@@ -373,9 +358,6 @@ static struct cpufreq_driver dt_cpufreq_driver =3D {
=20
static int dt_cpufreq_probe(struct platform_device *pdev)
{
- struct device *cpu_dev;
- struct regulator *cpu_reg;
- struct clk *cpu_clk;
int ret;
=20
/*
@@ -385,19 +367,15 @@ static int dt_cpufreq_probe(struct platform_device =
*pdev)
*
* FIXME: Is checking this only for CPU0 sufficient ?
*/
- ret =3D allocate_resources(0, &cpu_dev, &cpu_reg, &cpu_clk);
+ ret =3D resources_available();
if (ret)
return ret;
=20
- clk_put(cpu_clk);
- if (!IS_ERR(cpu_reg))
- regulator_put(cpu_reg);
-
dt_cpufreq_driver.driver_data =3D dev_get_platdata(&pdev->dev);
=20
ret =3D cpufreq_register_driver(&dt_cpufreq_driver);
if (ret)
- dev_err(cpu_dev, "failed register driver: %d\n", ret);
+ dev_err(&pdev->dev, "failed register driver: %d\n", ret);
=20
return ret;
}
--=20
2.27.0

Join cip-dev@lists.cip-project.org to automatically receive all group messages.