mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-16 17:23:55 +08:00
net: phy: provide phy_resume/phy_suspend helpers
This adds helper functions to resume and suspend a given phy_device by calling the corresponding driver callbacks if available. Signed-off-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com> Acked-by: Mugunthan V N <mugunthanvnm@ti.com> Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
0898b448b3
commit
481b5d938b
@ -679,6 +679,30 @@ void phy_detach(struct phy_device *phydev)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL(phy_detach);
|
EXPORT_SYMBOL(phy_detach);
|
||||||
|
|
||||||
|
int phy_suspend(struct phy_device *phydev)
|
||||||
|
{
|
||||||
|
struct phy_driver *phydrv = to_phy_driver(phydev->dev.driver);
|
||||||
|
struct ethtool_wolinfo wol;
|
||||||
|
|
||||||
|
/* If the device has WOL enabled, we cannot suspend the PHY */
|
||||||
|
wol.cmd = ETHTOOL_GWOL;
|
||||||
|
phy_ethtool_get_wol(phydev, &wol);
|
||||||
|
if (wol.wolopts)
|
||||||
|
return -EBUSY;
|
||||||
|
|
||||||
|
if (phydrv->suspend)
|
||||||
|
return phydrv->suspend(phydev);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int phy_resume(struct phy_device *phydev)
|
||||||
|
{
|
||||||
|
struct phy_driver *phydrv = to_phy_driver(phydev->dev.driver);
|
||||||
|
|
||||||
|
if (phydrv->resume)
|
||||||
|
return phydrv->resume(phydev);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* Generic PHY support and helper functions */
|
/* Generic PHY support and helper functions */
|
||||||
|
|
||||||
|
@ -548,6 +548,8 @@ struct phy_device *phy_device_create(struct mii_bus *bus, int addr, int phy_id,
|
|||||||
struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45);
|
struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45);
|
||||||
int phy_device_register(struct phy_device *phy);
|
int phy_device_register(struct phy_device *phy);
|
||||||
int phy_init_hw(struct phy_device *phydev);
|
int phy_init_hw(struct phy_device *phydev);
|
||||||
|
int phy_suspend(struct phy_device *phydev);
|
||||||
|
int phy_resume(struct phy_device *phydev);
|
||||||
struct phy_device * phy_attach(struct net_device *dev,
|
struct phy_device * phy_attach(struct net_device *dev,
|
||||||
const char *bus_id, phy_interface_t interface);
|
const char *bus_id, phy_interface_t interface);
|
||||||
struct phy_device *phy_find_first(struct mii_bus *bus);
|
struct phy_device *phy_find_first(struct mii_bus *bus);
|
||||||
|
Loading…
Reference in New Issue
Block a user