diff options
Diffstat (limited to 'drivers/cpufreq/exynos-cpufreq.c')
-rw-r--r-- | drivers/cpufreq/exynos-cpufreq.c | 36 |
1 files changed, 5 insertions, 31 deletions
diff --git a/drivers/cpufreq/exynos-cpufreq.c b/drivers/cpufreq/exynos-cpufreq.c index 0fac34439e31..3e4af676f43d 100644 --- a/drivers/cpufreq/exynos-cpufreq.c +++ b/drivers/cpufreq/exynos-cpufreq.c | |||
@@ -31,12 +31,6 @@ static unsigned int locking_frequency; | |||
31 | static bool frequency_locked; | 31 | static bool frequency_locked; |
32 | static DEFINE_MUTEX(cpufreq_lock); | 32 | static DEFINE_MUTEX(cpufreq_lock); |
33 | 33 | ||
34 | static int exynos_verify_speed(struct cpufreq_policy *policy) | ||
35 | { | ||
36 | return cpufreq_frequency_table_verify(policy, | ||
37 | exynos_info->freq_table); | ||
38 | } | ||
39 | |||
40 | static unsigned int exynos_getspeed(unsigned int cpu) | 34 | static unsigned int exynos_getspeed(unsigned int cpu) |
41 | { | 35 | { |
42 | return clk_get_rate(exynos_info->cpu_clk) / 1000; | 36 | return clk_get_rate(exynos_info->cpu_clk) / 1000; |
@@ -141,7 +135,7 @@ post_notify: | |||
141 | if ((freqs.new < freqs.old) || | 135 | if ((freqs.new < freqs.old) || |
142 | ((freqs.new > freqs.old) && safe_arm_volt)) { | 136 | ((freqs.new > freqs.old) && safe_arm_volt)) { |
143 | /* down the voltage after frequency change */ | 137 | /* down the voltage after frequency change */ |
144 | regulator_set_voltage(arm_regulator, arm_volt, | 138 | ret = regulator_set_voltage(arm_regulator, arm_volt, |
145 | arm_volt); | 139 | arm_volt); |
146 | if (ret) { | 140 | if (ret) { |
147 | pr_err("%s: failed to set cpu voltage to %d\n", | 141 | pr_err("%s: failed to set cpu voltage to %d\n", |
@@ -247,38 +241,18 @@ static struct notifier_block exynos_cpufreq_nb = { | |||
247 | 241 | ||
248 | static int exynos_cpufreq_cpu_init(struct cpufreq_policy *policy) | 242 | static int exynos_cpufreq_cpu_init(struct cpufreq_policy *policy) |
249 | { | 243 | { |
250 | policy->cur = policy->min = policy->max = exynos_getspeed(policy->cpu); | 244 | return cpufreq_generic_init(policy, exynos_info->freq_table, 100000); |
251 | |||
252 | cpufreq_frequency_table_get_attr(exynos_info->freq_table, policy->cpu); | ||
253 | |||
254 | /* set the transition latency value */ | ||
255 | policy->cpuinfo.transition_latency = 100000; | ||
256 | |||
257 | cpumask_setall(policy->cpus); | ||
258 | |||
259 | return cpufreq_frequency_table_cpuinfo(policy, exynos_info->freq_table); | ||
260 | } | 245 | } |
261 | 246 | ||
262 | static int exynos_cpufreq_cpu_exit(struct cpufreq_policy *policy) | ||
263 | { | ||
264 | cpufreq_frequency_table_put_attr(policy->cpu); | ||
265 | return 0; | ||
266 | } | ||
267 | |||
268 | static struct freq_attr *exynos_cpufreq_attr[] = { | ||
269 | &cpufreq_freq_attr_scaling_available_freqs, | ||
270 | NULL, | ||
271 | }; | ||
272 | |||
273 | static struct cpufreq_driver exynos_driver = { | 247 | static struct cpufreq_driver exynos_driver = { |
274 | .flags = CPUFREQ_STICKY, | 248 | .flags = CPUFREQ_STICKY, |
275 | .verify = exynos_verify_speed, | 249 | .verify = cpufreq_generic_frequency_table_verify, |
276 | .target = exynos_target, | 250 | .target = exynos_target, |
277 | .get = exynos_getspeed, | 251 | .get = exynos_getspeed, |
278 | .init = exynos_cpufreq_cpu_init, | 252 | .init = exynos_cpufreq_cpu_init, |
279 | .exit = exynos_cpufreq_cpu_exit, | 253 | .exit = cpufreq_generic_exit, |
280 | .name = "exynos_cpufreq", | 254 | .name = "exynos_cpufreq", |
281 | .attr = exynos_cpufreq_attr, | 255 | .attr = cpufreq_generic_attr, |
282 | #ifdef CONFIG_PM | 256 | #ifdef CONFIG_PM |
283 | .suspend = exynos_cpufreq_suspend, | 257 | .suspend = exynos_cpufreq_suspend, |
284 | .resume = exynos_cpufreq_resume, | 258 | .resume = exynos_cpufreq_resume, |