imx6q: free OPP table created during ->init()
OPP layer now supports freeing of OPPs and we should free them once they aren't useful anymore. Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
parent
c6104fdbb2
commit
cc87b8a8e9
|
@ -31,6 +31,7 @@ static struct clk *step_clk;
|
||||||
static struct clk *pll2_pfd2_396m_clk;
|
static struct clk *pll2_pfd2_396m_clk;
|
||||||
|
|
||||||
static struct device *cpu_dev;
|
static struct device *cpu_dev;
|
||||||
|
static bool free_opp;
|
||||||
static struct cpufreq_frequency_table *freq_table;
|
static struct cpufreq_frequency_table *freq_table;
|
||||||
static unsigned int transition_latency;
|
static unsigned int transition_latency;
|
||||||
|
|
||||||
|
@ -207,11 +208,14 @@ static int imx6q_cpufreq_probe(struct platform_device *pdev)
|
||||||
goto put_reg;
|
goto put_reg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Because we have added the OPPs here, we must free them */
|
||||||
|
free_opp = true;
|
||||||
|
|
||||||
num = dev_pm_opp_get_opp_count(cpu_dev);
|
num = dev_pm_opp_get_opp_count(cpu_dev);
|
||||||
if (num < 0) {
|
if (num < 0) {
|
||||||
ret = num;
|
ret = num;
|
||||||
dev_err(cpu_dev, "no OPP table is found: %d\n", ret);
|
dev_err(cpu_dev, "no OPP table is found: %d\n", ret);
|
||||||
goto put_reg;
|
goto out_free_opp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -306,6 +310,9 @@ soc_opp_out:
|
||||||
|
|
||||||
free_freq_table:
|
free_freq_table:
|
||||||
dev_pm_opp_free_cpufreq_table(cpu_dev, &freq_table);
|
dev_pm_opp_free_cpufreq_table(cpu_dev, &freq_table);
|
||||||
|
out_free_opp:
|
||||||
|
if (free_opp)
|
||||||
|
of_free_opp_table(cpu_dev);
|
||||||
put_reg:
|
put_reg:
|
||||||
if (!IS_ERR(arm_reg))
|
if (!IS_ERR(arm_reg))
|
||||||
regulator_put(arm_reg);
|
regulator_put(arm_reg);
|
||||||
|
@ -332,6 +339,8 @@ static int imx6q_cpufreq_remove(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
cpufreq_unregister_driver(&imx6q_cpufreq_driver);
|
cpufreq_unregister_driver(&imx6q_cpufreq_driver);
|
||||||
dev_pm_opp_free_cpufreq_table(cpu_dev, &freq_table);
|
dev_pm_opp_free_cpufreq_table(cpu_dev, &freq_table);
|
||||||
|
if (free_opp)
|
||||||
|
of_free_opp_table(cpu_dev);
|
||||||
regulator_put(arm_reg);
|
regulator_put(arm_reg);
|
||||||
if (!IS_ERR(pu_reg))
|
if (!IS_ERR(pu_reg))
|
||||||
regulator_put(pu_reg);
|
regulator_put(pu_reg);
|
||||||
|
|
Loading…
Reference in New Issue