--- a/drivers/net/ethernet/lantiq_etop.c +++ b/drivers/net/ethernet/lantiq_etop.c @@ -30,6 +30,7 @@ #include #include #include +#include #include @@ -553,7 +554,8 @@ static int ltq_etop_mdio_init(struct net_device *dev) { struct ltq_etop_priv *priv = netdev_priv(dev); - int err; + struct device_node *mdio_np = NULL; + int err, ret; priv->mii_bus = mdiobus_alloc(); if (!priv->mii_bus) { @@ -573,7 +575,15 @@ ltq_etop_mdio_init(struct net_device *de priv->mii_bus->name = "ltq_mii"; snprintf(priv->mii_bus->id, MII_BUS_ID_SIZE, "%s-%x", priv->pdev->name, priv->pdev->id); - if (mdiobus_register(priv->mii_bus)) { + + mdio_np = of_get_child_by_name(priv->pdev->dev.of_node, "mdio-bus"); + + if (mdio_np) + ret = of_mdiobus_register(priv->mii_bus, mdio_np); + else + ret = mdiobus_register(priv->mii_bus); + + if (ret) { err = -ENXIO; goto err_out_free_mdiobus; }