diff options
Diffstat (limited to 'drivers/cpufreq/blackfin-cpufreq.c')
| -rw-r--r-- | drivers/cpufreq/blackfin-cpufreq.c | 53 | 
1 files changed, 12 insertions, 41 deletions
diff --git a/drivers/cpufreq/blackfin-cpufreq.c b/drivers/cpufreq/blackfin-cpufreq.c index ef05978a723..a9f8e5bd071 100644 --- a/drivers/cpufreq/blackfin-cpufreq.c +++ b/drivers/cpufreq/blackfin-cpufreq.c @@ -127,41 +127,28 @@ unsigned long cpu_set_cclk(int cpu, unsigned long new)  }  #endif -static int bfin_target(struct cpufreq_policy *policy, -			unsigned int target_freq, unsigned int relation) +static int bfin_target(struct cpufreq_policy *policy, unsigned int index)  {  #ifndef CONFIG_BF60x  	unsigned int plldiv;  #endif -	unsigned int index; -	unsigned long cclk_hz; -	struct cpufreq_freqs freqs;  	static unsigned long lpj_ref;  	static unsigned int  lpj_ref_freq; +	unsigned int old_freq, new_freq;  	int ret = 0;  #if defined(CONFIG_CYCLES_CLOCKSOURCE)  	cycles_t cycles;  #endif -	if (cpufreq_frequency_table_target(policy, bfin_freq_table, target_freq, -				relation, &index)) -		return -EINVAL; +	old_freq = bfin_getfreq_khz(0); +	new_freq = bfin_freq_table[index].frequency; -	cclk_hz = bfin_freq_table[index].frequency; - -	freqs.old = bfin_getfreq_khz(0); -	freqs.new = cclk_hz; - -	pr_debug("cpufreq: changing cclk to %lu; target = %u, oldfreq = %u\n", -			cclk_hz, target_freq, freqs.old); - -	cpufreq_notify_transition(policy, &freqs, CPUFREQ_PRECHANGE);  #ifndef CONFIG_BF60x  	plldiv = (bfin_read_PLL_DIV() & SSEL) | dpm_state_table[index].csel;  	bfin_write_PLL_DIV(plldiv);  #else -	ret = cpu_set_cclk(policy->cpu, freqs.new * 1000); +	ret = cpu_set_cclk(policy->cpu, new_freq * 1000);  	if (ret != 0) {  		WARN_ONCE(ret, "cpufreq set freq failed %d\n", ret);  		return ret; @@ -177,25 +164,16 @@ static int bfin_target(struct cpufreq_policy *policy,  #endif  	if (!lpj_ref_freq) {  		lpj_ref = loops_per_jiffy; -		lpj_ref_freq = freqs.old; +		lpj_ref_freq = old_freq;  	} -	if (freqs.new != freqs.old) { +	if (new_freq != old_freq) {  		loops_per_jiffy = cpufreq_scale(lpj_ref, -				lpj_ref_freq, freqs.new); +				lpj_ref_freq, new_freq);  	} -	/* TODO: just test case for cycles clock source, remove later */ -	cpufreq_notify_transition(policy, &freqs, CPUFREQ_POSTCHANGE); - -	pr_debug("cpufreq: done\n");  	return ret;  } -static int bfin_verify_speed(struct cpufreq_policy *policy) -{ -	return cpufreq_frequency_table_verify(policy, bfin_freq_table); -} -  static int __bfin_cpu_init(struct cpufreq_policy *policy)  { @@ -209,23 +187,16 @@ static int __bfin_cpu_init(struct cpufreq_policy *policy)  	policy->cpuinfo.transition_latency = 50000; /* 50us assumed */ -	policy->cur = cclk; -	cpufreq_frequency_table_get_attr(bfin_freq_table, policy->cpu); -	return cpufreq_frequency_table_cpuinfo(policy, bfin_freq_table); +	return cpufreq_table_validate_and_show(policy, bfin_freq_table);  } -static struct freq_attr *bfin_freq_attr[] = { -	&cpufreq_freq_attr_scaling_available_freqs, -	NULL, -}; -  static struct cpufreq_driver bfin_driver = { -	.verify = bfin_verify_speed, -	.target = bfin_target, +	.verify = cpufreq_generic_frequency_table_verify, +	.target_index = bfin_target,  	.get = bfin_getfreq_khz,  	.init = __bfin_cpu_init,  	.name = "bfin cpufreq", -	.attr = bfin_freq_attr, +	.attr = cpufreq_generic_attr,  };  static int __init bfin_cpu_init(void)  | 
