Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'pm-cpufreq-arm' into pm-cpufreq

* pm-cpufreq-arm:
cpufreq: tegra: call CPUFREQ_POSTCHANGE notfier in error cases
cpufreq: s3c64xx: call CPUFREQ_POSTCHANGE notfier in error cases
cpufreq: omap: call CPUFREQ_POSTCHANGE notfier in error cases
cpufreq: imx6q: call CPUFREQ_POSTCHANGE notfier in error cases
cpufreq: exynos: call CPUFREQ_POSTCHANGE notfier in error cases
cpufreq: dbx500: call CPUFREQ_POSTCHANGE notfier in error cases
cpufreq: davinci: call CPUFREQ_POSTCHANGE notfier in error cases
cpufreq: arm-big-little: call CPUFREQ_POSTCHANGE notfier in error cases
cpufreq: s3c2416: fix forgotten driver_data conversions

+38 -22
+1 -3
drivers/cpufreq/arm_big_little.c
··· 84 84 ret = clk_set_rate(clk[cur_cluster], freqs.new * 1000); 85 85 if (ret) { 86 86 pr_err("clk_set_rate failed: %d\n", ret); 87 - return ret; 87 + freqs.new = freqs.old; 88 88 } 89 - 90 - policy->cur = freqs.new; 91 89 92 90 cpufreq_notify_transition(policy, &freqs, CPUFREQ_POSTCHANGE); 93 91
+3
drivers/cpufreq/davinci-cpufreq.c
··· 114 114 pdata->set_voltage(idx); 115 115 116 116 out: 117 + if (ret) 118 + freqs.new = freqs.old; 119 + 117 120 cpufreq_notify_transition(policy, &freqs, CPUFREQ_POSTCHANGE); 118 121 119 122 return ret;
+2 -2
drivers/cpufreq/dbx500-cpufreq.c
··· 57 57 if (ret) { 58 58 pr_err("dbx500-cpufreq: Failed to set armss_clk to %d Hz: error %d\n", 59 59 freqs.new * 1000, ret); 60 - return ret; 60 + freqs.new = freqs.old; 61 61 } 62 62 63 63 /* post change notification */ 64 64 cpufreq_notify_transition(policy, &freqs, CPUFREQ_POSTCHANGE); 65 65 66 - return 0; 66 + return ret; 67 67 } 68 68 69 69 static unsigned int dbx500_cpufreq_getspeed(unsigned int cpu)
+8 -2
drivers/cpufreq/exynos-cpufreq.c
··· 113 113 if (ret) { 114 114 pr_err("%s: failed to set cpu voltage to %d\n", 115 115 __func__, arm_volt); 116 - goto out; 116 + freqs.new = freqs.old; 117 + goto post_notify; 117 118 } 118 119 } 119 120 ··· 124 123 if (ret) { 125 124 pr_err("%s: failed to set cpu voltage to %d\n", 126 125 __func__, safe_arm_volt); 127 - goto out; 126 + freqs.new = freqs.old; 127 + goto post_notify; 128 128 } 129 129 } 130 130 131 131 exynos_info->set_freq(old_index, index); 132 132 133 + post_notify: 133 134 cpufreq_notify_transition(policy, &freqs, CPUFREQ_POSTCHANGE); 135 + 136 + if (ret) 137 + goto out; 134 138 135 139 /* When the new frequency is lower than current frequency */ 136 140 if ((freqs.new < freqs.old) ||
+11 -6
drivers/cpufreq/imx6q-cpufreq.c
··· 68 68 if (freqs.old == freqs.new) 69 69 return 0; 70 70 71 - cpufreq_notify_transition(policy, &freqs, CPUFREQ_PRECHANGE); 72 - 73 71 rcu_read_lock(); 74 72 opp = opp_find_freq_ceil(cpu_dev, &freq_hz); 75 73 if (IS_ERR(opp)) { ··· 84 86 freqs.old / 1000, volt_old / 1000, 85 87 freqs.new / 1000, volt / 1000); 86 88 89 + cpufreq_notify_transition(policy, &freqs, CPUFREQ_PRECHANGE); 90 + 87 91 /* scaling up? scale voltage before frequency */ 88 92 if (freqs.new > freqs.old) { 89 93 ret = regulator_set_voltage_tol(arm_reg, volt, 0); 90 94 if (ret) { 91 95 dev_err(cpu_dev, 92 96 "failed to scale vddarm up: %d\n", ret); 93 - return ret; 97 + freqs.new = freqs.old; 98 + goto post_notify; 94 99 } 95 100 96 101 /* ··· 146 145 if (ret) { 147 146 dev_err(cpu_dev, "failed to set clock rate: %d\n", ret); 148 147 regulator_set_voltage_tol(arm_reg, volt_old, 0); 149 - return ret; 148 + freqs.new = freqs.old; 149 + goto post_notify; 150 150 } 151 151 152 152 /* scaling down? scale voltage after frequency */ 153 153 if (freqs.new < freqs.old) { 154 154 ret = regulator_set_voltage_tol(arm_reg, volt, 0); 155 - if (ret) 155 + if (ret) { 156 156 dev_warn(cpu_dev, 157 157 "failed to scale vddarm down: %d\n", ret); 158 + ret = 0; 159 + } 158 160 159 161 if (freqs.old == FREQ_1P2_GHZ / 1000) { 160 162 regulator_set_voltage_tol(pu_reg, ··· 167 163 } 168 164 } 169 165 166 + post_notify: 170 167 cpufreq_notify_transition(policy, &freqs, CPUFREQ_POSTCHANGE); 171 168 172 - return 0; 169 + return ret; 173 170 } 174 171 175 172 static int imx6q_cpufreq_init(struct cpufreq_policy *policy)
+3 -3
drivers/cpufreq/omap-cpufreq.c
··· 93 93 if (freqs.old == freqs.new && policy->cur == freqs.new) 94 94 return ret; 95 95 96 - /* notifiers */ 97 - cpufreq_notify_transition(policy, &freqs, CPUFREQ_PRECHANGE); 98 - 99 96 freq = freqs.new * 1000; 100 97 ret = clk_round_rate(mpu_clk, freq); 101 98 if (IS_ERR_VALUE(ret)) { ··· 121 124 dev_dbg(mpu_dev, "cpufreq-omap: %u MHz, %ld mV --> %u MHz, %ld mV\n", 122 125 freqs.old / 1000, volt_old ? volt_old / 1000 : -1, 123 126 freqs.new / 1000, volt ? volt / 1000 : -1); 127 + 128 + /* notifiers */ 129 + cpufreq_notify_transition(policy, &freqs, CPUFREQ_PRECHANGE); 124 130 125 131 /* scaling up? scale voltage before frequency */ 126 132 if (mpu_reg && (freqs.new > freqs.old)) {
+2 -2
drivers/cpufreq/s3c2416-cpufreq.c
··· 312 312 if (freq->frequency == CPUFREQ_ENTRY_INVALID) 313 313 continue; 314 314 315 - dvfs = &s3c2416_dvfs_table[freq->index]; 315 + dvfs = &s3c2416_dvfs_table[freq->driver_data]; 316 316 found = 0; 317 317 318 318 /* Check only the min-voltage, more is always ok on S3C2416 */ ··· 462 462 freq = s3c_freq->freq_table; 463 463 while (freq->frequency != CPUFREQ_TABLE_END) { 464 464 /* special handling for dvs mode */ 465 - if (freq->index == 0) { 465 + if (freq->driver_data == 0) { 466 466 if (!s3c_freq->hclk) { 467 467 pr_debug("cpufreq: %dkHz unsupported as it would need unavailable dvs mode\n", 468 468 freq->frequency);
+6 -2
drivers/cpufreq/s3c64xx-cpufreq.c
··· 104 104 if (ret != 0) { 105 105 pr_err("Failed to set VDDARM for %dkHz: %d\n", 106 106 freqs.new, ret); 107 - goto err; 107 + freqs.new = freqs.old; 108 + goto post_notify; 108 109 } 109 110 } 110 111 #endif ··· 114 113 if (ret < 0) { 115 114 pr_err("Failed to set rate %dkHz: %d\n", 116 115 freqs.new, ret); 117 - goto err; 116 + freqs.new = freqs.old; 118 117 } 119 118 119 + post_notify: 120 120 cpufreq_notify_transition(policy, &freqs, CPUFREQ_POSTCHANGE); 121 + if (ret) 122 + goto err; 121 123 122 124 #ifdef CONFIG_REGULATOR 123 125 if (vddarm && freqs.new < freqs.old) {
+2 -2
drivers/cpufreq/tegra-cpufreq.c
··· 137 137 if (ret) { 138 138 pr_err("cpu-tegra: Failed to set cpu frequency to %d kHz\n", 139 139 freqs.new); 140 - return ret; 140 + freqs.new = freqs.old; 141 141 } 142 142 143 143 cpufreq_notify_transition(policy, &freqs, CPUFREQ_POSTCHANGE); 144 144 145 - return 0; 145 + return ret; 146 146 } 147 147 148 148 static unsigned long tegra_cpu_highest_speed(void)