diff options
author | Stratos Karafotis <stratosk@semaphore.gr> | 2014-06-30 12:59:33 -0400 |
---|---|---|
committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2014-07-21 07:43:19 -0400 |
commit | 5b0c0b16d48d20e26859907df4dd449e3b3c7f4c (patch) | |
tree | 39a03f932232701615350efba56302928362f634 /drivers/cpufreq | |
parent | 22d0628a226c9864fabd621ef2bf64c841219b46 (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>
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 1632981c4b25..df14766a8e06 100644 --- a/drivers/cpufreq/freq_table.c +++ b/drivers/cpufreq/freq_table.c | |||
@@ -117,7 +117,7 @@ int cpufreq_frequency_table_target(struct cpufreq_policy *policy, | |||
117 | .frequency = 0, | 117 | .frequency = 0, |
118 | }; | 118 | }; |
119 | struct cpufreq_frequency_table *pos; | 119 | struct cpufreq_frequency_table *pos; |
120 | unsigned int freq, i = 0; | 120 | unsigned int freq, diff, i = 0; |
121 | 121 | ||
122 | pr_debug("request for target %u kHz (relation: %u) for cpu %u\n", | 122 | pr_debug("request for target %u kHz (relation: %u) for cpu %u\n", |
123 | target_freq, relation, policy->cpu); | 123 | target_freq, relation, policy->cpu); |
@@ -127,6 +127,7 @@ int cpufreq_frequency_table_target(struct cpufreq_policy *policy, | |||
127 | suboptimal.frequency = ~0; | 127 | suboptimal.frequency = ~0; |
128 | break; | 128 | break; |
129 | case CPUFREQ_RELATION_L: | 129 | case CPUFREQ_RELATION_L: |
130 | case CPUFREQ_RELATION_C: | ||
130 | optimal.frequency = ~0; | 131 | optimal.frequency = ~0; |
131 | break; | 132 | break; |
132 | } | 133 | } |
@@ -168,6 +169,15 @@ int cpufreq_frequency_table_target(struct cpufreq_policy *policy, | |||
168 | } | 169 | } |
169 | } | 170 | } |
170 | break; | 171 | break; |
172 | case CPUFREQ_RELATION_C: | ||
173 | diff = abs(freq - target_freq); | ||
174 | if (diff < optimal.frequency || | ||
175 | (diff == optimal.frequency && | ||
176 | freq > table[optimal.driver_data].frequency)) { | ||
177 | optimal.frequency = diff; | ||
178 | optimal.driver_data = i; | ||
179 | } | ||
180 | break; | ||
171 | } | 181 | } |
172 | } | 182 | } |
173 | if (optimal.driver_data > i) { | 183 | if (optimal.driver_data > i) { |