aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/cpufreq
diff options
context:
space:
mode:
authorStratos Karafotis <stratosk@semaphore.gr>2014-06-30 12:59:33 -0400
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2014-07-21 07:43:19 -0400
commit5b0c0b16d48d20e26859907df4dd449e3b3c7f4c (patch)
tree39a03f932232701615350efba56302928362f634 /drivers/cpufreq
parent22d0628a226c9864fabd621ef2bf64c841219b46 (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.c12
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) {