Skip to content

Commit ba3a65c

Browse files
krzkstorulf
authored andcommitted
pmdomain: qcom: cpr: Simplify locking with guard()
Simplify error handling (less gotos) over locks with guard(). Signed-off-by: Krzysztof Kozlowski <[email protected]> Reviewed-by: Konrad Dybcio <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Ulf Hansson <[email protected]>
1 parent 584dc41 commit ba3a65c

File tree

1 file changed

+23
-34
lines changed
  • drivers/pmdomain/qcom

1 file changed

+23
-34
lines changed

drivers/pmdomain/qcom/cpr.c

Lines changed: 23 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
* Copyright (c) 2019, Linaro Limited
55
*/
66

7+
#include <linux/cleanup.h>
78
#include <linux/module.h>
89
#include <linux/err.h>
910
#include <linux/debugfs.h>
@@ -747,9 +748,9 @@ static int cpr_set_performance_state(struct generic_pm_domain *domain,
747748
struct cpr_drv *drv = container_of(domain, struct cpr_drv, pd);
748749
struct corner *corner, *end;
749750
enum voltage_change_dir dir;
750-
int ret = 0, new_uV;
751+
int ret, new_uV;
751752

752-
mutex_lock(&drv->lock);
753+
guard(mutex)(&drv->lock);
753754

754755
dev_dbg(drv->dev, "%s: setting perf state: %u (prev state: %u)\n",
755756
__func__, state, cpr_get_cur_perf_state(drv));
@@ -760,10 +761,8 @@ static int cpr_set_performance_state(struct generic_pm_domain *domain,
760761
*/
761762
corner = drv->corners + state - 1;
762763
end = &drv->corners[drv->num_corners - 1];
763-
if (corner > end || corner < drv->corners) {
764-
ret = -EINVAL;
765-
goto unlock;
766-
}
764+
if (corner > end || corner < drv->corners)
765+
return -EINVAL;
767766

768767
/* Determine direction */
769768
if (drv->corner > corner)
@@ -783,7 +782,7 @@ static int cpr_set_performance_state(struct generic_pm_domain *domain,
783782

784783
ret = cpr_scale_voltage(drv, corner, new_uV, dir);
785784
if (ret)
786-
goto unlock;
785+
return ret;
787786

788787
if (cpr_is_allowed(drv)) {
789788
cpr_irq_clr(drv);
@@ -794,10 +793,7 @@ static int cpr_set_performance_state(struct generic_pm_domain *domain,
794793

795794
drv->corner = corner;
796795

797-
unlock:
798-
mutex_unlock(&drv->lock);
799-
800-
return ret;
796+
return 0;
801797
}
802798

803799
static int
@@ -1437,9 +1433,9 @@ static int cpr_pd_attach_dev(struct generic_pm_domain *domain,
14371433
{
14381434
struct cpr_drv *drv = container_of(domain, struct cpr_drv, pd);
14391435
const struct acc_desc *acc_desc = drv->acc_desc;
1440-
int ret = 0;
1436+
int ret;
14411437

1442-
mutex_lock(&drv->lock);
1438+
guard(mutex)(&drv->lock);
14431439

14441440
dev_dbg(drv->dev, "attach callback for: %s\n", dev_name(dev));
14451441

@@ -1451,7 +1447,7 @@ static int cpr_pd_attach_dev(struct generic_pm_domain *domain,
14511447
* additional initialization when further CPUs get attached.
14521448
*/
14531449
if (drv->attached_cpu_dev)
1454-
goto unlock;
1450+
return 0;
14551451

14561452
/*
14571453
* cpr_scale_voltage() requires the direction (if we are changing
@@ -1463,11 +1459,10 @@ static int cpr_pd_attach_dev(struct generic_pm_domain *domain,
14631459
* the first time cpr_set_performance_state() is called.
14641460
*/
14651461
drv->cpu_clk = devm_clk_get(dev, NULL);
1466-
if (IS_ERR(drv->cpu_clk)) {
1467-
ret = dev_err_probe(drv->dev, PTR_ERR(drv->cpu_clk),
1468-
"could not get cpu clk\n");
1469-
goto unlock;
1470-
}
1462+
if (IS_ERR(drv->cpu_clk))
1463+
return dev_err_probe(drv->dev, PTR_ERR(drv->cpu_clk),
1464+
"could not get cpu clk\n");
1465+
14711466
drv->attached_cpu_dev = dev;
14721467

14731468
dev_dbg(drv->dev, "using cpu clk from: %s\n",
@@ -1484,42 +1479,39 @@ static int cpr_pd_attach_dev(struct generic_pm_domain *domain,
14841479
ret = dev_pm_opp_get_opp_count(&drv->pd.dev);
14851480
if (ret < 0) {
14861481
dev_err(drv->dev, "could not get OPP count\n");
1487-
goto unlock;
1482+
return ret;
14881483
}
14891484
drv->num_corners = ret;
14901485

14911486
if (drv->num_corners < 2) {
14921487
dev_err(drv->dev, "need at least 2 OPPs to use CPR\n");
1493-
ret = -EINVAL;
1494-
goto unlock;
1488+
return -EINVAL;
14951489
}
14961490

14971491
drv->corners = devm_kcalloc(drv->dev, drv->num_corners,
14981492
sizeof(*drv->corners),
14991493
GFP_KERNEL);
1500-
if (!drv->corners) {
1501-
ret = -ENOMEM;
1502-
goto unlock;
1503-
}
1494+
if (!drv->corners)
1495+
return -ENOMEM;
15041496

15051497
ret = cpr_corner_init(drv);
15061498
if (ret)
1507-
goto unlock;
1499+
return ret;
15081500

15091501
cpr_set_loop_allowed(drv);
15101502

15111503
ret = cpr_init_parameters(drv);
15121504
if (ret)
1513-
goto unlock;
1505+
return ret;
15141506

15151507
/* Configure CPR HW but keep it disabled */
15161508
ret = cpr_config(drv);
15171509
if (ret)
1518-
goto unlock;
1510+
return ret;
15191511

15201512
ret = cpr_find_initial_corner(drv);
15211513
if (ret)
1522-
goto unlock;
1514+
return ret;
15231515

15241516
if (acc_desc->config)
15251517
regmap_multi_reg_write(drv->tcsr, acc_desc->config,
@@ -1534,10 +1526,7 @@ static int cpr_pd_attach_dev(struct generic_pm_domain *domain,
15341526
dev_info(drv->dev, "driver initialized with %u OPPs\n",
15351527
drv->num_corners);
15361528

1537-
unlock:
1538-
mutex_unlock(&drv->lock);
1539-
1540-
return ret;
1529+
return 0;
15411530
}
15421531

15431532
static int cpr_debug_info_show(struct seq_file *s, void *unused)

0 commit comments

Comments
 (0)