@@ -86,7 +86,6 @@ struct stm32_pinctrl_group {
8686
8787struct stm32_gpio_bank {
8888 void __iomem * base ;
89- struct clk * clk ;
9089 struct reset_control * rstc ;
9190 spinlock_t lock ;
9291 struct gpio_chip gpio_chip ;
@@ -108,6 +107,7 @@ struct stm32_pinctrl {
108107 unsigned ngroups ;
109108 const char * * grp_names ;
110109 struct stm32_gpio_bank * banks ;
110+ struct clk_bulk_data * clks ;
111111 unsigned nbanks ;
112112 const struct stm32_pinctrl_match_data * match_data ;
113113 struct irq_domain * domain ;
@@ -1321,12 +1321,6 @@ static int stm32_gpiolib_register_bank(struct stm32_pinctrl *pctl, struct fwnode
13211321 if (IS_ERR (bank -> base ))
13221322 return PTR_ERR (bank -> base );
13231323
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-
13301324 bank -> gpio_chip = stm32_gpio_template ;
13311325
13321326 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
13731367 bank -> fwnode , & stm32_gpio_domain_ops ,
13741368 bank );
13751369
1376- if (!bank -> domain ) {
1377- err = - ENODEV ;
1378- goto err_clk ;
1379- }
1370+ if (!bank -> domain )
1371+ return - ENODEV ;
13801372 }
13811373
13821374 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 ;
13871377
13881378 for (i = 0 ; i < npins ; i ++ ) {
13891379 stm32_pin = stm32_pctrl_get_desc_pin_from_gpio (pctl , bank , i );
13901380 if (stm32_pin && stm32_pin -> pin .name ) {
13911381 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 ;
13961384 } else {
13971385 names [i ] = NULL ;
13981386 }
@@ -1403,15 +1391,11 @@ static int stm32_gpiolib_register_bank(struct stm32_pinctrl *pctl, struct fwnode
14031391 err = gpiochip_add_data (& bank -> gpio_chip , bank );
14041392 if (err ) {
14051393 dev_err (dev , "Failed to add gpiochip(%d)!\n" , bank_nr );
1406- goto err_clk ;
1394+ return err ;
14071395 }
14081396
14091397 dev_info (dev , "%s bank added\n" , bank -> gpio_chip .label );
14101398 return 0 ;
1411-
1412- err_clk :
1413- clk_disable_unprepare (bank -> clk );
1414- return err ;
14151399}
14161400
14171401static struct irq_domain * stm32_pctrl_get_irq_domain (struct platform_device * pdev )
@@ -1634,6 +1618,11 @@ int stm32_pctl_probe(struct platform_device *pdev)
16341618 if (!pctl -> banks )
16351619 return - ENOMEM ;
16361620
1621+ pctl -> clks = devm_kcalloc (dev , banks , sizeof (* pctl -> clks ),
1622+ GFP_KERNEL );
1623+ if (!pctl -> clks )
1624+ return - ENOMEM ;
1625+
16371626 i = 0 ;
16381627 for_each_gpiochip_node (dev , child ) {
16391628 struct stm32_gpio_bank * bank = & pctl -> banks [i ];
@@ -1645,24 +1634,27 @@ int stm32_pctl_probe(struct platform_device *pdev)
16451634 return - EPROBE_DEFER ;
16461635 }
16471636
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 )) {
16501639 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 ),
16521641 "failed to get clk\n" );
16531642 }
1643+ pctl -> clks [i ].id = "pctl" ;
16541644 i ++ ;
16551645 }
16561646
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+
16571653 for_each_gpiochip_node (dev , child ) {
16581654 ret = stm32_gpiolib_register_bank (pctl , child );
16591655 if (ret ) {
16601656 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 ;
16661658 }
16671659
16681660 pctl -> nbanks ++ ;
@@ -1671,6 +1663,15 @@ int stm32_pctl_probe(struct platform_device *pdev)
16711663 dev_info (dev , "Pinctrl STM32 initialized\n" );
16721664
16731665 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 ;
16741675}
16751676
16761677static int __maybe_unused stm32_pinctrl_restore_gpio_regs (
@@ -1739,10 +1740,8 @@ static int __maybe_unused stm32_pinctrl_restore_gpio_regs(
17391740int __maybe_unused stm32_pinctrl_suspend (struct device * dev )
17401741{
17411742 struct stm32_pinctrl * pctl = dev_get_drvdata (dev );
1742- int i ;
17431743
1744- for (i = 0 ; i < pctl -> nbanks ; i ++ )
1745- clk_disable (pctl -> banks [i ].clk );
1744+ clk_bulk_disable (pctl -> nbanks , pctl -> clks );
17461745
17471746 return 0 ;
17481747}
@@ -1751,10 +1750,11 @@ int __maybe_unused stm32_pinctrl_resume(struct device *dev)
17511750{
17521751 struct stm32_pinctrl * pctl = dev_get_drvdata (dev );
17531752 struct stm32_pinctrl_group * g = pctl -> groups ;
1754- int i ;
1753+ int i , ret ;
17551754
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 ;
17581758
17591759 for (i = 0 ; i < pctl -> ngroups ; i ++ , g ++ )
17601760 stm32_pinctrl_restore_gpio_regs (pctl , g -> pin );
0 commit comments