]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net: stmmac: ingenic: convert to stmmac_pltfr_pm_ops
authorRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Mon, 14 Apr 2025 15:51:01 +0000 (16:51 +0100)
committerJakub Kicinski <kuba@kernel.org>
Tue, 15 Apr 2025 15:36:54 +0000 (08:36 -0700)
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>
drivers/net/ethernet/stmicro/stmmac/dwmac-ingenic.c

index 066783d6642288023ae9ea7281a1eabbfd60109b..607e467324a4a996adc79c841d1294a05b1fb44a 100644 (file)
@@ -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,
        },
 };