ath79: ag71xx: register mdio using of_platform_populate
authorChuanhong Guo <gch981213@gmail.com>
Wed, 9 Jan 2019 14:02:09 +0000 (22:02 +0800)
committerDaniel Golle <daniel@makrotopia.org>
Tue, 5 Mar 2019 02:02:34 +0000 (03:02 +0100)
remove the hacky checking of "simple-mfd" compatible
also add some comments explaining that piece of code.

Signed-off-by: Chuanhong Guo <gch981213@gmail.com>
target/linux/ath79/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c

index 83f4119..bf92391 100644 (file)
@@ -1321,7 +1321,6 @@ static const struct net_device_ops ag71xx_netdev_ops = {
 static int ag71xx_probe(struct platform_device *pdev)
 {
        struct device_node *np = pdev->dev.of_node;
-       struct device_node *mdio_node;
        struct net_device *dev;
        struct resource *res;
        struct ag71xx *ag;
@@ -1500,10 +1499,18 @@ static int ag71xx_probe(struct platform_device *pdev)
 
        ag71xx_dump_regs(ag);
 
-       if (!of_device_is_compatible(np, "simple-mfd")) {
-               mdio_node = of_get_child_by_name(np, "mdio-bus");
-               if (!IS_ERR(mdio_node))
-                       of_platform_device_create(mdio_node, NULL, NULL);
+       /*
+        * populate current node to register mdio-bus as a subdevice.
+        * the mdio bus works independently on ar7241 and later chips
+        * and we need to load mdio1 before gmac0, which can be done
+        * by adding a "simple-mfd" compatible to gmac node. The
+        * following code checks OF_POPULATED_BUS flag before populating
+        * to avoid duplicated population.
+        */
+       if (!of_node_check_flag(np, OF_POPULATED_BUS)) {
+               err = of_platform_populate(np, NULL, NULL, &pdev->dev);
+               if (err)
+                       return err;
        }
 
        err = ag71xx_phy_connect(ag);