net: phy: Support set_loopback override
authorGerhard Engleder <gerhard@engleder-embedded.com>
Thu, 19 Aug 2021 13:11:52 +0000 (15:11 +0200)
committerDavid S. Miller <davem@davemloft.net>
Fri, 20 Aug 2021 13:31:46 +0000 (14:31 +0100)
phy_read_status and various other PHY functions support PHY specific
overriding of driver functions by using a PHY specific pointer to the
PHY driver. Add support of PHY specific override to phy_loopback too.

Signed-off-by: Gerhard Engleder <gerhard@engleder-embedded.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/phy/phy_device.c

index 107aa6d..ba5ad86 100644 (file)
@@ -1821,11 +1821,10 @@ EXPORT_SYMBOL(phy_resume);
 
 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;
+       if (!phydev->drv)
+               return -EIO;
 
        mutex_lock(&phydev->lock);
 
@@ -1839,8 +1838,8 @@ int phy_loopback(struct phy_device *phydev, bool enable)
                goto out;
        }
 
-       if (phydrv->set_loopback)
-               ret = phydrv->set_loopback(phydev, enable);
+       if (phydev->drv->set_loopback)
+               ret = phydev->drv->set_loopback(phydev, enable);
        else
                ret = genphy_loopback(phydev, enable);