mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-09 07:51:16 -04:00
net: stmmac: ingenic: convert to stmmac_pltfr_pm_ops
Convert the Ingenic glue driver to use the generic stmmac platform power management operations. In order to do this, we need to make ingenic_mac_init() arguments compatible with plat_dat->init() by adding a plat_dat member to struct ingenic_mac. This allows the custom suspend/resume operations to be removed, and the PM ops pointer replaced with stmmac_pltfr_pm_ops. This will adds runtime PM and noirq suspend/resume ops to this driver. Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Link: https://patch.msgid.link/E1u4M5N-000YGD-5i@rmk-PC.armlinux.org.uk Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
b2ee4451c1
commit
debfcb3f58
@@ -56,6 +56,7 @@ enum ingenic_mac_version {
|
||||
|
||||
struct ingenic_mac {
|
||||
const struct ingenic_soc_info *soc_info;
|
||||
struct plat_stmmacenet_data *plat_dat;
|
||||
struct device *dev;
|
||||
struct regmap *regmap;
|
||||
|
||||
@@ -70,13 +71,13 @@ struct ingenic_soc_info {
|
||||
int (*set_mode)(struct plat_stmmacenet_data *plat_dat);
|
||||
};
|
||||
|
||||
static int ingenic_mac_init(struct plat_stmmacenet_data *plat_dat)
|
||||
static int ingenic_mac_init(struct platform_device *pdev, void *bsp_priv)
|
||||
{
|
||||
struct ingenic_mac *mac = plat_dat->bsp_priv;
|
||||
struct ingenic_mac *mac = bsp_priv;
|
||||
int ret;
|
||||
|
||||
if (mac->soc_info->set_mode) {
|
||||
ret = mac->soc_info->set_mode(plat_dat);
|
||||
ret = mac->soc_info->set_mode(mac->plat_dat);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
@@ -284,44 +285,18 @@ static int ingenic_mac_probe(struct platform_device *pdev)
|
||||
|
||||
mac->soc_info = data;
|
||||
mac->dev = &pdev->dev;
|
||||
mac->plat_dat = plat_dat;
|
||||
|
||||
plat_dat->bsp_priv = mac;
|
||||
plat_dat->init = ingenic_mac_init;
|
||||
|
||||
ret = ingenic_mac_init(plat_dat);
|
||||
ret = ingenic_mac_init(pdev, mac);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
return stmmac_dvr_probe(&pdev->dev, plat_dat, &stmmac_res);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
static int ingenic_mac_suspend(struct device *dev)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = stmmac_suspend(dev);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int ingenic_mac_resume(struct device *dev)
|
||||
{
|
||||
struct net_device *ndev = dev_get_drvdata(dev);
|
||||
struct stmmac_priv *priv = netdev_priv(ndev);
|
||||
int ret;
|
||||
|
||||
ret = ingenic_mac_init(priv->plat);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = stmmac_resume(dev);
|
||||
|
||||
return ret;
|
||||
}
|
||||
#endif /* CONFIG_PM_SLEEP */
|
||||
|
||||
static SIMPLE_DEV_PM_OPS(ingenic_mac_pm_ops, ingenic_mac_suspend, ingenic_mac_resume);
|
||||
|
||||
static struct ingenic_soc_info jz4775_soc_info = {
|
||||
.version = ID_JZ4775,
|
||||
.mask = MACPHYC_TXCLK_SEL_MASK | MACPHYC_SOFT_RST_MASK | MACPHYC_PHY_INFT_MASK,
|
||||
@@ -373,7 +348,7 @@ static struct platform_driver ingenic_mac_driver = {
|
||||
.remove = stmmac_pltfr_remove,
|
||||
.driver = {
|
||||
.name = "ingenic-mac",
|
||||
.pm = pm_ptr(&ingenic_mac_pm_ops),
|
||||
.pm = &stmmac_pltfr_pm_ops,
|
||||
.of_match_table = ingenic_mac_of_matches,
|
||||
},
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user