@@ -2569,7 +2569,6 @@ static struct phy_device *lan7801_phy_init(struct lan78xx_net *dev)
{
struct phy_device *phydev;
int ret;
- u32 buf;
phydev = phy_find_first(dev->mdiobus);
if (!phydev) {
@@ -2583,28 +2582,27 @@ static struct phy_device *lan7801_phy_init(struct lan78xx_net *dev)
if (ret < 0)
return ERR_PTR(ret);
- ret = lan78xx_read_reg(dev, HW_CFG, &buf);
- if (ret < 0)
- return ERR_PTR(ret);
-
- buf |= HW_CFG_CLK125_EN_;
- buf |= HW_CFG_REFCLK25_EN_;
- ret = lan78xx_write_reg(dev, HW_CFG, buf);
+ ret = lan78xx_update_reg(dev, HW_CFG, HW_CFG_CLK125_EN_ |
+ HW_CFG_REFCLK25_EN_,
+ HW_CFG_CLK125_EN_ | HW_CFG_REFCLK25_EN_);
if (ret < 0)
return ERR_PTR(ret);
} else {
if (!phydev->drv) {
netdev_err(dev->net, "no PHY driver found\n");
- return NULL;
+ return ERR_PTR(-ENODEV);
}
phydev->interface = PHY_INTERFACE_MODE_RGMII_ID;
/* The PHY driver is responsible to configure proper RGMII
* interface delays. Disable RGMII delays on MAC side.
*/
- lan78xx_write_reg(dev, MAC_RGMII_ID, 0);
+ ret = lan78xx_write_reg(dev, MAC_RGMII_ID, 0);
+ if (ret < 0)
+ return ERR_PTR(ret);
phydev->is_internal = false;
}
+
return phydev;
}
@@ -2673,7 +2671,7 @@ static int lan78xx_phy_init(struct lan78xx_net *dev)
phydev = phy_find_first(dev->mdiobus);
if (!phydev) {
netdev_err(dev->net, "no PHY found\n");
- return -EIO;
+ return -ENODEV;
}
phydev->is_internal = true;
phydev->interface = PHY_INTERFACE_MODE_GMII;
@@ -2681,7 +2679,7 @@ static int lan78xx_phy_init(struct lan78xx_net *dev)
default:
netdev_err(dev->net, "Unknown CHIP ID found\n");
- return -EIO;
+ return -ENODEV;
}
/* if phyirq is not set, use polling mode in phylib */
@@ -2695,7 +2693,7 @@ static int lan78xx_phy_init(struct lan78xx_net *dev)
if (ret) {
netdev_err(dev->net, "can't attach PHY to %s, error %pe\n",
dev->mdiobus->id, ERR_PTR(ret));
- return -EIO;
+ return ret;
}
phy_support_eee(phydev);
Ensure that return values from `lan78xx_write_reg()`, `lan78xx_read_reg()`, and `phy_find_first()` are properly checked and propagated. Use `ERR_PTR(ret)` for error reporting in `lan7801_phy_init()` and replace `-EIO` with `-ENODEV` where appropriate to provide more accurate error codes. Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de> --- changes v4: - split the patch and move part of it before PHYlink migration --- drivers/net/usb/lan78xx.c | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-)