From: 黄涛 Date: Wed, 26 Jan 2011 12:52:44 +0000 (+0800) Subject: rk29: cpufreq: do not set vcore every time X-Git-Tag: firefly_0821_release~10789^2~8 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=3985fbb70164d87cf61b64feaa9cdab423e252d9;p=firefly-linux-kernel-4.4.55.git rk29: cpufreq: do not set vcore every time --- 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