struct cpufreq_policy *policy = cpufreq_cpu_get(0);
unsigned int arm_volt, safe_arm_volt = 0;
unsigned int mpll_freq_khz = exynos_info->mpll_freq_khz;
- unsigned int index, old_index;
+ int index, old_index;
int ret = 0;
freqs.old = policy->cur;
+ freqs.new = target_freq;
freqs.cpu = policy->cpu;
- if (target_freq == freqs.old)
+ if (freqs.new == freqs.old)
goto out;
/*
{
struct cpufreq_frequency_table *freq_table = exynos_info->freq_table;
unsigned int index;
- int ret;
+ unsigned int new_freq;
+ int ret = 0;
mutex_lock(&cpufreq_lock);
goto out;
}
- freqs.new = freq_table[index].frequency;
+ new_freq = freq_table[index].frequency;
- ret = exynos_cpufreq_scale(freqs.new);
+ ret = exynos_cpufreq_scale(new_freq);
out:
mutex_unlock(&cpufreq_lock);
cpufreq_frequency_table_get_attr(exynos_info->freq_table, policy->cpu);
- locking_frequency = exynos_getspeed(0);
-
/* set the transition latency value */
policy->cpuinfo.transition_latency = 100000;
return cpufreq_frequency_table_cpuinfo(policy, exynos_info->freq_table);
}
+static int exynos_cpufreq_cpu_exit(struct cpufreq_policy *policy)
+{
+ cpufreq_frequency_table_put_attr(policy->cpu);
+ return 0;
+}
+
+static struct freq_attr *exynos_cpufreq_attr[] = {
+ &cpufreq_freq_attr_scaling_available_freqs,
+ NULL,
+};
+
static struct cpufreq_driver exynos_driver = {
.flags = CPUFREQ_STICKY,
.verify = exynos_verify_speed,
.target = exynos_target,
.get = exynos_getspeed,
.init = exynos_cpufreq_cpu_init,
+ .exit = exynos_cpufreq_cpu_exit,
.name = "exynos_cpufreq",
+ .attr = exynos_cpufreq_attr,
#ifdef CONFIG_PM
.suspend = exynos_cpufreq_suspend,
.resume = exynos_cpufreq_resume,
goto err_vdd_arm;
}
+ locking_frequency = exynos_getspeed(0);
+
register_pm_notifier(&exynos_cpufreq_nb);
if (cpufreq_register_driver(&exynos_driver)) {