diff options
Diffstat (limited to 'drivers/net/phy/phy_device.c')
-rw-r--r-- | drivers/net/phy/phy_device.c | 9 |
1 files changed, 1 insertions, 8 deletions
diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c index 7d5b6d1838c8..8f01952c4850 100644 --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c | |||
@@ -208,16 +208,12 @@ struct phy_device *phy_attach(struct net_device *dev, | |||
208 | * exist, and we should use the genphy driver. */ | 208 | * exist, and we should use the genphy driver. */ |
209 | if (NULL == d->driver) { | 209 | if (NULL == d->driver) { |
210 | int err; | 210 | int err; |
211 | down_write(&d->bus->subsys.rwsem); | ||
212 | d->driver = &genphy_driver.driver; | 211 | d->driver = &genphy_driver.driver; |
213 | 212 | ||
214 | err = d->driver->probe(d); | 213 | err = d->driver->probe(d); |
215 | |||
216 | if (err >= 0) | 214 | if (err >= 0) |
217 | err = device_bind_driver(d); | 215 | err = device_bind_driver(d); |
218 | 216 | ||
219 | up_write(&d->bus->subsys.rwsem); | ||
220 | |||
221 | if (err) | 217 | if (err) |
222 | return ERR_PTR(err); | 218 | return ERR_PTR(err); |
223 | } | 219 | } |
@@ -258,11 +254,8 @@ void phy_detach(struct phy_device *phydev) | |||
258 | * was using the generic driver), we unbind the device | 254 | * was using the generic driver), we unbind the device |
259 | * from the generic driver so that there's a chance a | 255 | * from the generic driver so that there's a chance a |
260 | * real driver could be loaded */ | 256 | * real driver could be loaded */ |
261 | if (phydev->dev.driver == &genphy_driver.driver) { | 257 | if (phydev->dev.driver == &genphy_driver.driver) |
262 | down_write(&phydev->dev.bus->subsys.rwsem); | ||
263 | device_release_driver(&phydev->dev); | 258 | device_release_driver(&phydev->dev); |
264 | up_write(&phydev->dev.bus->subsys.rwsem); | ||
265 | } | ||
266 | } | 259 | } |
267 | EXPORT_SYMBOL(phy_detach); | 260 | EXPORT_SYMBOL(phy_detach); |
268 | 261 | ||