cpufreq: dbx500: Round to closest available freq
authorMats Fagerstrom <mats.fagerstrom@stericsson.com>
Thu, 11 Apr 2013 21:23:57 +0000 (23:23 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Thu, 11 Apr 2013 21:23:57 +0000 (23:23 +0200)
When reading the cpu speed, round it to the closest available
frequency from the table.

Signed-off-by: Mats Fagerstrom <mats.fagerstrom@stericsson.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Acked-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/cpufreq/dbx500-cpufreq.c

index 15ed367139a6fe73e498249e7f4c32d5b0f64e35..6ec6539ae0418895a4b54619e98eeac7d647159c 100644 (file)
@@ -71,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)