diff options
Diffstat (limited to 'drivers/cpufreq/freq_table.c')
| -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,  		.frequency = 0,  	};  	struct cpufreq_frequency_table *pos; -	unsigned int freq, i = 0; +	unsigned int freq, diff, i = 0;  	pr_debug("request for target %u kHz (relation: %u) for cpu %u\n",  					target_freq, relation, policy->cpu); @@ -127,6 +127,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;  	} @@ -168,6 +169,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.driver_data].frequency)) { +				optimal.frequency = diff; +				optimal.driver_data = i; +			} +			break;  		}  	}  	if (optimal.driver_data > i) {  |