From 3985fbb70164d87cf61b64feaa9cdab423e252d9 Mon Sep 17 00:00:00 2001
From: =?utf8?q?=E9=BB=84=E6=B6=9B?= <huangtao@rock-chips.com>
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