Skip to content

Commit 600ac36

Browse files
Dan Murphydavem330
authored andcommitted
net: phy: DP83822: Fix WoL in config init to be disabled
The WoL feature should be disabled when config_init is called and the feature should turned on or off when set_wol is called. In addition updated the calls to modify the registers to use the set_bit and clear_bit function calls. Fixes: 3b427751a9d0 ("net: phy: DP83822 initial driver submission") Signed-off-by: Dan Murphy <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 8f34e53 commit 600ac36

File tree

1 file changed

+14
-16
lines changed

1 file changed

+14
-16
lines changed

drivers/net/phy/dp83822.c

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -137,19 +137,18 @@ static int dp83822_set_wol(struct phy_device *phydev,
137137
value &= ~DP83822_WOL_SECURE_ON;
138138
}
139139

140-
value |= (DP83822_WOL_EN | DP83822_WOL_INDICATION_SEL |
141-
DP83822_WOL_CLR_INDICATION);
142-
phy_write_mmd(phydev, DP83822_DEVADDR, MII_DP83822_WOL_CFG,
143-
value);
140+
/* Clear any pending WoL interrupt */
141+
phy_read(phydev, MII_DP83822_MISR2);
142+
143+
value |= DP83822_WOL_EN | DP83822_WOL_INDICATION_SEL |
144+
DP83822_WOL_CLR_INDICATION;
145+
146+
return phy_write_mmd(phydev, DP83822_DEVADDR,
147+
MII_DP83822_WOL_CFG, value);
144148
} else {
145-
value = phy_read_mmd(phydev, DP83822_DEVADDR,
146-
MII_DP83822_WOL_CFG);
147-
value &= ~DP83822_WOL_EN;
148-
phy_write_mmd(phydev, DP83822_DEVADDR, MII_DP83822_WOL_CFG,
149-
value);
149+
return phy_clear_bits_mmd(phydev, DP83822_DEVADDR,
150+
MII_DP83822_WOL_CFG, DP83822_WOL_EN);
150151
}
151-
152-
return 0;
153152
}
154153

155154
static void dp83822_get_wol(struct phy_device *phydev,
@@ -258,12 +257,11 @@ static int dp83822_config_intr(struct phy_device *phydev)
258257

259258
static int dp83822_config_init(struct phy_device *phydev)
260259
{
261-
int value;
262-
263-
value = DP83822_WOL_MAGIC_EN | DP83822_WOL_SECURE_ON | DP83822_WOL_EN;
260+
int value = DP83822_WOL_EN | DP83822_WOL_MAGIC_EN |
261+
DP83822_WOL_SECURE_ON;
264262

265-
return phy_write_mmd(phydev, DP83822_DEVADDR, MII_DP83822_WOL_CFG,
266-
value);
263+
return phy_clear_bits_mmd(phydev, DP83822_DEVADDR,
264+
MII_DP83822_WOL_CFG, value);
267265
}
268266

269267
static int dp83822_phy_reset(struct phy_device *phydev)

0 commit comments

Comments
 (0)