diff options
Diffstat (limited to 'drivers/cpufreq/e_powersaver.c')
-rw-r--r-- | drivers/cpufreq/e_powersaver.c | 23 |
1 files changed, 3 insertions, 20 deletions
diff --git a/drivers/cpufreq/e_powersaver.c b/drivers/cpufreq/e_powersaver.c index b39c4ef60a7a..9012b8bb6b64 100644 --- a/drivers/cpufreq/e_powersaver.c +++ b/drivers/cpufreq/e_powersaver.c | |||
@@ -107,15 +107,9 @@ static int eps_set_state(struct eps_cpu_data *centaur, | |||
107 | struct cpufreq_policy *policy, | 107 | struct cpufreq_policy *policy, |
108 | u32 dest_state) | 108 | u32 dest_state) |
109 | { | 109 | { |
110 | struct cpufreq_freqs freqs; | ||
111 | u32 lo, hi; | 110 | u32 lo, hi; |
112 | int err = 0; | ||
113 | int i; | 111 | int i; |
114 | 112 | ||
115 | freqs.old = eps_get(policy->cpu); | ||
116 | freqs.new = centaur->fsb * ((dest_state >> 8) & 0xff); | ||
117 | cpufreq_notify_transition(policy, &freqs, CPUFREQ_PRECHANGE); | ||
118 | |||
119 | /* Wait while CPU is busy */ | 113 | /* Wait while CPU is busy */ |
120 | rdmsr(MSR_IA32_PERF_STATUS, lo, hi); | 114 | rdmsr(MSR_IA32_PERF_STATUS, lo, hi); |
121 | i = 0; | 115 | i = 0; |
@@ -124,8 +118,7 @@ static int eps_set_state(struct eps_cpu_data *centaur, | |||
124 | rdmsr(MSR_IA32_PERF_STATUS, lo, hi); | 118 | rdmsr(MSR_IA32_PERF_STATUS, lo, hi); |
125 | i++; | 119 | i++; |
126 | if (unlikely(i > 64)) { | 120 | if (unlikely(i > 64)) { |
127 | err = -ENODEV; | 121 | return -ENODEV; |
128 | goto postchange; | ||
129 | } | 122 | } |
130 | } | 123 | } |
131 | /* Set new multiplier and voltage */ | 124 | /* Set new multiplier and voltage */ |
@@ -137,16 +130,10 @@ static int eps_set_state(struct eps_cpu_data *centaur, | |||
137 | rdmsr(MSR_IA32_PERF_STATUS, lo, hi); | 130 | rdmsr(MSR_IA32_PERF_STATUS, lo, hi); |
138 | i++; | 131 | i++; |
139 | if (unlikely(i > 64)) { | 132 | if (unlikely(i > 64)) { |
140 | err = -ENODEV; | 133 | return -ENODEV; |
141 | goto postchange; | ||
142 | } | 134 | } |
143 | } while (lo & ((1 << 16) | (1 << 17))); | 135 | } while (lo & ((1 << 16) | (1 << 17))); |
144 | 136 | ||
145 | /* Return current frequency */ | ||
146 | postchange: | ||
147 | rdmsr(MSR_IA32_PERF_STATUS, lo, hi); | ||
148 | freqs.new = centaur->fsb * ((lo >> 8) & 0xff); | ||
149 | |||
150 | #ifdef DEBUG | 137 | #ifdef DEBUG |
151 | { | 138 | { |
152 | u8 current_multiplier, current_voltage; | 139 | u8 current_multiplier, current_voltage; |
@@ -161,11 +148,7 @@ postchange: | |||
161 | current_multiplier); | 148 | current_multiplier); |
162 | } | 149 | } |
163 | #endif | 150 | #endif |
164 | if (err) | 151 | return 0; |
165 | freqs.new = freqs.old; | ||
166 | |||
167 | cpufreq_notify_transition(policy, &freqs, CPUFREQ_POSTCHANGE); | ||
168 | return err; | ||
169 | } | 152 | } |
170 | 153 | ||
171 | static int eps_target(struct cpufreq_policy *policy, unsigned int index) | 154 | static int eps_target(struct cpufreq_policy *policy, unsigned int index) |