diff options
Diffstat (limited to 'drivers/net/phy/phy_device.c')
| -rw-r--r-- | drivers/net/phy/phy_device.c | 10 | 
1 files changed, 2 insertions, 8 deletions
diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c index 3f8a64fb9d71..1785f1cead97 100644 --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c @@ -3098,8 +3098,6 @@ static int phy_probe(struct device *dev)  	if (phydrv->flags & PHY_IS_INTERNAL)  		phydev->is_internal = true; -	mutex_lock(&phydev->lock); -  	/* Deassert the reset signal */  	phy_device_reset(phydev, 0); @@ -3146,7 +3144,7 @@ static int phy_probe(struct device *dev)  	 */  	err = genphy_c45_read_eee_adv(phydev, phydev->advertising_eee);  	if (err) -		return err; +		goto out;  	/* There is no "enabled" flag. If PHY is advertising, assume it is  	 * kind of enabled. @@ -3188,12 +3186,10 @@ static int phy_probe(struct device *dev)  	phydev->state = PHY_READY;  out: -	/* Assert the reset signal */ +	/* Re-assert the reset signal on error */  	if (err)  		phy_device_reset(phydev, 1); -	mutex_unlock(&phydev->lock); -  	return err;  } @@ -3203,9 +3199,7 @@ static int phy_remove(struct device *dev)  	cancel_delayed_work_sync(&phydev->state_queue); -	mutex_lock(&phydev->lock);  	phydev->state = PHY_DOWN; -	mutex_unlock(&phydev->lock);  	sfp_bus_del_upstream(phydev->sfp_bus);  	phydev->sfp_bus = NULL;  |