aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/phy/phy_device.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/phy/phy_device.c')
-rw-r--r--drivers/net/phy/phy_device.c9
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}
267EXPORT_SYMBOL(phy_detach); 260EXPORT_SYMBOL(phy_detach);
268 261