diff options
Diffstat (limited to 'drivers/cpufreq/davinci-cpufreq.c')
-rw-r--r-- | drivers/cpufreq/davinci-cpufreq.c | 30 |
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 | ||
69 | static int davinci_target(struct cpufreq_policy *policy, unsigned int idx) | 69 | static 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 | ||
104 | out: | 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 | ||
113 | static int davinci_cpu_init(struct cpufreq_policy *policy) | 103 | static int davinci_cpu_init(struct cpufreq_policy *policy) |