aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/cpufreq/armada-37xx-cpufreq.c22
-rw-r--r--drivers/cpufreq/armada-8k-cpufreq.c1
-rw-r--r--drivers/cpufreq/imx6q-cpufreq.c4
-rw-r--r--drivers/cpufreq/kirkwood-cpufreq.c19
-rw-r--r--drivers/cpufreq/maple-cpufreq.c6
-rw-r--r--drivers/cpufreq/pasemi-cpufreq.c1
-rw-r--r--drivers/cpufreq/pmac32-cpufreq.c2
-rw-r--r--drivers/cpufreq/ppc_cbe_cpufreq.c1
8 files changed, 38 insertions, 18 deletions
diff --git a/drivers/cpufreq/armada-37xx-cpufreq.c b/drivers/cpufreq/armada-37xx-cpufreq.c
index 75491fc841a6..0df16eb1eb3c 100644
--- a/drivers/cpufreq/armada-37xx-cpufreq.c
+++ b/drivers/cpufreq/armada-37xx-cpufreq.c
@@ -359,11 +359,11 @@ static int __init armada37xx_cpufreq_driver_init(void)
359 struct armada_37xx_dvfs *dvfs; 359 struct armada_37xx_dvfs *dvfs;
360 struct platform_device *pdev; 360 struct platform_device *pdev;
361 unsigned long freq; 361 unsigned long freq;
362 unsigned int cur_frequency; 362 unsigned int cur_frequency, base_frequency;
363 struct regmap *nb_pm_base, *avs_base; 363 struct regmap *nb_pm_base, *avs_base;
364 struct device *cpu_dev; 364 struct device *cpu_dev;
365 int load_lvl, ret; 365 int load_lvl, ret;
366 struct clk *clk; 366 struct clk *clk, *parent;
367 367
368 nb_pm_base = 368 nb_pm_base =
369 syscon_regmap_lookup_by_compatible("marvell,armada-3700-nb-pm"); 369 syscon_regmap_lookup_by_compatible("marvell,armada-3700-nb-pm");
@@ -399,6 +399,22 @@ static int __init armada37xx_cpufreq_driver_init(void)
399 return PTR_ERR(clk); 399 return PTR_ERR(clk);
400 } 400 }
401 401
402 parent = clk_get_parent(clk);
403 if (IS_ERR(parent)) {
404 dev_err(cpu_dev, "Cannot get parent clock for CPU0\n");
405 clk_put(clk);
406 return PTR_ERR(parent);
407 }
408
409 /* Get parent CPU frequency */
410 base_frequency = clk_get_rate(parent);
411
412 if (!base_frequency) {
413 dev_err(cpu_dev, "Failed to get parent clock rate for CPU\n");
414 clk_put(clk);
415 return -EINVAL;
416 }
417
402 /* Get nominal (current) CPU frequency */ 418 /* Get nominal (current) CPU frequency */
403 cur_frequency = clk_get_rate(clk); 419 cur_frequency = clk_get_rate(clk);
404 if (!cur_frequency) { 420 if (!cur_frequency) {
@@ -431,7 +447,7 @@ static int __init armada37xx_cpufreq_driver_init(void)
431 for (load_lvl = ARMADA_37XX_DVFS_LOAD_0; load_lvl < LOAD_LEVEL_NR; 447 for (load_lvl = ARMADA_37XX_DVFS_LOAD_0; load_lvl < LOAD_LEVEL_NR;
432 load_lvl++) { 448 load_lvl++) {
433 unsigned long u_volt = avs_map[dvfs->avs[load_lvl]] * 1000; 449 unsigned long u_volt = avs_map[dvfs->avs[load_lvl]] * 1000;
434 freq = cur_frequency / dvfs->divider[load_lvl]; 450 freq = base_frequency / dvfs->divider[load_lvl];
435 ret = dev_pm_opp_add(cpu_dev, freq, u_volt); 451 ret = dev_pm_opp_add(cpu_dev, freq, u_volt);
436 if (ret) 452 if (ret)
437 goto remove_opp; 453 goto remove_opp;
diff --git a/drivers/cpufreq/armada-8k-cpufreq.c b/drivers/cpufreq/armada-8k-cpufreq.c
index b3f4bd647e9b..988ebc326bdb 100644
--- a/drivers/cpufreq/armada-8k-cpufreq.c
+++ b/drivers/cpufreq/armada-8k-cpufreq.c
@@ -132,6 +132,7 @@ static int __init armada_8k_cpufreq_init(void)
132 of_node_put(node); 132 of_node_put(node);
133 return -ENODEV; 133 return -ENODEV;
134 } 134 }
135 of_node_put(node);
135 136
136 nb_cpus = num_possible_cpus(); 137 nb_cpus = num_possible_cpus();
137 freq_tables = kcalloc(nb_cpus, sizeof(*freq_tables), GFP_KERNEL); 138 freq_tables = kcalloc(nb_cpus, sizeof(*freq_tables), GFP_KERNEL);
diff --git a/drivers/cpufreq/imx6q-cpufreq.c b/drivers/cpufreq/imx6q-cpufreq.c
index a4ff09f91c8f..3e17560b1efe 100644
--- a/drivers/cpufreq/imx6q-cpufreq.c
+++ b/drivers/cpufreq/imx6q-cpufreq.c
@@ -388,11 +388,11 @@ static int imx6q_cpufreq_probe(struct platform_device *pdev)
388 ret = imx6ul_opp_check_speed_grading(cpu_dev); 388 ret = imx6ul_opp_check_speed_grading(cpu_dev);
389 if (ret) { 389 if (ret) {
390 if (ret == -EPROBE_DEFER) 390 if (ret == -EPROBE_DEFER)
391 return ret; 391 goto put_node;
392 392
393 dev_err(cpu_dev, "failed to read ocotp: %d\n", 393 dev_err(cpu_dev, "failed to read ocotp: %d\n",
394 ret); 394 ret);
395 return ret; 395 goto put_node;
396 } 396 }
397 } else { 397 } else {
398 imx6q_opp_check_speed_grading(cpu_dev); 398 imx6q_opp_check_speed_grading(cpu_dev);
diff --git a/drivers/cpufreq/kirkwood-cpufreq.c b/drivers/cpufreq/kirkwood-cpufreq.c
index c2dd43f3f5d8..8d63a6dc8383 100644
--- a/drivers/cpufreq/kirkwood-cpufreq.c
+++ b/drivers/cpufreq/kirkwood-cpufreq.c
@@ -124,13 +124,14 @@ static int kirkwood_cpufreq_probe(struct platform_device *pdev)
124 priv.cpu_clk = of_clk_get_by_name(np, "cpu_clk"); 124 priv.cpu_clk = of_clk_get_by_name(np, "cpu_clk");
125 if (IS_ERR(priv.cpu_clk)) { 125 if (IS_ERR(priv.cpu_clk)) {
126 dev_err(priv.dev, "Unable to get cpuclk\n"); 126 dev_err(priv.dev, "Unable to get cpuclk\n");
127 return PTR_ERR(priv.cpu_clk); 127 err = PTR_ERR(priv.cpu_clk);
128 goto out_node;
128 } 129 }
129 130
130 err = clk_prepare_enable(priv.cpu_clk); 131 err = clk_prepare_enable(priv.cpu_clk);
131 if (err) { 132 if (err) {
132 dev_err(priv.dev, "Unable to prepare cpuclk\n"); 133 dev_err(priv.dev, "Unable to prepare cpuclk\n");
133 return err; 134 goto out_node;
134 } 135 }
135 136
136 kirkwood_freq_table[0].frequency = clk_get_rate(priv.cpu_clk) / 1000; 137 kirkwood_freq_table[0].frequency = clk_get_rate(priv.cpu_clk) / 1000;
@@ -161,20 +162,22 @@ static int kirkwood_cpufreq_probe(struct platform_device *pdev)
161 goto out_ddr; 162 goto out_ddr;
162 } 163 }
163 164
164 of_node_put(np);
165 np = NULL;
166
167 err = cpufreq_register_driver(&kirkwood_cpufreq_driver); 165 err = cpufreq_register_driver(&kirkwood_cpufreq_driver);
168 if (!err) 166 if (err) {
169 return 0; 167 dev_err(priv.dev, "Failed to register cpufreq driver\n");
168 goto out_powersave;
169 }
170 170
171 dev_err(priv.dev, "Failed to register cpufreq driver\n"); 171 of_node_put(np);
172 return 0;
172 173
174out_powersave:
173 clk_disable_unprepare(priv.powersave_clk); 175 clk_disable_unprepare(priv.powersave_clk);
174out_ddr: 176out_ddr:
175 clk_disable_unprepare(priv.ddr_clk); 177 clk_disable_unprepare(priv.ddr_clk);
176out_cpu: 178out_cpu:
177 clk_disable_unprepare(priv.cpu_clk); 179 clk_disable_unprepare(priv.cpu_clk);
180out_node:
178 of_node_put(np); 181 of_node_put(np);
179 182
180 return err; 183 return err;
diff --git a/drivers/cpufreq/maple-cpufreq.c b/drivers/cpufreq/maple-cpufreq.c
index d9df89392b84..a94355723ef8 100644
--- a/drivers/cpufreq/maple-cpufreq.c
+++ b/drivers/cpufreq/maple-cpufreq.c
@@ -210,7 +210,7 @@ static int __init maple_cpufreq_init(void)
210 */ 210 */
211 valp = of_get_property(cpunode, "clock-frequency", NULL); 211 valp = of_get_property(cpunode, "clock-frequency", NULL);
212 if (!valp) 212 if (!valp)
213 return -ENODEV; 213 goto bail_noprops;
214 max_freq = (*valp)/1000; 214 max_freq = (*valp)/1000;
215 maple_cpu_freqs[0].frequency = max_freq; 215 maple_cpu_freqs[0].frequency = max_freq;
216 maple_cpu_freqs[1].frequency = max_freq/2; 216 maple_cpu_freqs[1].frequency = max_freq/2;
@@ -231,10 +231,6 @@ static int __init maple_cpufreq_init(void)
231 231
232 rc = cpufreq_register_driver(&maple_cpufreq_driver); 232 rc = cpufreq_register_driver(&maple_cpufreq_driver);
233 233
234 of_node_put(cpunode);
235
236 return rc;
237
238bail_noprops: 234bail_noprops:
239 of_node_put(cpunode); 235 of_node_put(cpunode);
240 236
diff --git a/drivers/cpufreq/pasemi-cpufreq.c b/drivers/cpufreq/pasemi-cpufreq.c
index 75dfbd2a58ea..c7710c149de8 100644
--- a/drivers/cpufreq/pasemi-cpufreq.c
+++ b/drivers/cpufreq/pasemi-cpufreq.c
@@ -146,6 +146,7 @@ static int pas_cpufreq_cpu_init(struct cpufreq_policy *policy)
146 146
147 cpu = of_get_cpu_node(policy->cpu, NULL); 147 cpu = of_get_cpu_node(policy->cpu, NULL);
148 148
149 of_node_put(cpu);
149 if (!cpu) 150 if (!cpu)
150 goto out; 151 goto out;
151 152
diff --git a/drivers/cpufreq/pmac32-cpufreq.c b/drivers/cpufreq/pmac32-cpufreq.c
index 52f0d91d30c1..9b4ce2eb8222 100644
--- a/drivers/cpufreq/pmac32-cpufreq.c
+++ b/drivers/cpufreq/pmac32-cpufreq.c
@@ -552,6 +552,7 @@ static int pmac_cpufreq_init_7447A(struct device_node *cpunode)
552 volt_gpio_np = of_find_node_by_name(NULL, "cpu-vcore-select"); 552 volt_gpio_np = of_find_node_by_name(NULL, "cpu-vcore-select");
553 if (volt_gpio_np) 553 if (volt_gpio_np)
554 voltage_gpio = read_gpio(volt_gpio_np); 554 voltage_gpio = read_gpio(volt_gpio_np);
555 of_node_put(volt_gpio_np);
555 if (!voltage_gpio){ 556 if (!voltage_gpio){
556 pr_err("missing cpu-vcore-select gpio\n"); 557 pr_err("missing cpu-vcore-select gpio\n");
557 return 1; 558 return 1;
@@ -588,6 +589,7 @@ static int pmac_cpufreq_init_750FX(struct device_node *cpunode)
588 if (volt_gpio_np) 589 if (volt_gpio_np)
589 voltage_gpio = read_gpio(volt_gpio_np); 590 voltage_gpio = read_gpio(volt_gpio_np);
590 591
592 of_node_put(volt_gpio_np);
591 pvr = mfspr(SPRN_PVR); 593 pvr = mfspr(SPRN_PVR);
592 has_cpu_l2lve = !((pvr & 0xf00) == 0x100); 594 has_cpu_l2lve = !((pvr & 0xf00) == 0x100);
593 595
diff --git a/drivers/cpufreq/ppc_cbe_cpufreq.c b/drivers/cpufreq/ppc_cbe_cpufreq.c
index 41a0f0be3f9f..8414c3a4ea08 100644
--- a/drivers/cpufreq/ppc_cbe_cpufreq.c
+++ b/drivers/cpufreq/ppc_cbe_cpufreq.c
@@ -86,6 +86,7 @@ static int cbe_cpufreq_cpu_init(struct cpufreq_policy *policy)
86 if (!cbe_get_cpu_pmd_regs(policy->cpu) || 86 if (!cbe_get_cpu_pmd_regs(policy->cpu) ||
87 !cbe_get_cpu_mic_tm_regs(policy->cpu)) { 87 !cbe_get_cpu_mic_tm_regs(policy->cpu)) {
88 pr_info("invalid CBE regs pointers for cpufreq\n"); 88 pr_info("invalid CBE regs pointers for cpufreq\n");
89 of_node_put(cpu);
89 return -EINVAL; 90 return -EINVAL;
90 } 91 }
91 92