for_each_available_child_of_node(bus->dev.of_node, child) {
                int addr;
-               int ret;
 
-               ret = of_property_read_u32(child, "reg", &addr);
-               if (ret < 0) {
-                       dev_err(dev, "%s has invalid MDIO address\n",
-                               child->full_name);
+               addr = of_mdio_parse_addr(dev, child);
+               if (addr < 0)
                        continue;
-               }
-
-               /* A MDIO device must have a reg property in the range [0-31] */
-               if (addr >= PHY_MAX_ADDR) {
-                       dev_err(dev, "%s MDIO address %i is too large\n",
-                               child->full_name, addr);
-                       continue;
-               }
 
                if (addr == mdiodev->addr) {
                        dev->of_node = child;