diff options
author | Oleksij Rempel <o.rempel@pengutronix.de> | 2021-04-19 16:01:01 +0300 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2021-04-21 02:08:02 +0300 |
commit | f4f86d8d2c04bc0c90f8d944a1fcc30349ba01b3 (patch) | |
tree | e95b580434e214b83a5d5cbf47eb7f6e14e0d13d /drivers/net/phy | |
parent | e9377a911d772d27ef2810c241154ba479bad368 (diff) | |
download | linux-f4f86d8d2c04bc0c90f8d944a1fcc30349ba01b3.tar.xz |
net: phy: execute genphy_loopback() per default on all PHYs
The generic loopback is really generic and is defined by the 802.3
standard, we should just mandate that drivers implement a custom
loopback if the generic one cannot work.
Suggested-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/phy')
-rw-r--r-- | drivers/net/phy/phy_device.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c index 73d29fd5e03d..320a3e5cd10a 100644 --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c @@ -1777,6 +1777,9 @@ int phy_loopback(struct phy_device *phydev, bool enable) struct phy_driver *phydrv = to_phy_driver(phydev->mdio.dev.driver); int ret = 0; + if (!phydrv) + return -ENODEV; + mutex_lock(&phydev->lock); if (enable && phydev->loopback_enabled) { @@ -1789,10 +1792,10 @@ int phy_loopback(struct phy_device *phydev, bool enable) goto out; } - if (phydev->drv && phydrv->set_loopback) + if (phydrv->set_loopback) ret = phydrv->set_loopback(phydev, enable); else - ret = -EOPNOTSUPP; + ret = genphy_loopback(phydev, enable); if (ret) goto out; |