aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/cpufreq/exynos-cpufreq.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/cpufreq/exynos-cpufreq.c')
-rw-r--r--drivers/cpufreq/exynos-cpufreq.c32
1 files changed, 17 insertions, 15 deletions
diff --git a/drivers/cpufreq/exynos-cpufreq.c b/drivers/cpufreq/exynos-cpufreq.c
index 348c8bafe436..1e0ec57bf6e3 100644
--- a/drivers/cpufreq/exynos-cpufreq.c
+++ b/drivers/cpufreq/exynos-cpufreq.c
@@ -28,17 +28,16 @@ static unsigned int locking_frequency;
28static int exynos_cpufreq_get_index(unsigned int freq) 28static int exynos_cpufreq_get_index(unsigned int freq)
29{ 29{
30 struct cpufreq_frequency_table *freq_table = exynos_info->freq_table; 30 struct cpufreq_frequency_table *freq_table = exynos_info->freq_table;
31 int index; 31 struct cpufreq_frequency_table *pos;
32 32
33 for (index = 0; 33 cpufreq_for_each_entry(pos, freq_table)
34 freq_table[index].frequency != CPUFREQ_TABLE_END; index++) 34 if (pos->frequency == freq)
35 if (freq_table[index].frequency == freq)
36 break; 35 break;
37 36
38 if (freq_table[index].frequency == CPUFREQ_TABLE_END) 37 if (pos->frequency == CPUFREQ_TABLE_END)
39 return -EINVAL; 38 return -EINVAL;
40 39
41 return index; 40 return pos - freq_table;
42} 41}
43 42
44static int exynos_cpufreq_scale(unsigned int target_freq) 43static int exynos_cpufreq_scale(unsigned int target_freq)
@@ -48,6 +47,7 @@ static int exynos_cpufreq_scale(unsigned int target_freq)
48 struct cpufreq_policy *policy = cpufreq_cpu_get(0); 47 struct cpufreq_policy *policy = cpufreq_cpu_get(0);
49 unsigned int arm_volt, safe_arm_volt = 0; 48 unsigned int arm_volt, safe_arm_volt = 0;
50 unsigned int mpll_freq_khz = exynos_info->mpll_freq_khz; 49 unsigned int mpll_freq_khz = exynos_info->mpll_freq_khz;
50 struct device *dev = exynos_info->dev;
51 unsigned int old_freq; 51 unsigned int old_freq;
52 int index, old_index; 52 int index, old_index;
53 int ret = 0; 53 int ret = 0;
@@ -89,8 +89,8 @@ static int exynos_cpufreq_scale(unsigned int target_freq)
89 /* Firstly, voltage up to increase frequency */ 89 /* Firstly, voltage up to increase frequency */
90 ret = regulator_set_voltage(arm_regulator, arm_volt, arm_volt); 90 ret = regulator_set_voltage(arm_regulator, arm_volt, arm_volt);
91 if (ret) { 91 if (ret) {
92 pr_err("%s: failed to set cpu voltage to %d\n", 92 dev_err(dev, "failed to set cpu voltage to %d\n",
93 __func__, arm_volt); 93 arm_volt);
94 return ret; 94 return ret;
95 } 95 }
96 } 96 }
@@ -99,8 +99,8 @@ static int exynos_cpufreq_scale(unsigned int target_freq)
99 ret = regulator_set_voltage(arm_regulator, safe_arm_volt, 99 ret = regulator_set_voltage(arm_regulator, safe_arm_volt,
100 safe_arm_volt); 100 safe_arm_volt);
101 if (ret) { 101 if (ret) {
102 pr_err("%s: failed to set cpu voltage to %d\n", 102 dev_err(dev, "failed to set cpu voltage to %d\n",
103 __func__, safe_arm_volt); 103 safe_arm_volt);
104 return ret; 104 return ret;
105 } 105 }
106 } 106 }
@@ -114,8 +114,8 @@ static int exynos_cpufreq_scale(unsigned int target_freq)
114 ret = regulator_set_voltage(arm_regulator, arm_volt, 114 ret = regulator_set_voltage(arm_regulator, arm_volt,
115 arm_volt); 115 arm_volt);
116 if (ret) { 116 if (ret) {
117 pr_err("%s: failed to set cpu voltage to %d\n", 117 dev_err(dev, "failed to set cpu voltage to %d\n",
118 __func__, arm_volt); 118 arm_volt);
119 goto out; 119 goto out;
120 } 120 }
121 } 121 }
@@ -162,6 +162,8 @@ static int exynos_cpufreq_probe(struct platform_device *pdev)
162 if (!exynos_info) 162 if (!exynos_info)
163 return -ENOMEM; 163 return -ENOMEM;
164 164
165 exynos_info->dev = &pdev->dev;
166
165 if (of_machine_is_compatible("samsung,exynos4210")) { 167 if (of_machine_is_compatible("samsung,exynos4210")) {
166 exynos_info->type = EXYNOS_SOC_4210; 168 exynos_info->type = EXYNOS_SOC_4210;
167 ret = exynos4210_cpufreq_init(exynos_info); 169 ret = exynos4210_cpufreq_init(exynos_info);
@@ -183,13 +185,13 @@ static int exynos_cpufreq_probe(struct platform_device *pdev)
183 goto err_vdd_arm; 185 goto err_vdd_arm;
184 186
185 if (exynos_info->set_freq == NULL) { 187 if (exynos_info->set_freq == NULL) {
186 pr_err("%s: No set_freq function (ERR)\n", __func__); 188 dev_err(&pdev->dev, "No set_freq function (ERR)\n");
187 goto err_vdd_arm; 189 goto err_vdd_arm;
188 } 190 }
189 191
190 arm_regulator = regulator_get(NULL, "vdd_arm"); 192 arm_regulator = regulator_get(NULL, "vdd_arm");
191 if (IS_ERR(arm_regulator)) { 193 if (IS_ERR(arm_regulator)) {
192 pr_err("%s: failed to get resource vdd_arm\n", __func__); 194 dev_err(&pdev->dev, "failed to get resource vdd_arm\n");
193 goto err_vdd_arm; 195 goto err_vdd_arm;
194 } 196 }
195 197
@@ -199,7 +201,7 @@ static int exynos_cpufreq_probe(struct platform_device *pdev)
199 if (!cpufreq_register_driver(&exynos_driver)) 201 if (!cpufreq_register_driver(&exynos_driver))
200 return 0; 202 return 0;
201 203
202 pr_err("%s: failed to register cpufreq driver\n", __func__); 204 dev_err(&pdev->dev, "failed to register cpufreq driver\n");
203 regulator_put(arm_regulator); 205 regulator_put(arm_regulator);
204err_vdd_arm: 206err_vdd_arm:
205 kfree(exynos_info); 207 kfree(exynos_info);