diff options
Diffstat (limited to 'drivers/net/phy/phy_device.c')
| -rw-r--r-- | drivers/net/phy/phy_device.c | 22 | 
1 files changed, 18 insertions, 4 deletions
diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c index 3fc91e89f5a5..bdfe51fc3a65 100644 --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c @@ -699,6 +699,7 @@ int phy_suspend(struct phy_device *phydev)  {  	struct phy_driver *phydrv = to_phy_driver(phydev->dev.driver);  	struct ethtool_wolinfo wol = { .cmd = ETHTOOL_GWOL }; +	int ret = 0;  	/* If the device has WOL enabled, we cannot suspend the PHY */  	phy_ethtool_get_wol(phydev, &wol); @@ -706,18 +707,31 @@ int phy_suspend(struct phy_device *phydev)  		return -EBUSY;  	if (phydrv->suspend) -		return phydrv->suspend(phydev); -	return 0; +		ret = phydrv->suspend(phydev); + +	if (ret) +		return ret; + +	phydev->suspended = true; + +	return ret;  }  EXPORT_SYMBOL(phy_suspend);  int phy_resume(struct phy_device *phydev)  {  	struct phy_driver *phydrv = to_phy_driver(phydev->dev.driver); +	int ret = 0;  	if (phydrv->resume) -		return phydrv->resume(phydev); -	return 0; +		ret = phydrv->resume(phydev); + +	if (ret) +		return ret; + +	phydev->suspended = false; + +	return ret;  }  EXPORT_SYMBOL(phy_resume);  | 

