net: phy: convert read-modify-write to phy_modify()
Convert read-modify-write sequences in at803x, Marvell and core phylib to use phy_modify() to ensure safety. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
2b74e5be17
commit
fea23fb591
@@ -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);
|
||||
|
||||
|
Reference in New Issue
Block a user