OSDN Git Service

net: stmmac: dwmac-qco-ethqos: use devm_stmmac_probe_config_dt()
authorBartosz Golaszewski <bartosz.golaszewski@linaro.org>
Fri, 23 Jun 2023 10:04:15 +0000 (12:04 +0200)
committerJakub Kicinski <kuba@kernel.org>
Sat, 24 Jun 2023 22:36:00 +0000 (15:36 -0700)
Significantly simplify the driver's probe() function by using the devres
variant of stmmac_probe_config_dt(). This allows to drop the goto jumps
entirely.

The remove_new() callback now needs to be switched to
stmmac_pltfr_remove_no_dt().

Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Link: https://lore.kernel.org/r/20230623100417.93592-10-brgl@bgdev.pl
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c

index fa0fc53..7b9fbcb 100644 (file)
@@ -708,7 +708,7 @@ static int qcom_ethqos_probe(struct platform_device *pdev)
        if (ret)
                return ret;
 
-       plat_dat = stmmac_probe_config_dt(pdev, stmmac_res.mac);
+       plat_dat = devm_stmmac_probe_config_dt(pdev, stmmac_res.mac);
        if (IS_ERR(plat_dat)) {
                dev_err(dev, "dt configuration failed\n");
                return PTR_ERR(plat_dat);
@@ -717,10 +717,8 @@ static int qcom_ethqos_probe(struct platform_device *pdev)
        plat_dat->clks_config = ethqos_clks_config;
 
        ethqos = devm_kzalloc(dev, sizeof(*ethqos), GFP_KERNEL);
-       if (!ethqos) {
-               ret = -ENOMEM;
-               goto out_config_dt;
-       }
+       if (!ethqos)
+               return -ENOMEM;
 
        ethqos->phy_mode = device_get_phy_mode(dev);
        switch (ethqos->phy_mode) {
@@ -734,19 +732,15 @@ static int qcom_ethqos_probe(struct platform_device *pdev)
                ethqos->configure_func = ethqos_configure_sgmii;
                break;
        case -ENODEV:
-               ret = -ENODEV;
-               goto out_config_dt;
+               return -ENODEV;
        default:
-               ret = -EINVAL;
-               goto out_config_dt;
+               return -EINVAL;
        }
 
        ethqos->pdev = pdev;
        ethqos->rgmii_base = devm_platform_ioremap_resource_byname(pdev, "rgmii");
-       if (IS_ERR(ethqos->rgmii_base)) {
-               ret = PTR_ERR(ethqos->rgmii_base);
-               goto out_config_dt;
-       }
+       if (IS_ERR(ethqos->rgmii_base))
+               return PTR_ERR(ethqos->rgmii_base);
 
        ethqos->mac_base = stmmac_res.addr;
 
@@ -757,24 +751,20 @@ static int qcom_ethqos_probe(struct platform_device *pdev)
        ethqos->has_emac_ge_3 = data->has_emac_ge_3;
 
        ethqos->link_clk = devm_clk_get(dev, data->link_clk_name ?: "rgmii");
-       if (IS_ERR(ethqos->link_clk)) {
-               ret = PTR_ERR(ethqos->link_clk);
-               goto out_config_dt;
-       }
+       if (IS_ERR(ethqos->link_clk))
+               return PTR_ERR(ethqos->link_clk);
 
        ret = ethqos_clks_config(ethqos, true);
        if (ret)
-               goto out_config_dt;
+               return ret;
 
        ret = devm_add_action_or_reset(dev, ethqos_clks_disable, ethqos);
        if (ret)
-               goto out_config_dt;
+               return ret;
 
        ethqos->serdes_phy = devm_phy_optional_get(dev, "serdes");
-       if (IS_ERR(ethqos->serdes_phy)) {
-               ret = PTR_ERR(ethqos->serdes_phy);
-               goto out_config_dt;
-       }
+       if (IS_ERR(ethqos->serdes_phy))
+               return PTR_ERR(ethqos->serdes_phy);
 
        ethqos->speed = SPEED_1000;
        ethqos_update_link_clk(ethqos, SPEED_1000);
@@ -797,16 +787,7 @@ static int qcom_ethqos_probe(struct platform_device *pdev)
                plat_dat->serdes_powerdown  = qcom_ethqos_serdes_powerdown;
        }
 
-       ret = stmmac_dvr_probe(dev, plat_dat, &stmmac_res);
-       if (ret)
-               goto out_config_dt;
-
-       return ret;
-
-out_config_dt:
-       stmmac_remove_config_dt(pdev, plat_dat);
-
-       return ret;
+       return stmmac_dvr_probe(dev, plat_dat, &stmmac_res);
 }
 
 static const struct of_device_id qcom_ethqos_match[] = {
@@ -820,7 +801,7 @@ MODULE_DEVICE_TABLE(of, qcom_ethqos_match);
 
 static struct platform_driver qcom_ethqos_driver = {
        .probe  = qcom_ethqos_probe,
-       .remove_new = stmmac_pltfr_remove,
+       .remove_new = stmmac_pltfr_remove_no_dt,
        .driver = {
                .name           = "qcom-ethqos",
                .pm             = &stmmac_pltfr_pm_ops,