@@ -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 ;
@@ -1308,12 +1308,6 @@ static int stm32_gpiolib_register_bank(struct stm32_pinctrl *pctl, struct fwnode
1308
1308
if (IS_ERR (bank -> base ))
1309
1309
return PTR_ERR (bank -> base );
1310
1310
1311
- err = clk_prepare_enable (bank -> clk );
1312
- if (err ) {
1313
- dev_err (dev , "failed to prepare_enable clk (%d)\n" , err );
1314
- return err ;
1315
- }
1316
-
1317
1311
bank -> gpio_chip = stm32_gpio_template ;
1318
1312
1319
1313
fwnode_property_read_string (fwnode , "st,bank-name" , & bank -> gpio_chip .label );
@@ -1360,26 +1354,20 @@ static int stm32_gpiolib_register_bank(struct stm32_pinctrl *pctl, struct fwnode
1360
1354
bank -> fwnode , & stm32_gpio_domain_ops ,
1361
1355
bank );
1362
1356
1363
- if (!bank -> domain ) {
1364
- err = - ENODEV ;
1365
- goto err_clk ;
1366
- }
1357
+ if (!bank -> domain )
1358
+ return - ENODEV ;
1367
1359
}
1368
1360
1369
1361
names = devm_kcalloc (dev , npins , sizeof (char * ), GFP_KERNEL );
1370
- if (!names ) {
1371
- err = - ENOMEM ;
1372
- goto err_clk ;
1373
- }
1362
+ if (!names )
1363
+ return - ENOMEM ;
1374
1364
1375
1365
for (i = 0 ; i < npins ; i ++ ) {
1376
1366
stm32_pin = stm32_pctrl_get_desc_pin_from_gpio (pctl , bank , i );
1377
1367
if (stm32_pin && stm32_pin -> pin .name ) {
1378
1368
names [i ] = devm_kasprintf (dev , GFP_KERNEL , "%s" , stm32_pin -> pin .name );
1379
- if (!names [i ]) {
1380
- err = - ENOMEM ;
1381
- goto err_clk ;
1382
- }
1369
+ if (!names [i ])
1370
+ return - ENOMEM ;
1383
1371
} else {
1384
1372
names [i ] = NULL ;
1385
1373
}
@@ -1390,15 +1378,11 @@ static int stm32_gpiolib_register_bank(struct stm32_pinctrl *pctl, struct fwnode
1390
1378
err = gpiochip_add_data (& bank -> gpio_chip , bank );
1391
1379
if (err ) {
1392
1380
dev_err (dev , "Failed to add gpiochip(%d)!\n" , bank_nr );
1393
- goto err_clk ;
1381
+ return err ;
1394
1382
}
1395
1383
1396
1384
dev_info (dev , "%s bank added\n" , bank -> gpio_chip .label );
1397
1385
return 0 ;
1398
-
1399
- err_clk :
1400
- clk_disable_unprepare (bank -> clk );
1401
- return err ;
1402
1386
}
1403
1387
1404
1388
static struct irq_domain * stm32_pctrl_get_irq_domain (struct platform_device * pdev )
@@ -1621,6 +1605,11 @@ int stm32_pctl_probe(struct platform_device *pdev)
1621
1605
if (!pctl -> banks )
1622
1606
return - ENOMEM ;
1623
1607
1608
+ pctl -> clks = devm_kcalloc (dev , banks , sizeof (* pctl -> clks ),
1609
+ GFP_KERNEL );
1610
+ if (!pctl -> clks )
1611
+ return - ENOMEM ;
1612
+
1624
1613
i = 0 ;
1625
1614
for_each_gpiochip_node (dev , child ) {
1626
1615
struct stm32_gpio_bank * bank = & pctl -> banks [i ];
@@ -1632,24 +1621,27 @@ int stm32_pctl_probe(struct platform_device *pdev)
1632
1621
return - EPROBE_DEFER ;
1633
1622
}
1634
1623
1635
- bank -> clk = of_clk_get_by_name (np , NULL );
1636
- if (IS_ERR (bank -> clk )) {
1624
+ pctl -> clks [ i ]. clk = of_clk_get_by_name (np , NULL );
1625
+ if (IS_ERR (pctl -> clks [ i ]. clk )) {
1637
1626
fwnode_handle_put (child );
1638
- return dev_err_probe (dev , PTR_ERR (bank -> clk ),
1627
+ return dev_err_probe (dev , PTR_ERR (pctl -> clks [ i ]. clk ),
1639
1628
"failed to get clk\n" );
1640
1629
}
1630
+ pctl -> clks [i ].id = "pctl" ;
1641
1631
i ++ ;
1642
1632
}
1643
1633
1634
+ ret = clk_bulk_prepare_enable (banks , pctl -> clks );
1635
+ if (ret ) {
1636
+ dev_err (dev , "failed to prepare_enable clk (%d)\n" , ret );
1637
+ return ret ;
1638
+ }
1639
+
1644
1640
for_each_gpiochip_node (dev , child ) {
1645
1641
ret = stm32_gpiolib_register_bank (pctl , child );
1646
1642
if (ret ) {
1647
1643
fwnode_handle_put (child );
1648
-
1649
- for (i = 0 ; i < pctl -> nbanks ; i ++ )
1650
- clk_disable_unprepare (pctl -> banks [i ].clk );
1651
-
1652
- return ret ;
1644
+ goto err_register ;
1653
1645
}
1654
1646
1655
1647
pctl -> nbanks ++ ;
@@ -1658,6 +1650,15 @@ int stm32_pctl_probe(struct platform_device *pdev)
1658
1650
dev_info (dev , "Pinctrl STM32 initialized\n" );
1659
1651
1660
1652
return 0 ;
1653
+ err_register :
1654
+ for (i = 0 ; i < pctl -> nbanks ; i ++ ) {
1655
+ struct stm32_gpio_bank * bank = & pctl -> banks [i ];
1656
+
1657
+ gpiochip_remove (& bank -> gpio_chip );
1658
+ }
1659
+
1660
+ clk_bulk_disable_unprepare (banks , pctl -> clks );
1661
+ return ret ;
1661
1662
}
1662
1663
1663
1664
static int __maybe_unused stm32_pinctrl_restore_gpio_regs (
@@ -1726,10 +1727,8 @@ static int __maybe_unused stm32_pinctrl_restore_gpio_regs(
1726
1727
int __maybe_unused stm32_pinctrl_suspend (struct device * dev )
1727
1728
{
1728
1729
struct stm32_pinctrl * pctl = dev_get_drvdata (dev );
1729
- int i ;
1730
1730
1731
- for (i = 0 ; i < pctl -> nbanks ; i ++ )
1732
- clk_disable (pctl -> banks [i ].clk );
1731
+ clk_bulk_disable (pctl -> nbanks , pctl -> clks );
1733
1732
1734
1733
return 0 ;
1735
1734
}
@@ -1738,10 +1737,11 @@ int __maybe_unused stm32_pinctrl_resume(struct device *dev)
1738
1737
{
1739
1738
struct stm32_pinctrl * pctl = dev_get_drvdata (dev );
1740
1739
struct stm32_pinctrl_group * g = pctl -> groups ;
1741
- int i ;
1740
+ int i , ret ;
1742
1741
1743
- for (i = 0 ; i < pctl -> nbanks ; i ++ )
1744
- clk_enable (pctl -> banks [i ].clk );
1742
+ ret = clk_bulk_enable (pctl -> nbanks , pctl -> clks );
1743
+ if (ret )
1744
+ return ret ;
1745
1745
1746
1746
for (i = 0 ; i < pctl -> ngroups ; i ++ , g ++ )
1747
1747
stm32_pinctrl_restore_gpio_regs (pctl , g -> pin );
0 commit comments