@@ -86,7 +86,6 @@ struct stm32_pinctrl_group {
86
86
87
87
struct stm32_gpio_bank {
88
88
void __iomem * base ;
89
- struct clk * clk ;
90
89
struct reset_control * rstc ;
91
90
spinlock_t lock ;
92
91
struct gpio_chip gpio_chip ;
@@ -108,6 +107,7 @@ struct stm32_pinctrl {
108
107
unsigned ngroups ;
109
108
const char * * grp_names ;
110
109
struct stm32_gpio_bank * banks ;
110
+ struct clk_bulk_data * clks ;
111
111
unsigned nbanks ;
112
112
const struct stm32_pinctrl_match_data * match_data ;
113
113
struct irq_domain * domain ;
@@ -1321,12 +1321,6 @@ static int stm32_gpiolib_register_bank(struct stm32_pinctrl *pctl, struct fwnode
1321
1321
if (IS_ERR (bank -> base ))
1322
1322
return PTR_ERR (bank -> base );
1323
1323
1324
- err = clk_prepare_enable (bank -> clk );
1325
- if (err ) {
1326
- dev_err (dev , "failed to prepare_enable clk (%d)\n" , err );
1327
- return err ;
1328
- }
1329
-
1330
1324
bank -> gpio_chip = stm32_gpio_template ;
1331
1325
1332
1326
fwnode_property_read_string (fwnode , "st,bank-name" , & bank -> gpio_chip .label );
@@ -1373,26 +1367,20 @@ static int stm32_gpiolib_register_bank(struct stm32_pinctrl *pctl, struct fwnode
1373
1367
bank -> fwnode , & stm32_gpio_domain_ops ,
1374
1368
bank );
1375
1369
1376
- if (!bank -> domain ) {
1377
- err = - ENODEV ;
1378
- goto err_clk ;
1379
- }
1370
+ if (!bank -> domain )
1371
+ return - ENODEV ;
1380
1372
}
1381
1373
1382
1374
names = devm_kcalloc (dev , npins , sizeof (char * ), GFP_KERNEL );
1383
- if (!names ) {
1384
- err = - ENOMEM ;
1385
- goto err_clk ;
1386
- }
1375
+ if (!names )
1376
+ return - ENOMEM ;
1387
1377
1388
1378
for (i = 0 ; i < npins ; i ++ ) {
1389
1379
stm32_pin = stm32_pctrl_get_desc_pin_from_gpio (pctl , bank , i );
1390
1380
if (stm32_pin && stm32_pin -> pin .name ) {
1391
1381
names [i ] = devm_kasprintf (dev , GFP_KERNEL , "%s" , stm32_pin -> pin .name );
1392
- if (!names [i ]) {
1393
- err = - ENOMEM ;
1394
- goto err_clk ;
1395
- }
1382
+ if (!names [i ])
1383
+ return - ENOMEM ;
1396
1384
} else {
1397
1385
names [i ] = NULL ;
1398
1386
}
@@ -1403,15 +1391,11 @@ static int stm32_gpiolib_register_bank(struct stm32_pinctrl *pctl, struct fwnode
1403
1391
err = gpiochip_add_data (& bank -> gpio_chip , bank );
1404
1392
if (err ) {
1405
1393
dev_err (dev , "Failed to add gpiochip(%d)!\n" , bank_nr );
1406
- goto err_clk ;
1394
+ return err ;
1407
1395
}
1408
1396
1409
1397
dev_info (dev , "%s bank added\n" , bank -> gpio_chip .label );
1410
1398
return 0 ;
1411
-
1412
- err_clk :
1413
- clk_disable_unprepare (bank -> clk );
1414
- return err ;
1415
1399
}
1416
1400
1417
1401
static struct irq_domain * stm32_pctrl_get_irq_domain (struct platform_device * pdev )
@@ -1634,6 +1618,11 @@ int stm32_pctl_probe(struct platform_device *pdev)
1634
1618
if (!pctl -> banks )
1635
1619
return - ENOMEM ;
1636
1620
1621
+ pctl -> clks = devm_kcalloc (dev , banks , sizeof (* pctl -> clks ),
1622
+ GFP_KERNEL );
1623
+ if (!pctl -> clks )
1624
+ return - ENOMEM ;
1625
+
1637
1626
i = 0 ;
1638
1627
for_each_gpiochip_node (dev , child ) {
1639
1628
struct stm32_gpio_bank * bank = & pctl -> banks [i ];
@@ -1645,24 +1634,27 @@ int stm32_pctl_probe(struct platform_device *pdev)
1645
1634
return - EPROBE_DEFER ;
1646
1635
}
1647
1636
1648
- bank -> clk = of_clk_get_by_name (np , NULL );
1649
- if (IS_ERR (bank -> clk )) {
1637
+ pctl -> clks [ i ]. clk = of_clk_get_by_name (np , NULL );
1638
+ if (IS_ERR (pctl -> clks [ i ]. clk )) {
1650
1639
fwnode_handle_put (child );
1651
- return dev_err_probe (dev , PTR_ERR (bank -> clk ),
1640
+ return dev_err_probe (dev , PTR_ERR (pctl -> clks [ i ]. clk ),
1652
1641
"failed to get clk\n" );
1653
1642
}
1643
+ pctl -> clks [i ].id = "pctl" ;
1654
1644
i ++ ;
1655
1645
}
1656
1646
1647
+ ret = clk_bulk_prepare_enable (banks , pctl -> clks );
1648
+ if (ret ) {
1649
+ dev_err (dev , "failed to prepare_enable clk (%d)\n" , ret );
1650
+ return ret ;
1651
+ }
1652
+
1657
1653
for_each_gpiochip_node (dev , child ) {
1658
1654
ret = stm32_gpiolib_register_bank (pctl , child );
1659
1655
if (ret ) {
1660
1656
fwnode_handle_put (child );
1661
-
1662
- for (i = 0 ; i < pctl -> nbanks ; i ++ )
1663
- clk_disable_unprepare (pctl -> banks [i ].clk );
1664
-
1665
- return ret ;
1657
+ goto err_register ;
1666
1658
}
1667
1659
1668
1660
pctl -> nbanks ++ ;
@@ -1671,6 +1663,15 @@ int stm32_pctl_probe(struct platform_device *pdev)
1671
1663
dev_info (dev , "Pinctrl STM32 initialized\n" );
1672
1664
1673
1665
return 0 ;
1666
+ err_register :
1667
+ for (i = 0 ; i < pctl -> nbanks ; i ++ ) {
1668
+ struct stm32_gpio_bank * bank = & pctl -> banks [i ];
1669
+
1670
+ gpiochip_remove (& bank -> gpio_chip );
1671
+ }
1672
+
1673
+ clk_bulk_disable_unprepare (banks , pctl -> clks );
1674
+ return ret ;
1674
1675
}
1675
1676
1676
1677
static int __maybe_unused stm32_pinctrl_restore_gpio_regs (
@@ -1739,10 +1740,8 @@ static int __maybe_unused stm32_pinctrl_restore_gpio_regs(
1739
1740
int __maybe_unused stm32_pinctrl_suspend (struct device * dev )
1740
1741
{
1741
1742
struct stm32_pinctrl * pctl = dev_get_drvdata (dev );
1742
- int i ;
1743
1743
1744
- for (i = 0 ; i < pctl -> nbanks ; i ++ )
1745
- clk_disable (pctl -> banks [i ].clk );
1744
+ clk_bulk_disable (pctl -> nbanks , pctl -> clks );
1746
1745
1747
1746
return 0 ;
1748
1747
}
@@ -1751,10 +1750,11 @@ int __maybe_unused stm32_pinctrl_resume(struct device *dev)
1751
1750
{
1752
1751
struct stm32_pinctrl * pctl = dev_get_drvdata (dev );
1753
1752
struct stm32_pinctrl_group * g = pctl -> groups ;
1754
- int i ;
1753
+ int i , ret ;
1755
1754
1756
- for (i = 0 ; i < pctl -> nbanks ; i ++ )
1757
- clk_enable (pctl -> banks [i ].clk );
1755
+ ret = clk_bulk_enable (pctl -> nbanks , pctl -> clks );
1756
+ if (ret )
1757
+ return ret ;
1758
1758
1759
1759
for (i = 0 ; i < pctl -> ngroups ; i ++ , g ++ )
1760
1760
stm32_pinctrl_restore_gpio_regs (pctl , g -> pin );
0 commit comments