Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

net: mdio: add unlocked mdiobus and mdiodev bus accessors

Add the following unlocked accessors to complete the set:
__mdiobus_modify()
__mdiodev_read()
__mdiodev_write()
__mdiodev_modify()
__mdiodev_modify_changed()
which we will need for Marvell DSA PCS conversion.

Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Russell King (Oracle) and committed by
David S. Miller
e6a45700 24699cc1

+48 -2
+22 -2
drivers/net/phy/mdio_bus.c
··· 1210 1210 } 1211 1211 EXPORT_SYMBOL(mdiobus_c45_write_nested); 1212 1212 1213 + /* 1214 + * __mdiobus_modify - Convenience function for modifying a given mdio device 1215 + * register 1216 + * @bus: the mii_bus struct 1217 + * @addr: the phy address 1218 + * @regnum: register number to write 1219 + * @mask: bit mask of bits to clear 1220 + * @set: bit mask of bits to set 1221 + */ 1222 + int __mdiobus_modify(struct mii_bus *bus, int addr, u32 regnum, u16 mask, 1223 + u16 set) 1224 + { 1225 + int err; 1226 + 1227 + err = __mdiobus_modify_changed(bus, addr, regnum, mask, set); 1228 + 1229 + return err < 0 ? err : 0; 1230 + } 1231 + EXPORT_SYMBOL_GPL(__mdiobus_modify); 1232 + 1213 1233 /** 1214 1234 * mdiobus_modify - Convenience function for modifying a given mdio device 1215 1235 * register ··· 1244 1224 int err; 1245 1225 1246 1226 mutex_lock(&bus->mdio_lock); 1247 - err = __mdiobus_modify_changed(bus, addr, regnum, mask, set); 1227 + err = __mdiobus_modify(bus, addr, regnum, mask, set); 1248 1228 mutex_unlock(&bus->mdio_lock); 1249 1229 1250 - return err < 0 ? err : 0; 1230 + return err; 1251 1231 } 1252 1232 EXPORT_SYMBOL_GPL(mdiobus_modify); 1253 1233
+26
include/linux/mdio.h
··· 537 537 538 538 int __mdiobus_read(struct mii_bus *bus, int addr, u32 regnum); 539 539 int __mdiobus_write(struct mii_bus *bus, int addr, u32 regnum, u16 val); 540 + int __mdiobus_modify(struct mii_bus *bus, int addr, u32 regnum, u16 mask, 541 + u16 set); 540 542 int __mdiobus_modify_changed(struct mii_bus *bus, int addr, u32 regnum, 541 543 u16 mask, u16 set); 542 544 ··· 565 563 566 564 int mdiobus_c45_modify_changed(struct mii_bus *bus, int addr, int devad, 567 565 u32 regnum, u16 mask, u16 set); 566 + 567 + static inline int __mdiodev_read(struct mdio_device *mdiodev, u32 regnum) 568 + { 569 + return __mdiobus_read(mdiodev->bus, mdiodev->addr, regnum); 570 + } 571 + 572 + static inline int __mdiodev_write(struct mdio_device *mdiodev, u32 regnum, 573 + u16 val) 574 + { 575 + return __mdiobus_write(mdiodev->bus, mdiodev->addr, regnum, val); 576 + } 577 + 578 + static inline int __mdiodev_modify(struct mdio_device *mdiodev, u32 regnum, 579 + u16 mask, u16 set) 580 + { 581 + return __mdiobus_modify(mdiodev->bus, mdiodev->addr, regnum, mask, set); 582 + } 583 + 584 + static inline int __mdiodev_modify_changed(struct mdio_device *mdiodev, 585 + u32 regnum, u16 mask, u16 set) 586 + { 587 + return __mdiobus_modify_changed(mdiodev->bus, mdiodev->addr, regnum, 588 + mask, set); 589 + } 568 590 569 591 static inline int mdiodev_read(struct mdio_device *mdiodev, u32 regnum) 570 592 {