diff options
| author | Stratos Karafotis <stratosk@semaphore.gr> | 2014-06-30 19:59:33 +0300 |
|---|---|---|
| committer | Moyster <oysterized@gmail.com> | 2016-08-26 20:20:22 +0200 |
| commit | 6d1a0ace27b41d4f3f50ec42d0300a75ac5f7c68 (patch) | |
| tree | 5c1b524bb086a268d69342e31c758f941b478c4b /drivers/cpufreq | |
| parent | 207f5d933450512d44043ee9436a95f175598137 (diff) | |
cpufreq: Introduce new relation for freq selection
Introduce CPUFREQ_RELATION_C for frequency selection.
It selects the frequency with the minimum euclidean distance to target.
In case of equal distance between 2 frequencies, it will select the
greater frequency.
Signed-off-by: Stratos Karafotis <stratosk@semaphore.gr>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Signed-off-by: Stefan Guendhoer <stefan@guendhoer.com>
Diffstat (limited to 'drivers/cpufreq')
| -rw-r--r-- | drivers/cpufreq/freq_table.c | 12 |
1 files changed, 11 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) { |
