aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/cpufreq/davinci-cpufreq.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/cpufreq/davinci-cpufreq.c')
-rw-r--r--drivers/cpufreq/davinci-cpufreq.c30
1 files changed, 10 insertions, 20 deletions
diff --git a/drivers/cpufreq/davinci-cpufreq.c b/drivers/cpufreq/davinci-cpufreq.c
index 1f5d8a569c77..5e8a854381b7 100644
--- a/drivers/cpufreq/davinci-cpufreq.c
+++ b/drivers/cpufreq/davinci-cpufreq.c
@@ -68,46 +68,36 @@ static unsigned int davinci_getspeed(unsigned int cpu)
68 68
69static int davinci_target(struct cpufreq_policy *policy, unsigned int idx) 69static int davinci_target(struct cpufreq_policy *policy, unsigned int idx)
70{ 70{
71 int ret = 0;
72 struct cpufreq_freqs freqs;
73 struct davinci_cpufreq_config *pdata = cpufreq.dev->platform_data; 71 struct davinci_cpufreq_config *pdata = cpufreq.dev->platform_data;
74 struct clk *armclk = cpufreq.armclk; 72 struct clk *armclk = cpufreq.armclk;
73 unsigned int old_freq, new_freq;
74 int ret = 0;
75 75
76 freqs.old = davinci_getspeed(0); 76 old_freq = davinci_getspeed(0);
77 freqs.new = pdata->freq_table[idx].frequency; 77 new_freq = pdata->freq_table[idx].frequency;
78
79 dev_dbg(cpufreq.dev, "transition: %u --> %u\n", freqs.old, freqs.new);
80
81 cpufreq_notify_transition(policy, &freqs, CPUFREQ_PRECHANGE);
82 78
83 /* if moving to higher frequency, up the voltage beforehand */ 79 /* if moving to higher frequency, up the voltage beforehand */
84 if (pdata->set_voltage && freqs.new > freqs.old) { 80 if (pdata->set_voltage && new_freq > old_freq) {
85 ret = pdata->set_voltage(idx); 81 ret = pdata->set_voltage(idx);
86 if (ret) 82 if (ret)
87 goto out; 83 return ret;
88 } 84 }
89 85
90 ret = clk_set_rate(armclk, idx); 86 ret = clk_set_rate(armclk, idx);
91 if (ret) 87 if (ret)
92 goto out; 88 return ret;
93 89
94 if (cpufreq.asyncclk) { 90 if (cpufreq.asyncclk) {
95 ret = clk_set_rate(cpufreq.asyncclk, cpufreq.asyncrate); 91 ret = clk_set_rate(cpufreq.asyncclk, cpufreq.asyncrate);
96 if (ret) 92 if (ret)
97 goto out; 93 return ret;
98 } 94 }
99 95
100 /* if moving to lower freq, lower the voltage after lowering freq */ 96 /* if moving to lower freq, lower the voltage after lowering freq */
101 if (pdata->set_voltage && freqs.new < freqs.old) 97 if (pdata->set_voltage && new_freq < old_freq)
102 pdata->set_voltage(idx); 98 pdata->set_voltage(idx);
103 99
104out: 100 return 0;
105 if (ret)
106 freqs.new = freqs.old;
107
108 cpufreq_notify_transition(policy, &freqs, CPUFREQ_POSTCHANGE);
109
110 return ret;
111} 101}
112 102
113static int davinci_cpu_init(struct cpufreq_policy *policy) 103static int davinci_cpu_init(struct cpufreq_policy *policy)