Merge branch 'for-linus' of git://git.infradead.org/users/vkoul/slave-dma
[firefly-linux-kernel-4.4.55.git] / drivers / cpufreq / dbx500-cpufreq.c
index 7192a6df94c0ca038124a6cb7beb0b30f16b88eb..6ec6539ae0418895a4b54619e98eeac7d647159c 100644 (file)
@@ -37,12 +37,6 @@ static int dbx500_cpufreq_target(struct cpufreq_policy *policy,
        unsigned int idx;
        int ret;
 
-       /* scale the target frequency to one of the extremes supported */
-       if (target_freq < policy->cpuinfo.min_freq)
-               target_freq = policy->cpuinfo.min_freq;
-       if (target_freq > policy->cpuinfo.max_freq)
-               target_freq = policy->cpuinfo.max_freq;
-
        /* Lookup the next frequency */
        if (cpufreq_frequency_table_target(policy, freq_table, target_freq,
                                        relation, &idx))
@@ -77,15 +71,15 @@ static unsigned int dbx500_cpufreq_getspeed(unsigned int cpu)
        int i = 0;
        unsigned long freq = clk_get_rate(armss_clk) / 1000;
 
-       while (freq_table[i].frequency != CPUFREQ_TABLE_END) {
-               if (freq <= freq_table[i].frequency)
+       /* The value is rounded to closest frequency in the defined table. */
+       while (freq_table[i + 1].frequency != CPUFREQ_TABLE_END) {
+               if (freq < freq_table[i].frequency +
+                  (freq_table[i + 1].frequency - freq_table[i].frequency) / 2)
                        return freq_table[i].frequency;
                i++;
        }
 
-       /* We could not find a corresponding frequency. */
-       pr_err("dbx500-cpufreq: Failed to find cpufreq speed\n");
-       return 0;
+       return freq_table[i].frequency;
 }
 
 static int __cpuinit dbx500_cpufreq_init(struct cpufreq_policy *policy)