diff options
Diffstat (limited to 'drivers/cpufreq/e_powersaver.c')
| -rw-r--r-- | drivers/cpufreq/e_powersaver.c | 60 | 
1 files changed, 9 insertions, 51 deletions
diff --git a/drivers/cpufreq/e_powersaver.c b/drivers/cpufreq/e_powersaver.c index 09f64cc8301..a0d2a423cea 100644 --- a/drivers/cpufreq/e_powersaver.c +++ b/drivers/cpufreq/e_powersaver.c @@ -107,15 +107,9 @@ static int eps_set_state(struct eps_cpu_data *centaur,  			 struct cpufreq_policy *policy,  			 u32 dest_state)  { -	struct cpufreq_freqs freqs;  	u32 lo, hi; -	int err = 0;  	int i; -	freqs.old = eps_get(policy->cpu); -	freqs.new = centaur->fsb * ((dest_state >> 8) & 0xff); -	cpufreq_notify_transition(policy, &freqs, CPUFREQ_PRECHANGE); -  	/* Wait while CPU is busy */  	rdmsr(MSR_IA32_PERF_STATUS, lo, hi);  	i = 0; @@ -124,8 +118,7 @@ static int eps_set_state(struct eps_cpu_data *centaur,  		rdmsr(MSR_IA32_PERF_STATUS, lo, hi);  		i++;  		if (unlikely(i > 64)) { -			err = -ENODEV; -			goto postchange; +			return -ENODEV;  		}  	}  	/* Set new multiplier and voltage */ @@ -137,16 +130,10 @@ static int eps_set_state(struct eps_cpu_data *centaur,  		rdmsr(MSR_IA32_PERF_STATUS, lo, hi);  		i++;  		if (unlikely(i > 64)) { -			err = -ENODEV; -			goto postchange; +			return -ENODEV;  		}  	} while (lo & ((1 << 16) | (1 << 17))); -	/* Return current frequency */ -postchange: -	rdmsr(MSR_IA32_PERF_STATUS, lo, hi); -	freqs.new = centaur->fsb * ((lo >> 8) & 0xff); -  #ifdef DEBUG  	{  	u8 current_multiplier, current_voltage; @@ -161,19 +148,12 @@ postchange:  		current_multiplier);  	}  #endif -	if (err) -		freqs.new = freqs.old; - -	cpufreq_notify_transition(policy, &freqs, CPUFREQ_POSTCHANGE); -	return err; +	return 0;  } -static int eps_target(struct cpufreq_policy *policy, -			       unsigned int target_freq, -			       unsigned int relation) +static int eps_target(struct cpufreq_policy *policy, unsigned int index)  {  	struct eps_cpu_data *centaur; -	unsigned int newstate = 0;  	unsigned int cpu = policy->cpu;  	unsigned int dest_state;  	int ret; @@ -182,28 +162,14 @@ static int eps_target(struct cpufreq_policy *policy,  		return -ENODEV;  	centaur = eps_cpu[cpu]; -	if (unlikely(cpufreq_frequency_table_target(policy, -			&eps_cpu[cpu]->freq_table[0], -			target_freq, -			relation, -			&newstate))) { -		return -EINVAL; -	} -  	/* Make frequency transition */ -	dest_state = centaur->freq_table[newstate].driver_data & 0xffff; +	dest_state = centaur->freq_table[index].driver_data & 0xffff;  	ret = eps_set_state(centaur, policy, dest_state);  	if (ret)  		printk(KERN_ERR "eps: Timeout!\n");  	return ret;  } -static int eps_verify(struct cpufreq_policy *policy) -{ -	return cpufreq_frequency_table_verify(policy, -			&eps_cpu[policy->cpu]->freq_table[0]); -} -  static int eps_cpu_init(struct cpufreq_policy *policy)  {  	unsigned int i; @@ -401,15 +367,13 @@ static int eps_cpu_init(struct cpufreq_policy *policy)  	}  	policy->cpuinfo.transition_latency = 140000; /* 844mV -> 700mV in ns */ -	policy->cur = fsb * current_multiplier; -	ret = cpufreq_frequency_table_cpuinfo(policy, ¢aur->freq_table[0]); +	ret = cpufreq_table_validate_and_show(policy, ¢aur->freq_table[0]);  	if (ret) {  		kfree(centaur);  		return ret;  	} -	cpufreq_frequency_table_get_attr(¢aur->freq_table[0], policy->cpu);  	return 0;  } @@ -418,25 +382,19 @@ static int eps_cpu_exit(struct cpufreq_policy *policy)  	unsigned int cpu = policy->cpu;  	/* Bye */ -	cpufreq_frequency_table_put_attr(policy->cpu);  	kfree(eps_cpu[cpu]);  	eps_cpu[cpu] = NULL;  	return 0;  } -static struct freq_attr *eps_attr[] = { -	&cpufreq_freq_attr_scaling_available_freqs, -	NULL, -}; -  static struct cpufreq_driver eps_driver = { -	.verify		= eps_verify, -	.target		= eps_target, +	.verify		= cpufreq_generic_frequency_table_verify, +	.target_index	= eps_target,  	.init		= eps_cpu_init,  	.exit		= eps_cpu_exit,  	.get		= eps_get,  	.name		= "e_powersaver", -	.attr		= eps_attr, +	.attr		= cpufreq_generic_attr,  };  | 
