diff options
author | Roland Hieber <rhi@pengutronix.de> | 2023-06-05 14:57:47 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2023-06-06 11:53:47 +0200 |
commit | 049162a0aace356f299fa4425bda15947ebb7ead (patch) | |
tree | 2b373c96c9fea625a904eaa2e6b44361e066bd8b /drivers/net/phy/phy.c | |
parent | a3e42ff1571c8c52f5cc0f71c3749071bae6d498 (diff) | |
download | barebox-049162a0aace356f299fa4425bda15947ebb7ead.tar.gz barebox-049162a0aace356f299fa4425bda15947ebb7ead.tar.xz |
net: phy: add phy_modify_mmd_indirect convenience function
Add a read-modify-write convenience helper similar to phy_modify() for
setting single bits in MMD registers.
Signed-off-by: Roland Hieber <rhi@pengutronix.de>
Link: https://lore.barebox.org/20230605125748.3665121-1-rhi@pengutronix.de
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/net/phy/phy.c')
-rw-r--r-- | drivers/net/phy/phy.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c index dbc30b66b8..74381949b4 100644 --- a/drivers/net/phy/phy.c +++ b/drivers/net/phy/phy.c @@ -882,6 +882,29 @@ void phy_write_mmd_indirect(struct phy_device *phydev, int prtad, int devad, phy_write(phydev, MII_MMD_DATA, data); } +/** + * phy_modify_mmd_indirect - Convenience function for modifying a MMD register + * @phydev: phy device + * @prtad: MMD Address + * @devad: MMD DEVAD + * @mask: bit mask of bits to clear + * @set: new value of bits set in @mask + * + */ +int phy_modify_mmd_indirect(struct phy_device *phydev, int prtad, int devad, + u16 mask, u16 set) +{ + int ret; + + ret = phy_read_mmd_indirect(phydev, prtad, devad); + if (ret < 0) + return ret; + + phy_write_mmd_indirect(phydev, prtad, devad, (ret & ~mask) | set); + + return 0; +} + int genphy_config_init(struct phy_device *phydev) { int val; |