summaryrefslogtreecommitdiffstats
path: root/drivers/cpufreq/exynos-cpufreq.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/cpufreq/exynos-cpufreq.c')
-rw-r--r--drivers/cpufreq/exynos-cpufreq.c36
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;
31static bool frequency_locked; 31static bool frequency_locked;
32static DEFINE_MUTEX(cpufreq_lock); 32static DEFINE_MUTEX(cpufreq_lock);
33 33
34static int exynos_verify_speed(struct cpufreq_policy *policy)
35{
36 return cpufreq_frequency_table_verify(policy,
37 exynos_info->freq_table);
38}
39
40static unsigned int exynos_getspeed(unsigned int cpu) 34static 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
248static int exynos_cpufreq_cpu_init(struct cpufreq_policy *policy) 242static 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
262static int exynos_cpufreq_cpu_exit(struct cpufreq_policy *policy)
263{
264 cpufreq_frequency_table_put_attr(policy->cpu);
265 return 0;
266}
267
268static struct freq_attr *exynos_cpufreq_attr[] = {
269 &cpufreq_freq_attr_scaling_available_freqs,
270 NULL,
271};
272
273static struct cpufreq_driver exynos_driver = { 247static 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,