diff options
Diffstat (limited to 'drivers/net/phy/dp83tc811.c')
| -rw-r--r-- | drivers/net/phy/dp83tc811.c | 21 | 
1 files changed, 12 insertions, 9 deletions
diff --git a/drivers/net/phy/dp83tc811.c b/drivers/net/phy/dp83tc811.c index 06f08832ebcd..d73725312c7c 100644 --- a/drivers/net/phy/dp83tc811.c +++ b/drivers/net/phy/dp83tc811.c @@ -139,16 +139,19 @@ static int dp83811_set_wol(struct phy_device *phydev,  			value &= ~DP83811_WOL_SECURE_ON;  		} -		value |= (DP83811_WOL_EN | DP83811_WOL_INDICATION_SEL | -			  DP83811_WOL_CLR_INDICATION); -		phy_write_mmd(phydev, DP83811_DEVADDR, MII_DP83811_WOL_CFG, -			      value); +		/* Clear any pending WoL interrupt */ +		phy_read(phydev, MII_DP83811_INT_STAT1); + +		value |= DP83811_WOL_EN | DP83811_WOL_INDICATION_SEL | +			 DP83811_WOL_CLR_INDICATION; + +		return phy_write_mmd(phydev, DP83811_DEVADDR, +				     MII_DP83811_WOL_CFG, value);  	} else { -		phy_clear_bits_mmd(phydev, DP83811_DEVADDR, MII_DP83811_WOL_CFG, -				   DP83811_WOL_EN); +		return phy_clear_bits_mmd(phydev, DP83811_DEVADDR, +					  MII_DP83811_WOL_CFG, DP83811_WOL_EN);  	} -	return 0;  }  static void dp83811_get_wol(struct phy_device *phydev, @@ -292,8 +295,8 @@ static int dp83811_config_init(struct phy_device *phydev)  	value = DP83811_WOL_MAGIC_EN | DP83811_WOL_SECURE_ON | DP83811_WOL_EN; -	return phy_write_mmd(phydev, DP83811_DEVADDR, MII_DP83811_WOL_CFG, -	      value); +	return phy_clear_bits_mmd(phydev, DP83811_DEVADDR, MII_DP83811_WOL_CFG, +				  value);  }  static int dp83811_phy_reset(struct phy_device *phydev)  | 
