aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/phy/dp83640.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/drivers/net/phy/dp83640.c b/drivers/net/phy/dp83640.c
index 654f42d00092..a6c87793d899 100644
--- a/drivers/net/phy/dp83640.c
+++ b/drivers/net/phy/dp83640.c
@@ -1207,6 +1207,23 @@ static void dp83640_remove(struct phy_device *phydev)
1207 kfree(dp83640); 1207 kfree(dp83640);
1208} 1208}
1209 1209
1210static int dp83640_soft_reset(struct phy_device *phydev)
1211{
1212 int ret;
1213
1214 ret = genphy_soft_reset(phydev);
1215 if (ret < 0)
1216 return ret;
1217
1218 /* From DP83640 datasheet: "Software driver code must wait 3 us
1219 * following a software reset before allowing further serial MII
1220 * operations with the DP83640."
1221 */
1222 udelay(10); /* Taking udelay inaccuracy into account */
1223
1224 return 0;
1225}
1226
1210static int dp83640_config_init(struct phy_device *phydev) 1227static int dp83640_config_init(struct phy_device *phydev)
1211{ 1228{
1212 struct dp83640_private *dp83640 = phydev->priv; 1229 struct dp83640_private *dp83640 = phydev->priv;
@@ -1501,6 +1518,7 @@ static struct phy_driver dp83640_driver = {
1501 .flags = PHY_HAS_INTERRUPT, 1518 .flags = PHY_HAS_INTERRUPT,
1502 .probe = dp83640_probe, 1519 .probe = dp83640_probe,
1503 .remove = dp83640_remove, 1520 .remove = dp83640_remove,
1521 .soft_reset = dp83640_soft_reset,
1504 .config_init = dp83640_config_init, 1522 .config_init = dp83640_config_init,
1505 .ack_interrupt = dp83640_ack_interrupt, 1523 .ack_interrupt = dp83640_ack_interrupt,
1506 .config_intr = dp83640_config_intr, 1524 .config_intr = dp83640_config_intr,