diff options
author | Julia Lawall <Julia.Lawall@lip6.fr> | 2013-01-03 04:34:20 -0500 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2013-02-15 17:07:37 -0500 |
commit | 42913c7992e9aca4deded016a05f6654e9b0807b (patch) | |
tree | 1b13a30e8fb606e8040df5756f91ba3288b622a9 /arch/mips/kernel/cpufreq/loongson2_cpufreq.c | |
parent | 0f3a05cb43e731b8cf861dee30e7e4bddd6c5ccc (diff) |
MIPS: Loongson2: Use clk API instead of direct dereferences
A struct clk value is intended to be an abstract pointer, so it should be
manipulated using the various API functions.
clk_put is additionally added on the failure paths.
The semantic match that finds the first problem is as follows:
(http://coccinelle.lip6.fr/)
// <smpl>
@@
expression e,e1;
identifier i;
@@
*e = clk_get(...)
... when != e = e1
when any
*e->i
// </smpl>
Signed-off-by: Julia Lawall <Julia.Lawall@lip6.fr>
Cc: kernel-janitors@vger.kernel.org
Cc: linux-mips@linux-mips.org,
Cc: linux-kernel@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/4751/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch/mips/kernel/cpufreq/loongson2_cpufreq.c')
-rw-r--r-- | arch/mips/kernel/cpufreq/loongson2_cpufreq.c | 15 |
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, | |||
107 | static int loongson2_cpufreq_cpu_init(struct cpufreq_policy *policy) | 107 | static 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 | ||