123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- From: Russell King <[email protected]>
- Date: Fri, 13 Jan 2017 11:17:30 +0000
- Subject: [PATCH] net: phy: hook up clause 45 autonegotiation restart
- genphy_restart_aneg() can only restart autonegotiation on clause 22
- PHYs. Add a phy_restart_aneg() function which selects between the
- clause 22 and clause 45 restart functionality depending on the PHY
- type.
- Signed-off-by: Russell King <[email protected]>
- ---
- --- a/drivers/net/phy/phy.c
- +++ b/drivers/net/phy/phy.c
- @@ -134,6 +134,24 @@ static int phy_config_interrupt(struct p
- return 0;
- }
-
- +/**
- + * phy_restart_aneg - restart auto-negotiation
- + * @phydev: target phy_device struct
- + *
- + * Restart the autonegotiation on @phydev. Returns >= 0 on success or
- + * negative errno on error.
- + */
- +static int phy_restart_aneg(struct phy_device *phydev)
- +{
- + int ret;
- +
- + if (phydev->is_c45)
- + ret = genphy_c45_restart_aneg(phydev);
- + else
- + ret = genphy_restart_aneg(phydev);
- +
- + return ret;
- +}
-
- /**
- * phy_aneg_done - return auto-negotiation status
- @@ -1442,3 +1460,14 @@ int phy_ethtool_set_link_ksettings(struc
- return phy_ethtool_ksettings_set(phydev, cmd);
- }
- EXPORT_SYMBOL(phy_ethtool_set_link_ksettings);
- +
- +int phy_ethtool_nway_reset(struct net_device *ndev)
- +{
- + struct phy_device *phydev = ndev->phydev;
- +
- + if (!phydev)
- + return -ENODEV;
- +
- + return phy_restart_aneg(phydev);
- +}
- +EXPORT_SYMBOL(phy_ethtool_nway_reset);
|