On 01/28, Viresh Kumar wrote:
@@ -119,6 +120,49 @@ static int set_target(struct cpufreq_policy *policy, unsigned int index) return ret; } +/*
- An earlier version of opp-v1 bindings used to name the regulator
- "cpu0-supply", we still need to handle that for backwards compatibility.
- */
+static const char *find_supply_name(struct device *dev) +{
- struct regulator *cpu_reg;
- char *reg_cpu0 = "cpu0", *reg_cpu = "cpu", *reg;
- int cpu = dev->id, ret;
- /* Try "cpu0" for older DTs */
- if (!cpu)
reg = reg_cpu0;
- else
reg = reg_cpu;
+try_again:
- cpu_reg = regulator_get_optional(dev, reg);
- ret = PTR_ERR_OR_ZERO(cpu_reg);
- if (!ret) {
regulator_put(cpu_reg);
What's the point of creating a regulator just to find the name? It seems like we should just look in the DT node of the CPU for cpu-supply vs cpu0-supply. Then we don't need to involve the regulator framework at all.
return reg;
- }
- /*
* If cpu's regulator supply node is present, but regulator is not yet
* registered, we should try defering probe.
*/
- if (ret == -EPROBE_DEFER) {
dev_dbg(dev, "cpu%d regulator not ready, retry\n", cpu);
return ERR_PTR(ret);
- }
- /* Try with "cpu-supply" */
- if (reg == reg_cpu0) {
reg = reg_cpu;
goto try_again;
- }
- dev_dbg(dev, "no regulator for cpu%d: %d\n", cpu, ret);
- return NULL;
+}
static int allocate_resources(int cpu, struct device **cdev, struct regulator **creg, struct clk **cclk) { @@ -383,6 +450,9 @@ static int cpufreq_exit(struct cpufreq_policy *policy) cpufreq_cooling_unregister(priv->cdev); dev_pm_opp_free_cpufreq_table(priv->cpu_dev, &policy->freq_table); dev_pm_opp_of_cpumask_remove_table(policy->related_cpus);
- if (priv->reg_name)
dev_pm_opp_put_regulator(priv->cpu_dev);
Let's hope this goes away because it's always right next to dev_pm_opp_of_cpumask_remove_table() anyway. Same for reg_name.