|
@@ -214,24 +214,6 @@ static int tegra_cpu_init(struct cpufreq_policy *policy)
|
|
|
if (policy->cpu >= NUM_CPUS)
|
|
|
return -EINVAL;
|
|
|
|
|
|
- cpu_clk = clk_get_sys(NULL, "cpu");
|
|
|
- if (IS_ERR(cpu_clk))
|
|
|
- return PTR_ERR(cpu_clk);
|
|
|
-
|
|
|
- pll_x_clk = clk_get_sys(NULL, "pll_x");
|
|
|
- if (IS_ERR(pll_x_clk))
|
|
|
- return PTR_ERR(pll_x_clk);
|
|
|
-
|
|
|
- pll_p_clk = clk_get_sys(NULL, "pll_p");
|
|
|
- if (IS_ERR(pll_p_clk))
|
|
|
- return PTR_ERR(pll_p_clk);
|
|
|
-
|
|
|
- emc_clk = clk_get_sys("cpu", "emc");
|
|
|
- if (IS_ERR(emc_clk)) {
|
|
|
- clk_put(cpu_clk);
|
|
|
- return PTR_ERR(emc_clk);
|
|
|
- }
|
|
|
-
|
|
|
clk_prepare_enable(emc_clk);
|
|
|
clk_prepare_enable(cpu_clk);
|
|
|
|
|
@@ -256,8 +238,6 @@ static int tegra_cpu_exit(struct cpufreq_policy *policy)
|
|
|
{
|
|
|
cpufreq_frequency_table_cpuinfo(policy, freq_table);
|
|
|
clk_disable_unprepare(emc_clk);
|
|
|
- clk_put(emc_clk);
|
|
|
- clk_put(cpu_clk);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -278,12 +258,32 @@ static struct cpufreq_driver tegra_cpufreq_driver = {
|
|
|
|
|
|
static int __init tegra_cpufreq_init(void)
|
|
|
{
|
|
|
+ cpu_clk = clk_get_sys(NULL, "cpu");
|
|
|
+ if (IS_ERR(cpu_clk))
|
|
|
+ return PTR_ERR(cpu_clk);
|
|
|
+
|
|
|
+ pll_x_clk = clk_get_sys(NULL, "pll_x");
|
|
|
+ if (IS_ERR(pll_x_clk))
|
|
|
+ return PTR_ERR(pll_x_clk);
|
|
|
+
|
|
|
+ pll_p_clk = clk_get_sys(NULL, "pll_p");
|
|
|
+ if (IS_ERR(pll_p_clk))
|
|
|
+ return PTR_ERR(pll_p_clk);
|
|
|
+
|
|
|
+ emc_clk = clk_get_sys("cpu", "emc");
|
|
|
+ if (IS_ERR(emc_clk)) {
|
|
|
+ clk_put(cpu_clk);
|
|
|
+ return PTR_ERR(emc_clk);
|
|
|
+ }
|
|
|
+
|
|
|
return cpufreq_register_driver(&tegra_cpufreq_driver);
|
|
|
}
|
|
|
|
|
|
static void __exit tegra_cpufreq_exit(void)
|
|
|
{
|
|
|
cpufreq_unregister_driver(&tegra_cpufreq_driver);
|
|
|
+ clk_put(emc_clk);
|
|
|
+ clk_put(cpu_clk);
|
|
|
}
|
|
|
|
|
|
|