net: stmmac: move probe/remove calling of init/exit

Move the probe/remove time calling of the init()/exit() methods in
the platform data to the main driver probe/remove functions. This
allows them to be used by non-platform_device based drivers.

Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
Link: https://patch.msgid.link/E1vLf2Z-0000000FMNH-0xPV@rmk-PC.armlinux.org.uk
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Russell King (Oracle)
2025-11-19 10:03:55 +00:00
committed by Jakub Kicinski
parent 85081acc6b
commit 32da89a840
2 changed files with 36 additions and 34 deletions

View File

@@ -7593,19 +7593,9 @@ struct plat_stmmacenet_data *stmmac_plat_dat_alloc(struct device *dev)
}
EXPORT_SYMBOL_GPL(stmmac_plat_dat_alloc);
/**
* stmmac_dvr_probe
* @device: device pointer
* @plat_dat: platform data pointer
* @res: stmmac resource pointer
* Description: this is the main probe function used to
* call the alloc_etherdev, allocate the priv structure.
* Return:
* returns 0 on success, otherwise errno.
*/
int stmmac_dvr_probe(struct device *device,
struct plat_stmmacenet_data *plat_dat,
struct stmmac_resources *res)
static int __stmmac_dvr_probe(struct device *device,
struct plat_stmmacenet_data *plat_dat,
struct stmmac_resources *res)
{
struct net_device *ndev = NULL;
struct stmmac_priv *priv;
@@ -7906,6 +7896,34 @@ error_wq_init:
return ret;
}
/**
* stmmac_dvr_probe
* @dev: device pointer
* @plat_dat: platform data pointer
* @res: stmmac resource pointer
* Description: this is the main probe function used to
* call the alloc_etherdev, allocate the priv structure.
* Return:
* returns 0 on success, otherwise errno.
*/
int stmmac_dvr_probe(struct device *dev, struct plat_stmmacenet_data *plat_dat,
struct stmmac_resources *res)
{
int ret;
if (plat_dat->init) {
ret = plat_dat->init(dev, plat_dat->bsp_priv);
if (ret)
return ret;
}
ret = __stmmac_dvr_probe(dev, plat_dat, res);
if (ret && plat_dat->exit)
plat_dat->exit(dev, plat_dat->bsp_priv);
return ret;
}
EXPORT_SYMBOL_GPL(stmmac_dvr_probe);
/**
@@ -7944,6 +7962,9 @@ void stmmac_dvr_remove(struct device *dev)
pm_runtime_disable(dev);
pm_runtime_put_noidle(dev);
if (priv->plat->exit)
priv->plat->exit(dev, priv->plat->bsp_priv);
}
EXPORT_SYMBOL_GPL(stmmac_dvr_remove);

View File

@@ -804,25 +804,12 @@ int stmmac_pltfr_probe(struct platform_device *pdev,
struct plat_stmmacenet_data *plat,
struct stmmac_resources *res)
{
struct device *dev = &pdev->dev;
int ret;
if (!plat->suspend && plat->exit)
plat->suspend = stmmac_plat_suspend;
if (!plat->resume && plat->init)
plat->resume = stmmac_plat_resume;
ret = stmmac_pltfr_init(dev, plat);
if (ret)
return ret;
ret = stmmac_dvr_probe(dev, plat, res);
if (ret) {
stmmac_pltfr_exit(dev, plat);
return ret;
}
return ret;
return stmmac_dvr_probe(&pdev->dev, plat, res);
}
EXPORT_SYMBOL_GPL(stmmac_pltfr_probe);
@@ -864,13 +851,7 @@ EXPORT_SYMBOL_GPL(devm_stmmac_pltfr_probe);
*/
void stmmac_pltfr_remove(struct platform_device *pdev)
{
struct net_device *ndev = platform_get_drvdata(pdev);
struct stmmac_priv *priv = netdev_priv(ndev);
struct plat_stmmacenet_data *plat = priv->plat;
struct device *dev = &pdev->dev;
stmmac_dvr_remove(dev);
stmmac_pltfr_exit(dev, plat);
stmmac_dvr_remove(&pdev->dev);
}
EXPORT_SYMBOL_GPL(stmmac_pltfr_remove);