+static int mdiobus_probe_mmd_read(struct mii_bus *bus, int prtad, int devad,
+ u16 regnum)
+{
+ int ret;
+
+ /* For backwards compatibility, treat MDIOBUS_NO_CAP as c45 capable */
+ if (bus->probe_capabilities == MDIOBUS_NO_CAP ||
+ bus->probe_capabilities >= MDIOBUS_C45)
Maybe we should do the work and mark up those that are C45 capable. At
a quick count, see 16 of them.
+ return mdiobus_c45_read(bus, prtad, devad, regnum);
+
+ mutex_lock(&bus->mdio_lock);
+
+ /* Write the desired MMD Devad */
+ ret = __mdiobus_write(bus, prtad, MII_MMD_CTRL, devad);
+ if (ret)
+ goto out;
+
+ /* Write the desired MMD register address */
+ ret = __mdiobus_write(bus, prtad, MII_MMD_DATA, regnum);
+ if (ret)
+ goto out;
+
+ /* Select the Function : DATA with no post increment */
+ ret = __mdiobus_write(bus, prtad, MII_MMD_CTRL,
+ devad | MII_MMD_CTRL_NOINCR);
+ if (ret)
+ goto out;
Make mmd_phy_indirect() usable, rather then repeat it.