net: ethernet: stmmac: dwmac-rk: fix optional phy regulator handling
authorSebastian Reichel <sebastian.reichel@collabora.com>
Fri, 7 Apr 2023 16:11:29 +0000 (18:11 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 11 May 2023 14:03:21 +0000 (23:03 +0900)
[ Upstream commit db21973263f8c56750cb610f1d5e8bee00a513b9 ]

The usual devm_regulator_get() call already handles "optional"
regulators by returning a valid dummy and printing a warning
that the dummy regulator should be described properly. This
code open coded the same behaviour, but masked any errors that
are not -EPROBE_DEFER and is quite noisy.

This change effectively unmasks and propagates regulators errors
not involving -ENODEV, downgrades the error print to warning level
if no regulator is specified and captures the probe defer message
for /sys/kernel/debug/devices_deferred.

Fixes: 2e12f536635f ("net: stmmac: dwmac-rk: Use standard devicetree property for phy regulator")
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c

index 21954b3..cf682a9 100644 (file)
@@ -1586,9 +1586,6 @@ static int phy_power_on(struct rk_priv_data *bsp_priv, bool enable)
        int ret;
        struct device *dev = &bsp_priv->pdev->dev;
 
-       if (!ldo)
-               return 0;
-
        if (enable) {
                ret = regulator_enable(ldo);
                if (ret)
@@ -1636,14 +1633,11 @@ static struct rk_priv_data *rk_gmac_setup(struct platform_device *pdev,
                }
        }
 
-       bsp_priv->regulator = devm_regulator_get_optional(dev, "phy");
+       bsp_priv->regulator = devm_regulator_get(dev, "phy");
        if (IS_ERR(bsp_priv->regulator)) {
-               if (PTR_ERR(bsp_priv->regulator) == -EPROBE_DEFER) {
-                       dev_err(dev, "phy regulator is not available yet, deferred probing\n");
-                       return ERR_PTR(-EPROBE_DEFER);
-               }
-               dev_err(dev, "no regulator found\n");
-               bsp_priv->regulator = NULL;
+               ret = PTR_ERR(bsp_priv->regulator);
+               dev_err_probe(dev, ret, "failed to get phy regulator\n");
+               return ERR_PTR(ret);
        }
 
        ret = of_property_read_string(dev->of_node, "clock_in_out", &strings);