Skip to content

Commit

Permalink
mdio_bus: Generalise of_mdiobus_link_phydev()
Browse files Browse the repository at this point in the history
This function should work with any sort of MDIO device which can be
probed on the bus, not just PHY devices. So generalise it.

Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Andrew Lunn authored and David S. Miller committed Jan 7, 2016
1 parent e76a495 commit f03bc4a
Showing 1 changed file with 15 additions and 14 deletions.
29 changes: 15 additions & 14 deletions drivers/net/phy/mdio_bus.c
Original file line number Diff line number Diff line change
Expand Up @@ -237,15 +237,16 @@ struct mii_bus *of_mdio_find_bus(struct device_node *mdio_bus_np)
}
EXPORT_SYMBOL(of_mdio_find_bus);

/* Walk the list of subnodes of a mdio bus and look for a node that matches the
* phy's address with its 'reg' property. If found, set the of_node pointer for
* the phy. This allows auto-probed pyh devices to be supplied with information
* passed in via DT.
/* Walk the list of subnodes of a mdio bus and look for a node that
* matches the mdio device's address with its 'reg' property. If
* found, set the of_node pointer for the mdio device. This allows
* auto-probed phy devices to be supplied with information passed in
* via DT.
*/
static void of_mdiobus_link_phydev(struct mii_bus *bus,
struct phy_device *phydev)
static void of_mdiobus_link_mdiodev(struct mii_bus *bus,
struct mdio_device *mdiodev)
{
struct device *dev = &phydev->mdio.dev;
struct device *dev = &mdiodev->dev;
struct device_node *child;

if (dev->of_node || !bus->dev.of_node)
Expand All @@ -257,27 +258,27 @@ static void of_mdiobus_link_phydev(struct mii_bus *bus,

ret = of_property_read_u32(child, "reg", &addr);
if (ret < 0) {
dev_err(dev, "%s has invalid PHY address\n",
dev_err(dev, "%s has invalid MDIO address\n",
child->full_name);
continue;
}

/* A PHY must have a reg property in the range [0-31] */
/* A MDIO device must have a reg property in the range [0-31] */
if (addr >= PHY_MAX_ADDR) {
dev_err(dev, "%s PHY address %i is too large\n",
dev_err(dev, "%s MDIO address %i is too large\n",
child->full_name, addr);
continue;
}

if (addr == phydev->mdio.addr) {
if (addr == mdiodev->addr) {
dev->of_node = child;
return;
}
}
}
#else /* !IS_ENABLED(CONFIG_OF_MDIO) */
static inline void of_mdiobus_link_phydev(struct mii_bus *mdio,
struct phy_device *phydev)
static inline void of_mdiobus_link_mdiodev(struct mii_bus *mdio,
struct mdio_device *mdiodev)
{
}
#endif
Expand Down Expand Up @@ -406,7 +407,7 @@ struct phy_device *mdiobus_scan(struct mii_bus *bus, int addr)
* For DT, see if the auto-probed phy has a correspoding child
* in the bus node, and set the of_node pointer in this case.
*/
of_mdiobus_link_phydev(bus, phydev);
of_mdiobus_link_mdiodev(bus, &phydev->mdio);

err = phy_device_register(phydev);
if (err) {
Expand Down

0 comments on commit f03bc4a

Please sign in to comment.