|
@@ -117,7 +117,7 @@ int cpufreq_frequency_table_target(struct cpufreq_policy *policy,
|
|
|
.frequency = 0,
|
|
|
};
|
|
|
struct cpufreq_frequency_table *pos;
|
|
|
- unsigned int freq, i = 0;
|
|
|
+ unsigned int freq, diff, i = 0;
|
|
|
|
|
|
pr_debug("request for target %u kHz (relation: %u) for cpu %u\n",
|
|
|
target_freq, relation, policy->cpu);
|
|
@@ -127,6 +127,7 @@ int cpufreq_frequency_table_target(struct cpufreq_policy *policy,
|
|
|
suboptimal.frequency = ~0;
|
|
|
break;
|
|
|
case CPUFREQ_RELATION_L:
|
|
|
+ case CPUFREQ_RELATION_C:
|
|
|
optimal.frequency = ~0;
|
|
|
break;
|
|
|
}
|
|
@@ -168,6 +169,15 @@ int cpufreq_frequency_table_target(struct cpufreq_policy *policy,
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
+ case CPUFREQ_RELATION_C:
|
|
|
+ diff = abs(freq - target_freq);
|
|
|
+ if (diff < optimal.frequency ||
|
|
|
+ (diff == optimal.frequency &&
|
|
|
+ freq > table[optimal.driver_data].frequency)) {
|
|
|
+ optimal.frequency = diff;
|
|
|
+ optimal.driver_data = i;
|
|
|
+ }
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
if (optimal.driver_data > i) {
|