@@ -111,14 +111,17 @@ static int omap_target(struct cpufreq_policy *policy,
cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE);
#elif defined(CONFIG_ARCH_OMAP3) && !defined(CONFIG_OMAP_PM_NONE)
if (mpu_opps) {
- int ind;
- for (ind = 1; ind <= MAX_VDD1_OPP; ind++) {
- if (mpu_opps[ind].rate/1000 >= target_freq) {
- omap_pm_cpu_set_freq
- (mpu_opps[ind].rate);
- break;
- }
- }
+ unsigned long freq = target_freq * 1000;
+ struct omap_opp *opp = NULL;
+ int res;
+ /* see if we have exact freq match */
+ res = opp_is_valid(&opp, mpu_opps, freq);
+ /* Get next best if we cant find a exact match */
+ if (res)
+ res = opp_get_higher_opp(&opp, &freq, mpu_opps);
+
+ if (!res)
+ omap_pm_cpu_set_freq(freq);
}
#endif
return ret;