Skip to content

Commit d740654

Browse files
Bartosz Golaszewskikuba-moo
authored andcommitted
net: stmmac: platform: provide devm_stmmac_probe_config_dt()
Provide a devres variant of stmmac_probe_config_dt() that allows users to skip calling stmmac_remove_config_dt() at driver detach. Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org> Link: https://lore.kernel.org/r/20230623100417.93592-9-brgl@bgdev.pl Signed-off-by: Jakub Kicinski <kuba@kernel.org>
1 parent 1be0c9d commit d740654

2 files changed

Lines changed: 43 additions & 0 deletions

File tree

drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
Author: Giuseppe Cavallaro <peppe.cavallaro@st.com>
99
*******************************************************************************/
1010

11+
#include <linux/device.h>
1112
#include <linux/platform_device.h>
1213
#include <linux/pm_runtime.h>
1314
#include <linux/module.h>
@@ -629,6 +630,39 @@ stmmac_probe_config_dt(struct platform_device *pdev, u8 *mac)
629630
return ret;
630631
}
631632

633+
static void devm_stmmac_remove_config_dt(void *data)
634+
{
635+
struct plat_stmmacenet_data *plat = data;
636+
637+
/* Platform data argument is unused */
638+
stmmac_remove_config_dt(NULL, plat);
639+
}
640+
641+
/**
642+
* devm_stmmac_probe_config_dt
643+
* @pdev: platform_device structure
644+
* @mac: MAC address to use
645+
* Description: Devres variant of stmmac_probe_config_dt(). Does not require
646+
* the user to call stmmac_remove_config_dt() at driver detach.
647+
*/
648+
struct plat_stmmacenet_data *
649+
devm_stmmac_probe_config_dt(struct platform_device *pdev, u8 *mac)
650+
{
651+
struct plat_stmmacenet_data *plat;
652+
int ret;
653+
654+
plat = stmmac_probe_config_dt(pdev, mac);
655+
if (IS_ERR(plat))
656+
return plat;
657+
658+
ret = devm_add_action_or_reset(&pdev->dev,
659+
devm_stmmac_remove_config_dt, plat);
660+
if (ret)
661+
return ERR_PTR(ret);
662+
663+
return plat;
664+
}
665+
632666
/**
633667
* stmmac_remove_config_dt - undo the effects of stmmac_probe_config_dt()
634668
* @pdev: platform_device structure
@@ -651,12 +685,19 @@ stmmac_probe_config_dt(struct platform_device *pdev, u8 *mac)
651685
return ERR_PTR(-EINVAL);
652686
}
653687

688+
struct plat_stmmacenet_data *
689+
devm_stmmac_probe_config_dt(struct platform_device *pdev, u8 *mac)
690+
{
691+
return ERR_PTR(-EINVAL);
692+
}
693+
654694
void stmmac_remove_config_dt(struct platform_device *pdev,
655695
struct plat_stmmacenet_data *plat)
656696
{
657697
}
658698
#endif /* CONFIG_OF */
659699
EXPORT_SYMBOL_GPL(stmmac_probe_config_dt);
700+
EXPORT_SYMBOL_GPL(devm_stmmac_probe_config_dt);
660701
EXPORT_SYMBOL_GPL(stmmac_remove_config_dt);
661702

662703
int stmmac_get_platform_resources(struct platform_device *pdev,

drivers/net/ethernet/stmicro/stmmac/stmmac_platform.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313

1414
struct plat_stmmacenet_data *
1515
stmmac_probe_config_dt(struct platform_device *pdev, u8 *mac);
16+
struct plat_stmmacenet_data *
17+
devm_stmmac_probe_config_dt(struct platform_device *pdev, u8 *mac);
1618
void stmmac_remove_config_dt(struct platform_device *pdev,
1719
struct plat_stmmacenet_data *plat);
1820

0 commit comments

Comments
 (0)