]> git.baikalelectronics.ru Git - kernel.git/commitdiff
net: mdio: add mdiobus_modify_changed()
authorRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Wed, 6 Oct 2021 12:19:20 +0000 (13:19 +0100)
committerJakub Kicinski <kuba@kernel.org>
Thu, 7 Oct 2021 00:49:16 +0000 (17:49 -0700)
Add mdiobus_modify_changed() helper to reflect the phylib and similar
equivalents. This will avoid this functionality being open-coded, as
has already happened in phylink, and it looks like other users will be
appearing soon.

Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/phy/mdio_bus.c
include/linux/mdio.h

index 6f4b4e5df6397cbc836b60ccedaece93cef48408..d8b68145f6b447729f05f7911b0aa25e48979f73 100644 (file)
@@ -926,6 +926,28 @@ int mdiobus_modify(struct mii_bus *bus, int addr, u32 regnum, u16 mask, u16 set)
 }
 EXPORT_SYMBOL_GPL(mdiobus_modify);
 
+/**
+ * mdiobus_modify_changed - Convenience function for modifying a given mdio
+ *     device register and returning if it changed
+ * @bus: the mii_bus struct
+ * @addr: the phy address
+ * @regnum: register number to write
+ * @mask: bit mask of bits to clear
+ * @set: bit mask of bits to set
+ */
+int mdiobus_modify_changed(struct mii_bus *bus, int addr, u32 regnum,
+                          u16 mask, u16 set)
+{
+       int err;
+
+       mutex_lock(&bus->mdio_lock);
+       err = __mdiobus_modify_changed(bus, addr, regnum, mask, set);
+       mutex_unlock(&bus->mdio_lock);
+
+       return err;
+}
+EXPORT_SYMBOL_GPL(mdiobus_modify_changed);
+
 /**
  * mdio_bus_match - determine if given MDIO driver supports the given
  *                 MDIO device
index 5e6dc38f418e48c3b2ce3f3d08a10ae6bbb3e675..f622888a4ba826771142521090bdd987348f31b2 100644 (file)
@@ -349,6 +349,8 @@ int mdiobus_write(struct mii_bus *bus, int addr, u32 regnum, u16 val);
 int mdiobus_write_nested(struct mii_bus *bus, int addr, u32 regnum, u16 val);
 int mdiobus_modify(struct mii_bus *bus, int addr, u32 regnum, u16 mask,
                   u16 set);
+int mdiobus_modify_changed(struct mii_bus *bus, int addr, u32 regnum,
+                          u16 mask, u16 set);
 
 static inline u32 mdiobus_c45_addr(int devad, u16 regnum)
 {