mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
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:
committed by
Jakub Kicinski
parent
85081acc6b
commit
32da89a840
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user