online_policy_cpus = policy->cpus;
 #endif
 
-       cmd.val = get_cur_val(online_policy_cpus);
-       freqs.old = extract_freq(cmd.val, data);
-       freqs.new = data->freq_table[next_state].frequency;
        next_perf_state = data->freq_table[next_state].index;
-       if (freqs.new == freqs.old) {
+       if (perf->state == next_perf_state) {
                if (unlikely(data->resume)) {
                        dprintk("Called after resume, resetting to P%d\n",
                                next_perf_state);
        else
                cpu_set(policy->cpu, cmd.mask);
 
+       freqs.old = data->freq_table[perf->state].frequency;
+       freqs.new = data->freq_table[next_perf_state].frequency;
        for_each_cpu_mask(i, cmd.mask) {
                freqs.cpu = i;
                cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE);
                policy->cur = acpi_cpufreq_guess_freq(data, policy->cpu);
                break;
        case ACPI_ADR_SPACE_FIXED_HARDWARE:
+               acpi_cpufreq_driver.get = get_cur_freq_on_cpu;
                get_cur_freq_on_cpu(cpu);
                break;
        default:
 static struct cpufreq_driver acpi_cpufreq_driver = {
        .verify = acpi_cpufreq_verify,
        .target = acpi_cpufreq_target,
-       .get = get_cur_freq_on_cpu,
        .init = acpi_cpufreq_cpu_init,
        .exit = acpi_cpufreq_cpu_exit,
        .resume = acpi_cpufreq_resume,