4
4
* Copyright (c) 2019, Linaro Limited
5
5
*/
6
6
7
+ #include <linux/cleanup.h>
7
8
#include <linux/module.h>
8
9
#include <linux/err.h>
9
10
#include <linux/debugfs.h>
@@ -747,9 +748,9 @@ static int cpr_set_performance_state(struct generic_pm_domain *domain,
747
748
struct cpr_drv * drv = container_of (domain , struct cpr_drv , pd );
748
749
struct corner * corner , * end ;
749
750
enum voltage_change_dir dir ;
750
- int ret = 0 , new_uV ;
751
+ int ret , new_uV ;
751
752
752
- mutex_lock (& drv -> lock );
753
+ guard ( mutex ) (& drv -> lock );
753
754
754
755
dev_dbg (drv -> dev , "%s: setting perf state: %u (prev state: %u)\n" ,
755
756
__func__ , state , cpr_get_cur_perf_state (drv ));
@@ -760,10 +761,8 @@ static int cpr_set_performance_state(struct generic_pm_domain *domain,
760
761
*/
761
762
corner = drv -> corners + state - 1 ;
762
763
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 ;
767
766
768
767
/* Determine direction */
769
768
if (drv -> corner > corner )
@@ -783,7 +782,7 @@ static int cpr_set_performance_state(struct generic_pm_domain *domain,
783
782
784
783
ret = cpr_scale_voltage (drv , corner , new_uV , dir );
785
784
if (ret )
786
- goto unlock ;
785
+ return ret ;
787
786
788
787
if (cpr_is_allowed (drv )) {
789
788
cpr_irq_clr (drv );
@@ -794,10 +793,7 @@ static int cpr_set_performance_state(struct generic_pm_domain *domain,
794
793
795
794
drv -> corner = corner ;
796
795
797
- unlock :
798
- mutex_unlock (& drv -> lock );
799
-
800
- return ret ;
796
+ return 0 ;
801
797
}
802
798
803
799
static int
@@ -1437,9 +1433,9 @@ static int cpr_pd_attach_dev(struct generic_pm_domain *domain,
1437
1433
{
1438
1434
struct cpr_drv * drv = container_of (domain , struct cpr_drv , pd );
1439
1435
const struct acc_desc * acc_desc = drv -> acc_desc ;
1440
- int ret = 0 ;
1436
+ int ret ;
1441
1437
1442
- mutex_lock (& drv -> lock );
1438
+ guard ( mutex ) (& drv -> lock );
1443
1439
1444
1440
dev_dbg (drv -> dev , "attach callback for: %s\n" , dev_name (dev ));
1445
1441
@@ -1451,7 +1447,7 @@ static int cpr_pd_attach_dev(struct generic_pm_domain *domain,
1451
1447
* additional initialization when further CPUs get attached.
1452
1448
*/
1453
1449
if (drv -> attached_cpu_dev )
1454
- goto unlock ;
1450
+ return 0 ;
1455
1451
1456
1452
/*
1457
1453
* 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,
1463
1459
* the first time cpr_set_performance_state() is called.
1464
1460
*/
1465
1461
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
+
1471
1466
drv -> attached_cpu_dev = dev ;
1472
1467
1473
1468
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,
1484
1479
ret = dev_pm_opp_get_opp_count (& drv -> pd .dev );
1485
1480
if (ret < 0 ) {
1486
1481
dev_err (drv -> dev , "could not get OPP count\n" );
1487
- goto unlock ;
1482
+ return ret ;
1488
1483
}
1489
1484
drv -> num_corners = ret ;
1490
1485
1491
1486
if (drv -> num_corners < 2 ) {
1492
1487
dev_err (drv -> dev , "need at least 2 OPPs to use CPR\n" );
1493
- ret = - EINVAL ;
1494
- goto unlock ;
1488
+ return - EINVAL ;
1495
1489
}
1496
1490
1497
1491
drv -> corners = devm_kcalloc (drv -> dev , drv -> num_corners ,
1498
1492
sizeof (* drv -> corners ),
1499
1493
GFP_KERNEL );
1500
- if (!drv -> corners ) {
1501
- ret = - ENOMEM ;
1502
- goto unlock ;
1503
- }
1494
+ if (!drv -> corners )
1495
+ return - ENOMEM ;
1504
1496
1505
1497
ret = cpr_corner_init (drv );
1506
1498
if (ret )
1507
- goto unlock ;
1499
+ return ret ;
1508
1500
1509
1501
cpr_set_loop_allowed (drv );
1510
1502
1511
1503
ret = cpr_init_parameters (drv );
1512
1504
if (ret )
1513
- goto unlock ;
1505
+ return ret ;
1514
1506
1515
1507
/* Configure CPR HW but keep it disabled */
1516
1508
ret = cpr_config (drv );
1517
1509
if (ret )
1518
- goto unlock ;
1510
+ return ret ;
1519
1511
1520
1512
ret = cpr_find_initial_corner (drv );
1521
1513
if (ret )
1522
- goto unlock ;
1514
+ return ret ;
1523
1515
1524
1516
if (acc_desc -> config )
1525
1517
regmap_multi_reg_write (drv -> tcsr , acc_desc -> config ,
@@ -1534,10 +1526,7 @@ static int cpr_pd_attach_dev(struct generic_pm_domain *domain,
1534
1526
dev_info (drv -> dev , "driver initialized with %u OPPs\n" ,
1535
1527
drv -> num_corners );
1536
1528
1537
- unlock :
1538
- mutex_unlock (& drv -> lock );
1539
-
1540
- return ret ;
1529
+ return 0 ;
1541
1530
}
1542
1531
1543
1532
static int cpr_debug_info_show (struct seq_file * s , void * unused )
0 commit comments