From 3985fbb70164d87cf61b64feaa9cdab423e252d9 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E9=BB=84=E6=B6=9B?= Date: Wed, 26 Jan 2011 20:52:44 +0800 Subject: [PATCH] rk29: cpufreq: do not set vcore every time --- arch/arm/mach-rk29/cpufreq.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/arch/arm/mach-rk29/cpufreq.c b/arch/arm/mach-rk29/cpufreq.c index a1a737d92b9d..9c62d1c8d26b 100755 --- a/arch/arm/mach-rk29/cpufreq.c +++ b/arch/arm/mach-rk29/cpufreq.c @@ -46,6 +46,7 @@ static struct cpufreq_frequency_table freq_table[] = { }; static struct clk *arm_clk; static struct regulator *vcore; +static int vcore_uV; static int rk29_cpufreq_verify(struct cpufreq_policy *policy) { @@ -96,13 +97,14 @@ static int rk29_cpufreq_target(struct cpufreq_policy *policy, unsigned int targe pr_debug("%d r %d (%d-%d) selected %d (%duV)\n", target_freq, relation, policy->min, policy->max, freq->frequency, freq->index); #ifdef CONFIG_REGULATOR - if (vcore && freqs.new > freqs.old) { + if (vcore && freqs.new > freqs.old && vcore_uV != freq->index) { err = regulator_set_voltage(vcore, freq->index, freq->index); if (err) { pr_err("fail to set vcore (%duV) for %dkHz: %d\n", freq->index, freqs.new, err); goto err_vol; } + vcore_uV = freq->index; } #endif @@ -112,12 +114,13 @@ static int rk29_cpufreq_target(struct cpufreq_policy *policy, unsigned int targe cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE); #ifdef CONFIG_REGULATOR - if (vcore && freqs.new < freqs.old) { + if (vcore && freqs.new < freqs.old && vcore_uV != freq->index) { err = regulator_set_voltage(vcore, freq->index, freq->index); if (err) { pr_err("fail to set vcore (%duV) for %dkHz: %d\n", freq->index, freqs.new, err); } + vcore_uV = freq->index; } #endif -- 2.34.1