OpenWrt – Rev 1

Subversion Repositories:
Rev:
--- a/drivers/net/ethernet/lantiq_etop.c
+++ b/drivers/net/ethernet/lantiq_etop.c
@@ -40,6 +40,7 @@
 #include <linux/of_net.h>
 #include <linux/of_irq.h>
 #include <linux/of_platform.h>
+#include <linux/of_mdio.h>
 
 #include <asm/checksum.h>
 
@@ -567,7 +568,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) {
@@ -587,7 +589,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;
        }