btrfs: fix static checker warnings
[cascardo/linux.git] / drivers / cpufreq / exynos-cpufreq.c
index 0fac344..f3c2287 100644 (file)
 static struct exynos_dvfs_info *exynos_info;
 
 static struct regulator *arm_regulator;
-static struct cpufreq_freqs freqs;
 
 static unsigned int locking_frequency;
 static bool frequency_locked;
 static DEFINE_MUTEX(cpufreq_lock);
 
-static int exynos_verify_speed(struct cpufreq_policy *policy)
-{
-       return cpufreq_frequency_table_verify(policy,
-                                             exynos_info->freq_table);
-}
-
 static unsigned int exynos_getspeed(unsigned int cpu)
 {
        return clk_get_rate(exynos_info->cpu_clk) / 1000;
@@ -65,21 +58,18 @@ static int exynos_cpufreq_scale(unsigned int target_freq)
        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 old_freq;
        int index, old_index;
        int ret = 0;
 
-       freqs.old = policy->cur;
-       freqs.new = target_freq;
-
-       if (freqs.new == freqs.old)
-               goto out;
+       old_freq = policy->cur;
 
        /*
         * The policy max have been changed so that we cannot get proper
         * old_index with cpufreq_frequency_table_target(). Thus, ignore
-        * policy and get the index from the raw freqeuncy table.
+        * policy and get the index from the raw frequency table.
         */
-       old_index = exynos_cpufreq_get_index(freqs.old);
+       old_index = exynos_cpufreq_get_index(old_freq);
        if (old_index < 0) {
                ret = old_index;
                goto out;
@@ -104,17 +94,14 @@ static int exynos_cpufreq_scale(unsigned int target_freq)
        }
        arm_volt = volt_table[index];
 
-       cpufreq_notify_transition(policy, &freqs, CPUFREQ_PRECHANGE);
-
        /* When the new frequency is higher than current frequency */
-       if ((freqs.new > freqs.old) && !safe_arm_volt) {
+       if ((target_freq > old_freq) && !safe_arm_volt) {
                /* Firstly, voltage up to increase frequency */
                ret = regulator_set_voltage(arm_regulator, arm_volt, arm_volt);
                if (ret) {
                        pr_err("%s: failed to set cpu voltage to %d\n",
                                __func__, arm_volt);
-                       freqs.new = freqs.old;
-                       goto post_notify;
+                       return ret;
                }
        }
 
@@ -124,24 +111,17 @@ static int exynos_cpufreq_scale(unsigned int target_freq)
                if (ret) {
                        pr_err("%s: failed to set cpu voltage to %d\n",
                                __func__, safe_arm_volt);
-                       freqs.new = freqs.old;
-                       goto post_notify;
+                       return ret;
                }
        }
 
        exynos_info->set_freq(old_index, index);
 
-post_notify:
-       cpufreq_notify_transition(policy, &freqs, CPUFREQ_POSTCHANGE);
-
-       if (ret)
-               goto out;
-
        /* When the new frequency is lower than current frequency */
-       if ((freqs.new < freqs.old) ||
-          ((freqs.new > freqs.old) && safe_arm_volt)) {
+       if ((target_freq < old_freq) ||
+          ((target_freq > old_freq) && safe_arm_volt)) {
                /* down the voltage after frequency change */
-               regulator_set_voltage(arm_regulator, arm_volt,
+               ret = regulator_set_voltage(arm_regulator, arm_volt,
                                arm_volt);
                if (ret) {
                        pr_err("%s: failed to set cpu voltage to %d\n",
@@ -151,19 +131,14 @@ post_notify:
        }
 
 out:
-
        cpufreq_cpu_put(policy);
 
        return ret;
 }
 
-static int exynos_target(struct cpufreq_policy *policy,
-                         unsigned int target_freq,
-                         unsigned int relation)
+static int exynos_target(struct cpufreq_policy *policy, unsigned int index)
 {
        struct cpufreq_frequency_table *freq_table = exynos_info->freq_table;
-       unsigned int index;
-       unsigned int new_freq;
        int ret = 0;
 
        mutex_lock(&cpufreq_lock);
@@ -171,15 +146,7 @@ static int exynos_target(struct cpufreq_policy *policy,
        if (frequency_locked)
                goto out;
 
-       if (cpufreq_frequency_table_target(policy, freq_table,
-                                          target_freq, relation, &index)) {
-               ret = -EINVAL;
-               goto out;
-       }
-
-       new_freq = freq_table[index].frequency;
-
-       ret = exynos_cpufreq_scale(new_freq);
+       ret = exynos_cpufreq_scale(freq_table[index].frequency);
 
 out:
        mutex_unlock(&cpufreq_lock);
@@ -247,38 +214,18 @@ static struct notifier_block exynos_cpufreq_nb = {
 
 static int exynos_cpufreq_cpu_init(struct cpufreq_policy *policy)
 {
-       policy->cur = policy->min = policy->max = exynos_getspeed(policy->cpu);
-
-       cpufreq_frequency_table_get_attr(exynos_info->freq_table, policy->cpu);
-
-       /* set the transition latency value */
-       policy->cpuinfo.transition_latency = 100000;
-
-       cpumask_setall(policy->cpus);
-
-       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;
+       return cpufreq_generic_init(policy, exynos_info->freq_table, 100000);
 }
 
-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,
+       .verify         = cpufreq_generic_frequency_table_verify,
+       .target_index   = exynos_target,
        .get            = exynos_getspeed,
        .init           = exynos_cpufreq_cpu_init,
-       .exit           = exynos_cpufreq_cpu_exit,
+       .exit           = cpufreq_generic_exit,
        .name           = "exynos_cpufreq",
-       .attr           = exynos_cpufreq_attr,
+       .attr           = cpufreq_generic_attr,
 #ifdef CONFIG_PM
        .suspend        = exynos_cpufreq_suspend,
        .resume         = exynos_cpufreq_resume,