@@ -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 ;
@@ -1308,12 +1308,6 @@ static int stm32_gpiolib_register_bank(struct stm32_pinctrl *pctl, struct fwnode
13081308 if (IS_ERR (bank -> base ))
13091309 return PTR_ERR (bank -> base );
13101310
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-
13171311 bank -> gpio_chip = stm32_gpio_template ;
13181312
13191313 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
13601354 bank -> fwnode , & stm32_gpio_domain_ops ,
13611355 bank );
13621356
1363- if (!bank -> domain ) {
1364- err = - ENODEV ;
1365- goto err_clk ;
1366- }
1357+ if (!bank -> domain )
1358+ return - ENODEV ;
13671359 }
13681360
13691361 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 ;
13741364
13751365 for (i = 0 ; i < npins ; i ++ ) {
13761366 stm32_pin = stm32_pctrl_get_desc_pin_from_gpio (pctl , bank , i );
13771367 if (stm32_pin && stm32_pin -> pin .name ) {
13781368 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 ;
13831371 } else {
13841372 names [i ] = NULL ;
13851373 }
@@ -1390,15 +1378,11 @@ static int stm32_gpiolib_register_bank(struct stm32_pinctrl *pctl, struct fwnode
13901378 err = gpiochip_add_data (& bank -> gpio_chip , bank );
13911379 if (err ) {
13921380 dev_err (dev , "Failed to add gpiochip(%d)!\n" , bank_nr );
1393- goto err_clk ;
1381+ return err ;
13941382 }
13951383
13961384 dev_info (dev , "%s bank added\n" , bank -> gpio_chip .label );
13971385 return 0 ;
1398-
1399- err_clk :
1400- clk_disable_unprepare (bank -> clk );
1401- return err ;
14021386}
14031387
14041388static struct irq_domain * stm32_pctrl_get_irq_domain (struct platform_device * pdev )
@@ -1621,6 +1605,11 @@ int stm32_pctl_probe(struct platform_device *pdev)
16211605 if (!pctl -> banks )
16221606 return - ENOMEM ;
16231607
1608+ pctl -> clks = devm_kcalloc (dev , banks , sizeof (* pctl -> clks ),
1609+ GFP_KERNEL );
1610+ if (!pctl -> clks )
1611+ return - ENOMEM ;
1612+
16241613 i = 0 ;
16251614 for_each_gpiochip_node (dev , child ) {
16261615 struct stm32_gpio_bank * bank = & pctl -> banks [i ];
@@ -1632,24 +1621,27 @@ int stm32_pctl_probe(struct platform_device *pdev)
16321621 return - EPROBE_DEFER ;
16331622 }
16341623
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 )) {
16371626 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 ),
16391628 "failed to get clk\n" );
16401629 }
1630+ pctl -> clks [i ].id = "pctl" ;
16411631 i ++ ;
16421632 }
16431633
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+
16441640 for_each_gpiochip_node (dev , child ) {
16451641 ret = stm32_gpiolib_register_bank (pctl , child );
16461642 if (ret ) {
16471643 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 ;
16531645 }
16541646
16551647 pctl -> nbanks ++ ;
@@ -1658,6 +1650,15 @@ int stm32_pctl_probe(struct platform_device *pdev)
16581650 dev_info (dev , "Pinctrl STM32 initialized\n" );
16591651
16601652 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 ;
16611662}
16621663
16631664static int __maybe_unused stm32_pinctrl_restore_gpio_regs (
@@ -1726,10 +1727,8 @@ static int __maybe_unused stm32_pinctrl_restore_gpio_regs(
17261727int __maybe_unused stm32_pinctrl_suspend (struct device * dev )
17271728{
17281729 struct stm32_pinctrl * pctl = dev_get_drvdata (dev );
1729- int i ;
17301730
1731- for (i = 0 ; i < pctl -> nbanks ; i ++ )
1732- clk_disable (pctl -> banks [i ].clk );
1731+ clk_bulk_disable (pctl -> nbanks , pctl -> clks );
17331732
17341733 return 0 ;
17351734}
@@ -1738,10 +1737,11 @@ int __maybe_unused stm32_pinctrl_resume(struct device *dev)
17381737{
17391738 struct stm32_pinctrl * pctl = dev_get_drvdata (dev );
17401739 struct stm32_pinctrl_group * g = pctl -> groups ;
1741- int i ;
1740+ int i , ret ;
17421741
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 ;
17451745
17461746 for (i = 0 ; i < pctl -> ngroups ; i ++ , g ++ )
17471747 stm32_pinctrl_restore_gpio_regs (pctl , g -> pin );
0 commit comments