diff options
| -rw-r--r-- | drivers/net/phy/dp83640.c | 18 |
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 | ||
| 1210 | static 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 | |||
| 1210 | static int dp83640_config_init(struct phy_device *phydev) | 1227 | static 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, |
