diff options
Diffstat (limited to 'drivers/net/phy/phy_device.c')
-rw-r--r-- | drivers/net/phy/phy_device.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c index 67f25ac29025..b15b31ca2618 100644 --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c | |||
@@ -135,7 +135,9 @@ static int mdio_bus_phy_resume(struct device *dev) | |||
135 | if (!mdio_bus_phy_may_suspend(phydev)) | 135 | if (!mdio_bus_phy_may_suspend(phydev)) |
136 | goto no_resume; | 136 | goto no_resume; |
137 | 137 | ||
138 | mutex_lock(&phydev->lock); | ||
138 | ret = phy_resume(phydev); | 139 | ret = phy_resume(phydev); |
140 | mutex_unlock(&phydev->lock); | ||
139 | if (ret < 0) | 141 | if (ret < 0) |
140 | return ret; | 142 | return ret; |
141 | 143 | ||
@@ -1026,7 +1028,9 @@ int phy_attach_direct(struct net_device *dev, struct phy_device *phydev, | |||
1026 | if (err) | 1028 | if (err) |
1027 | goto error; | 1029 | goto error; |
1028 | 1030 | ||
1031 | mutex_lock(&phydev->lock); | ||
1029 | phy_resume(phydev); | 1032 | phy_resume(phydev); |
1033 | mutex_unlock(&phydev->lock); | ||
1030 | phy_led_triggers_register(phydev); | 1034 | phy_led_triggers_register(phydev); |
1031 | 1035 | ||
1032 | return err; | 1036 | return err; |
@@ -1157,6 +1161,8 @@ int phy_resume(struct phy_device *phydev) | |||
1157 | struct phy_driver *phydrv = to_phy_driver(phydev->mdio.dev.driver); | 1161 | struct phy_driver *phydrv = to_phy_driver(phydev->mdio.dev.driver); |
1158 | int ret = 0; | 1162 | int ret = 0; |
1159 | 1163 | ||
1164 | WARN_ON(!mutex_is_locked(&phydev->lock)); | ||
1165 | |||
1160 | if (phydev->drv && phydrv->resume) | 1166 | if (phydev->drv && phydrv->resume) |
1161 | ret = phydrv->resume(phydev); | 1167 | ret = phydrv->resume(phydev); |
1162 | 1168 | ||
@@ -1639,13 +1645,9 @@ int genphy_resume(struct phy_device *phydev) | |||
1639 | { | 1645 | { |
1640 | int value; | 1646 | int value; |
1641 | 1647 | ||
1642 | mutex_lock(&phydev->lock); | ||
1643 | |||
1644 | value = phy_read(phydev, MII_BMCR); | 1648 | value = phy_read(phydev, MII_BMCR); |
1645 | phy_write(phydev, MII_BMCR, value & ~BMCR_PDOWN); | 1649 | phy_write(phydev, MII_BMCR, value & ~BMCR_PDOWN); |
1646 | 1650 | ||
1647 | mutex_unlock(&phydev->lock); | ||
1648 | |||
1649 | return 0; | 1651 | return 0; |
1650 | } | 1652 | } |
1651 | EXPORT_SYMBOL(genphy_resume); | 1653 | EXPORT_SYMBOL(genphy_resume); |