aboutsummaryrefslogtreecommitdiffstats
path: root/arch/mips/kernel/cpufreq/loongson2_cpufreq.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/mips/kernel/cpufreq/loongson2_cpufreq.c')
-rw-r--r--arch/mips/kernel/cpufreq/loongson2_cpufreq.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/arch/mips/kernel/cpufreq/loongson2_cpufreq.c b/arch/mips/kernel/cpufreq/loongson2_cpufreq.c
index bb51d3193ad4..3237c5235f9c 100644
--- a/arch/mips/kernel/cpufreq/loongson2_cpufreq.c
+++ b/arch/mips/kernel/cpufreq/loongson2_cpufreq.c
@@ -107,6 +107,8 @@ static int loongson2_cpufreq_target(struct cpufreq_policy *policy,
107static int loongson2_cpufreq_cpu_init(struct cpufreq_policy *policy) 107static int loongson2_cpufreq_cpu_init(struct cpufreq_policy *policy)
108{ 108{
109 int i; 109 int i;
110 unsigned long rate;
111 int ret;
110 112
111 if (!cpu_online(policy->cpu)) 113 if (!cpu_online(policy->cpu))
112 return -ENODEV; 114 return -ENODEV;
@@ -117,15 +119,22 @@ static int loongson2_cpufreq_cpu_init(struct cpufreq_policy *policy)
117 return PTR_ERR(cpuclk); 119 return PTR_ERR(cpuclk);
118 } 120 }
119 121
120 cpuclk->rate = cpu_clock_freq / 1000; 122 rate = cpu_clock_freq / 1000;
121 if (!cpuclk->rate) 123 if (!rate) {
124 clk_put(cpuclk);
122 return -EINVAL; 125 return -EINVAL;
126 }
127 ret = clk_set_rate(cpuclk, rate);
128 if (ret) {
129 clk_put(cpuclk);
130 return ret;
131 }
123 132
124 /* clock table init */ 133 /* clock table init */
125 for (i = 2; 134 for (i = 2;
126 (loongson2_clockmod_table[i].frequency != CPUFREQ_TABLE_END); 135 (loongson2_clockmod_table[i].frequency != CPUFREQ_TABLE_END);
127 i++) 136 i++)
128 loongson2_clockmod_table[i].frequency = (cpuclk->rate * i) / 8; 137 loongson2_clockmod_table[i].frequency = (rate * i) / 8;
129 138
130 policy->cur = loongson2_cpufreq_get(policy->cpu); 139 policy->cur = loongson2_cpufreq_get(policy->cpu);
131 140