diff options
| -rw-r--r-- | drivers/cpufreq/freq_table.c | 12 | ||||
| -rw-r--r-- | include/linux/cpufreq.h | 1 |
2 files changed, 12 insertions, 1 deletions
diff --git a/drivers/cpufreq/freq_table.c b/drivers/cpufreq/freq_table.c index d7a79662e..1bee19bcc 100644 --- a/drivers/cpufreq/freq_table.c +++ b/drivers/cpufreq/freq_table.c @@ -104,7 +104,7 @@ int cpufreq_frequency_table_target(struct cpufreq_policy *policy, .index = ~0, .frequency = 0, }; - unsigned int i; + unsigned int diff, i; pr_debug("request for target %u kHz (relation: %u) for cpu %u\n", target_freq, relation, policy->cpu); @@ -114,6 +114,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; } @@ -151,6 +152,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.index].frequency)) { + optimal.frequency = diff; + optimal.index = i; + } + break; } } if (optimal.index > i) { diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h index 24a7081fa..0ef97797b 100644 --- a/include/linux/cpufreq.h +++ b/include/linux/cpufreq.h @@ -226,6 +226,7 @@ void cpufreq_unregister_governor(struct cpufreq_governor *governor); #define CPUFREQ_RELATION_L 0 /* lowest frequency at or above target */ #define CPUFREQ_RELATION_H 1 /* highest frequency below or at target */ +#define CPUFREQ_RELATION_C 2 /* closest frequency to target */ struct freq_attr; |
