Message ID | 20240311141106.3200743-3-niklas.soderlund+renesas@ragnatech.se (mailing list archive) |
---|---|
State | Deferred |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | ravb: Support describing the MDIO bus | expand |
On Mon, Mar 11, 2024 at 03:11:06PM +0100, Niklas Söderlund wrote: > The driver used the DT node of the device itself when registering the > MDIO bus. While this works, it creates a problem: it forces any MDIO bus > properties to also be set on the devices DT node. This mixes the > properties of two distinctly different things and is confusing. > > This change adds support for an optional mdio node to be defined as a > child to the device DT node. The child node can then be used to describe > MDIO bus properties that the MDIO core can act on when registering the > bus. > > If no mdio child node is found the driver fallback to the old behavior > and register the MDIO bus using the device DT node. This change is > backward compatible with old bindings in use. > > Signed-off-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se> > Reviewed-by: Sergey Shtylyov <s.shtylyov@omp.ru> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Andrew
diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c index fa48ff4aba2d..b6adf608ebfa 100644 --- a/drivers/net/ethernet/renesas/ravb_main.c +++ b/drivers/net/ethernet/renesas/ravb_main.c @@ -2564,6 +2564,7 @@ static int ravb_mdio_init(struct ravb_private *priv) { struct platform_device *pdev = priv->pdev; struct device *dev = &pdev->dev; + struct device_node *mdio_node; struct phy_device *phydev; struct device_node *pn; int error; @@ -2583,7 +2584,13 @@ static int ravb_mdio_init(struct ravb_private *priv) pdev->name, pdev->id); /* Register MDIO bus */ - error = of_mdiobus_register(priv->mii_bus, dev->of_node); + mdio_node = of_get_child_by_name(dev->of_node, "mdio"); + if (!mdio_node) { + /* backwards compatibility for DT lacking mdio subnode */ + mdio_node = of_node_get(dev->of_node); + } + error = of_mdiobus_register(priv->mii_bus, mdio_node); + of_node_put(mdio_node); if (error) goto out_free_bus;