Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab...
[firefly-linux-kernel-4.4.55.git] / drivers / cpufreq / s3c64xx-cpufreq.c
index 27cacb524796994f2cc06a5bef1478aa8e4b9e06..13bb4bae64ee11505fb8a072d041ec9a8268bf84 100644 (file)
@@ -87,7 +87,7 @@ static int s3c64xx_cpufreq_set_target(struct cpufreq_policy *policy,
        freqs.old = clk_get_rate(armclk) / 1000;
        freqs.new = s3c64xx_freq_table[i].frequency;
        freqs.flags = 0;
-       dvfs = &s3c64xx_dvfs_table[s3c64xx_freq_table[i].index];
+       dvfs = &s3c64xx_dvfs_table[s3c64xx_freq_table[i].driver_data];
 
        if (freqs.old == freqs.new)
                return 0;
@@ -104,7 +104,8 @@ static int s3c64xx_cpufreq_set_target(struct cpufreq_policy *policy,
                if (ret != 0) {
                        pr_err("Failed to set VDDARM for %dkHz: %d\n",
                               freqs.new, ret);
-                       goto err;
+                       freqs.new = freqs.old;
+                       goto post_notify;
                }
        }
 #endif
@@ -113,10 +114,13 @@ static int s3c64xx_cpufreq_set_target(struct cpufreq_policy *policy,
        if (ret < 0) {
                pr_err("Failed to set rate %dkHz: %d\n",
                       freqs.new, ret);
-               goto err;
+               freqs.new = freqs.old;
        }
 
+post_notify:
        cpufreq_notify_transition(policy, &freqs, CPUFREQ_POSTCHANGE);
+       if (ret)
+               goto err;
 
 #ifdef CONFIG_REGULATOR
        if (vddarm && freqs.new < freqs.old) {