diff options
Diffstat (limited to 'drivers/net/phy/phy_device.c')
| -rw-r--r-- | drivers/net/phy/phy_device.c | 50 | 
1 files changed, 9 insertions, 41 deletions
diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c index be13b5d6a8bf..6bd11a070ec8 100644 --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c @@ -1368,9 +1368,8 @@ static int genphy_config_eee_advert(struct phy_device *phydev)   */  int genphy_setup_forced(struct phy_device *phydev)  { -	int ctl = phy_read(phydev, MII_BMCR); +	u16 ctl = 0; -	ctl &= BMCR_LOOPBACK | BMCR_ISOLATE | BMCR_PDOWN;  	phydev->pause = 0;  	phydev->asym_pause = 0; @@ -1382,7 +1381,8 @@ int genphy_setup_forced(struct phy_device *phydev)  	if (DUPLEX_FULL == phydev->duplex)  		ctl |= BMCR_FULLDPLX; -	return phy_write(phydev, MII_BMCR, ctl); +	return phy_modify(phydev, MII_BMCR, +			  BMCR_LOOPBACK | BMCR_ISOLATE | BMCR_PDOWN, ctl);  }  EXPORT_SYMBOL(genphy_setup_forced); @@ -1392,17 +1392,9 @@ EXPORT_SYMBOL(genphy_setup_forced);   */  int genphy_restart_aneg(struct phy_device *phydev)  { -	int ctl = phy_read(phydev, MII_BMCR); - -	if (ctl < 0) -		return ctl; - -	ctl |= BMCR_ANENABLE | BMCR_ANRESTART; -  	/* Don't isolate the PHY if we're negotiating */ -	ctl &= ~BMCR_ISOLATE; - -	return phy_write(phydev, MII_BMCR, ctl); +	return phy_modify(phydev, MII_BMCR, BMCR_ISOLATE, +			  BMCR_ANENABLE | BMCR_ANRESTART);  }  EXPORT_SYMBOL(genphy_restart_aneg); @@ -1668,44 +1660,20 @@ EXPORT_SYMBOL(genphy_config_init);  int genphy_suspend(struct phy_device *phydev)  { -	int value; - -	mutex_lock(&phydev->lock); - -	value = phy_read(phydev, MII_BMCR); -	phy_write(phydev, MII_BMCR, value | BMCR_PDOWN); - -	mutex_unlock(&phydev->lock); - -	return 0; +	return phy_modify(phydev, MII_BMCR, 0, BMCR_PDOWN);  }  EXPORT_SYMBOL(genphy_suspend);  int genphy_resume(struct phy_device *phydev)  { -	int value; - -	value = phy_read(phydev, MII_BMCR); -	phy_write(phydev, MII_BMCR, value & ~BMCR_PDOWN); - -	return 0; +	return phy_modify(phydev, MII_BMCR, BMCR_PDOWN, 0);  }  EXPORT_SYMBOL(genphy_resume);  int genphy_loopback(struct phy_device *phydev, bool enable)  { -	int value; - -	value = phy_read(phydev, MII_BMCR); -	if (value < 0) -		return value; - -	if (enable) -		value |= BMCR_LOOPBACK; -	else -		value &= ~BMCR_LOOPBACK; - -	return phy_write(phydev, MII_BMCR, value); +	return phy_modify(phydev, MII_BMCR, BMCR_LOOPBACK, +			  enable ? BMCR_LOOPBACK : 0);  }  EXPORT_SYMBOL(genphy_loopback);  | 
