Merge branch 'at803x-wol'
Li Yang says: ==================== fix at803x wol setting v3: Break long lines Add back error checking of phy_read v4: Disable WoL in 1588 register for AR8031 in probe ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
1733d0be68
@ -459,21 +459,27 @@ static int at803x_set_wol(struct phy_device *phydev,
|
||||
phy_write_mmd(phydev, MDIO_MMD_PCS, offsets[i],
|
||||
mac[(i * 2) + 1] | (mac[(i * 2)] << 8));
|
||||
|
||||
/* Enable WOL function */
|
||||
ret = phy_modify_mmd(phydev, MDIO_MMD_PCS, AT803X_PHY_MMD3_WOL_CTRL,
|
||||
0, AT803X_WOL_EN);
|
||||
if (ret)
|
||||
return ret;
|
||||
/* Enable WOL function for 1588 */
|
||||
if (phydev->drv->phy_id == ATH8031_PHY_ID) {
|
||||
ret = phy_modify_mmd(phydev, MDIO_MMD_PCS,
|
||||
AT803X_PHY_MMD3_WOL_CTRL,
|
||||
0, AT803X_WOL_EN);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
/* Enable WOL interrupt */
|
||||
ret = phy_modify(phydev, AT803X_INTR_ENABLE, 0, AT803X_INTR_ENABLE_WOL);
|
||||
if (ret)
|
||||
return ret;
|
||||
} else {
|
||||
/* Disable WoL function */
|
||||
ret = phy_modify_mmd(phydev, MDIO_MMD_PCS, AT803X_PHY_MMD3_WOL_CTRL,
|
||||
AT803X_WOL_EN, 0);
|
||||
if (ret)
|
||||
return ret;
|
||||
/* Disable WoL function for 1588 */
|
||||
if (phydev->drv->phy_id == ATH8031_PHY_ID) {
|
||||
ret = phy_modify_mmd(phydev, MDIO_MMD_PCS,
|
||||
AT803X_PHY_MMD3_WOL_CTRL,
|
||||
AT803X_WOL_EN, 0);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
/* Disable WOL interrupt */
|
||||
ret = phy_modify(phydev, AT803X_INTR_ENABLE, AT803X_INTR_ENABLE_WOL, 0);
|
||||
if (ret)
|
||||
@ -508,11 +514,11 @@ static void at803x_get_wol(struct phy_device *phydev,
|
||||
wol->supported = WAKE_MAGIC;
|
||||
wol->wolopts = 0;
|
||||
|
||||
value = phy_read_mmd(phydev, MDIO_MMD_PCS, AT803X_PHY_MMD3_WOL_CTRL);
|
||||
value = phy_read(phydev, AT803X_INTR_ENABLE);
|
||||
if (value < 0)
|
||||
return;
|
||||
|
||||
if (value & AT803X_WOL_EN)
|
||||
if (value & AT803X_INTR_ENABLE_WOL)
|
||||
wol->wolopts |= WAKE_MAGIC;
|
||||
}
|
||||
|
||||
@ -858,9 +864,6 @@ static int at803x_probe(struct phy_device *phydev)
|
||||
if (phydev->drv->phy_id == ATH8031_PHY_ID) {
|
||||
int ccr = phy_read(phydev, AT803X_REG_CHIP_CONFIG);
|
||||
int mode_cfg;
|
||||
struct ethtool_wolinfo wol = {
|
||||
.wolopts = 0,
|
||||
};
|
||||
|
||||
if (ccr < 0)
|
||||
return ccr;
|
||||
@ -877,12 +880,14 @@ static int at803x_probe(struct phy_device *phydev)
|
||||
break;
|
||||
}
|
||||
|
||||
/* Disable WOL by default */
|
||||
ret = at803x_set_wol(phydev, &wol);
|
||||
if (ret < 0) {
|
||||
phydev_err(phydev, "failed to disable WOL on probe: %d\n", ret);
|
||||
/* Disable WoL in 1588 register which is enabled
|
||||
* by default
|
||||
*/
|
||||
ret = phy_modify_mmd(phydev, MDIO_MMD_PCS,
|
||||
AT803X_PHY_MMD3_WOL_CTRL,
|
||||
AT803X_WOL_EN, 0);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -2059,8 +2064,6 @@ static struct phy_driver at803x_driver[] = {
|
||||
.flags = PHY_POLL_CABLE_TEST,
|
||||
.config_init = at803x_config_init,
|
||||
.link_change_notify = at803x_link_change_notify,
|
||||
.set_wol = at803x_set_wol,
|
||||
.get_wol = at803x_get_wol,
|
||||
.suspend = at803x_suspend,
|
||||
.resume = at803x_resume,
|
||||
/* PHY_BASIC_FEATURES */
|
||||
|
Loading…
x
Reference in New Issue
Block a user