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

net: phy: restructure __phy_write/read_mmd to helper and phydev user

Restructure phy_write_mmd and phy_read_mmd to implement generic helper
for direct mdiobus access for mmd and use these helper for phydev user.

This is needed in preparation of PHY package API that requires generic
access to the mdiobus and are deatched from phydev struct but instead
access them based on PHY package base_addr and offsets.

Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
Reviewed-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Christian Marangi and committed by
David S. Miller
028672bd 9eea577e

+30 -34
+30 -34
drivers/net/phy/phy-core.c
··· 540 540 devad | MII_MMD_CTRL_NOINCR); 541 541 } 542 542 543 + static int mmd_phy_read(struct mii_bus *bus, int phy_addr, bool is_c45, 544 + int devad, u32 regnum) 545 + { 546 + if (is_c45) 547 + return __mdiobus_c45_read(bus, phy_addr, devad, regnum); 548 + 549 + mmd_phy_indirect(bus, phy_addr, devad, regnum); 550 + /* Read the content of the MMD's selected register */ 551 + return __mdiobus_read(bus, phy_addr, MII_MMD_DATA); 552 + } 553 + 554 + static int mmd_phy_write(struct mii_bus *bus, int phy_addr, bool is_c45, 555 + int devad, u32 regnum, u16 val) 556 + { 557 + if (is_c45) 558 + return __mdiobus_c45_write(bus, phy_addr, devad, regnum, val); 559 + 560 + mmd_phy_indirect(bus, phy_addr, devad, regnum); 561 + /* Write the data into MMD's selected register */ 562 + return __mdiobus_write(bus, phy_addr, MII_MMD_DATA, val); 563 + } 564 + 543 565 /** 544 566 * __phy_read_mmd - Convenience function for reading a register 545 567 * from an MMD on a given PHY. ··· 573 551 */ 574 552 int __phy_read_mmd(struct phy_device *phydev, int devad, u32 regnum) 575 553 { 576 - int val; 577 - 578 554 if (regnum > (u16)~0 || devad > 32) 579 555 return -EINVAL; 580 556 581 - if (phydev->drv && phydev->drv->read_mmd) { 582 - val = phydev->drv->read_mmd(phydev, devad, regnum); 583 - } else if (phydev->is_c45) { 584 - val = __mdiobus_c45_read(phydev->mdio.bus, phydev->mdio.addr, 585 - devad, regnum); 586 - } else { 587 - struct mii_bus *bus = phydev->mdio.bus; 588 - int phy_addr = phydev->mdio.addr; 557 + if (phydev->drv && phydev->drv->read_mmd) 558 + return phydev->drv->read_mmd(phydev, devad, regnum); 589 559 590 - mmd_phy_indirect(bus, phy_addr, devad, regnum); 591 - 592 - /* Read the content of the MMD's selected register */ 593 - val = __mdiobus_read(bus, phy_addr, MII_MMD_DATA); 594 - } 595 - return val; 560 + return mmd_phy_read(phydev->mdio.bus, phydev->mdio.addr, 561 + phydev->is_c45, devad, regnum); 596 562 } 597 563 EXPORT_SYMBOL(__phy_read_mmd); 598 564 ··· 617 607 */ 618 608 int __phy_write_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 val) 619 609 { 620 - int ret; 621 - 622 610 if (regnum > (u16)~0 || devad > 32) 623 611 return -EINVAL; 624 612 625 - if (phydev->drv && phydev->drv->write_mmd) { 626 - ret = phydev->drv->write_mmd(phydev, devad, regnum, val); 627 - } else if (phydev->is_c45) { 628 - ret = __mdiobus_c45_write(phydev->mdio.bus, phydev->mdio.addr, 629 - devad, regnum, val); 630 - } else { 631 - struct mii_bus *bus = phydev->mdio.bus; 632 - int phy_addr = phydev->mdio.addr; 613 + if (phydev->drv && phydev->drv->write_mmd) 614 + return phydev->drv->write_mmd(phydev, devad, regnum, val); 633 615 634 - mmd_phy_indirect(bus, phy_addr, devad, regnum); 635 - 636 - /* Write the data into MMD's selected register */ 637 - __mdiobus_write(bus, phy_addr, MII_MMD_DATA, val); 638 - 639 - ret = 0; 640 - } 641 - return ret; 616 + return mmd_phy_write(phydev->mdio.bus, phydev->mdio.addr, 617 + phydev->is_c45, devad, regnum, val); 642 618 } 643 619 EXPORT_SYMBOL(__phy_write_mmd); 644 620