aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/cpufreq/freq_table.c
diff options
context:
space:
mode:
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>2014-08-05 16:49:22 -0400
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2014-08-05 16:49:22 -0400
commitb14c348e8dabcc7604683cfc44fad7396e8b639a (patch)
tree6914b10a7d2d280e9854602aed2bd04331ec3074 /drivers/cpufreq/freq_table.c
parenteada238f48309da47535d7de0ab2217f25ebb9c2 (diff)
parent1bfb425b3b6bf30f5d4b851049b2057dce860bfd (diff)
Merge branch 'pm-cpufreq'
* pm-cpufreq: cpufreq: move policy kobj to update_policy_cpu() cpufreq: propagate error returned by kobject_move() cpufreq: don't restore policy->cpus on failure to move kobj powernow-k6: support 350MHz CPU cpufreq: ondemand: Eliminate the deadband effect cpufreq: Introduce new relation for freq selection cpufreq: imx6: remove pu regulator dependency for SOCs with no PU regulator cpufreq: intel_pstate: Remove core_pct rounding cpufreq: intel_pstate: Simplify P state adjustment logic. cpufreq: intel_pstate: Keep values in aperf/mperf in full precision cpufreq: intel_pstate: Disable interrupts during MSRs reading cpufreq: intel_pstate: Align multiple lines to open parenthesis cpufreq: intel_pstate: Remove unnecessary intermediate variable sample_time cpufreq: intel_pstate: Cleanup parentheses cpufreq: intel_pstate: Fit code in a single line where possible cpufreq: intel_pstate: Add missing blank lines after declarations cpufreq: intel_pstate: Remove unnecessary type casting in div_s64() call cpufreq: intel_pstate: Make intel_pstate_kobject and debugfs_parent locals
Diffstat (limited to 'drivers/cpufreq/freq_table.c')
-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) {