Commit 59e227e2 authored by Detlev Casanova's avatar Detlev Casanova Committed by David S. Miller

net: phy: realtek: Disable clock on suspend

For PHYs that call rtl821x_probe() where an external clock can be
configured, make sure that the clock is disabled
when ->suspend() is called and enabled on resume.

The PHY_ALWAYS_CALL_SUSPEND is added to ensure that the suspend function
is actually always called.
Reviewed-by: default avatarFlorian Fainelli <florian.fainelli@broadcom.com>
Signed-off-by: default avatarDetlev Casanova <detlev.casanova@collabora.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 350b7a25
...@@ -426,10 +426,31 @@ static int rtl8211f_config_init(struct phy_device *phydev) ...@@ -426,10 +426,31 @@ static int rtl8211f_config_init(struct phy_device *phydev)
return genphy_soft_reset(phydev); return genphy_soft_reset(phydev);
} }
static int rtl821x_suspend(struct phy_device *phydev)
{
struct rtl821x_priv *priv = phydev->priv;
int ret = 0;
if (!phydev->wol_enabled) {
ret = genphy_suspend(phydev);
if (ret)
return ret;
clk_disable_unprepare(priv->clk);
}
return ret;
}
static int rtl821x_resume(struct phy_device *phydev) static int rtl821x_resume(struct phy_device *phydev)
{ {
struct rtl821x_priv *priv = phydev->priv;
int ret; int ret;
if (!phydev->wol_enabled)
clk_prepare_enable(priv->clk);
ret = genphy_resume(phydev); ret = genphy_resume(phydev);
if (ret < 0) if (ret < 0)
return ret; return ret;
...@@ -934,10 +955,11 @@ static struct phy_driver realtek_drvs[] = { ...@@ -934,10 +955,11 @@ static struct phy_driver realtek_drvs[] = {
.read_status = rtlgen_read_status, .read_status = rtlgen_read_status,
.config_intr = &rtl8211f_config_intr, .config_intr = &rtl8211f_config_intr,
.handle_interrupt = rtl8211f_handle_interrupt, .handle_interrupt = rtl8211f_handle_interrupt,
.suspend = genphy_suspend, .suspend = rtl821x_suspend,
.resume = rtl821x_resume, .resume = rtl821x_resume,
.read_page = rtl821x_read_page, .read_page = rtl821x_read_page,
.write_page = rtl821x_write_page, .write_page = rtl821x_write_page,
.flags = PHY_ALWAYS_CALL_SUSPEND,
}, { }, {
PHY_ID_MATCH_EXACT(RTL_8211FVD_PHYID), PHY_ID_MATCH_EXACT(RTL_8211FVD_PHYID),
.name = "RTL8211F-VD Gigabit Ethernet", .name = "RTL8211F-VD Gigabit Ethernet",
...@@ -946,10 +968,11 @@ static struct phy_driver realtek_drvs[] = { ...@@ -946,10 +968,11 @@ static struct phy_driver realtek_drvs[] = {
.read_status = rtlgen_read_status, .read_status = rtlgen_read_status,
.config_intr = &rtl8211f_config_intr, .config_intr = &rtl8211f_config_intr,
.handle_interrupt = rtl8211f_handle_interrupt, .handle_interrupt = rtl8211f_handle_interrupt,
.suspend = genphy_suspend, .suspend = rtl821x_suspend,
.resume = rtl821x_resume, .resume = rtl821x_resume,
.read_page = rtl821x_read_page, .read_page = rtl821x_read_page,
.write_page = rtl821x_write_page, .write_page = rtl821x_write_page,
.flags = PHY_ALWAYS_CALL_SUSPEND,
}, { }, {
.name = "Generic FE-GE Realtek PHY", .name = "Generic FE-GE Realtek PHY",
.match_phy_device = rtlgen_match_phy_device, .match_phy_device = rtlgen_match_phy_device,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment