void __iomem *serdes;
        const struct qmp_phy_cfg *cfg = NULL;
        struct qmp_usb *qmp;
-       int num, id;
        int ret;
 
        qmp = devm_kzalloc(dev, sizeof(*qmp), GFP_KERNEL);
        if (ret)
                return ret;
 
-       num = of_get_available_child_count(dev->of_node);
-       /* do we have a rogue child node ? */
-       if (num > 1)
+       child = of_get_next_available_child(dev->of_node, NULL);
+       if (!child)
                return -EINVAL;
 
        pm_runtime_set_active(dev);
        ret = devm_pm_runtime_enable(dev);
        if (ret)
-               return ret;
+               goto err_node_put;
        /*
         * Prevent runtime pm from being ON by default. Users can enable
         * it using power/control in sysfs.
         */
        pm_runtime_forbid(dev);
 
-       id = 0;
-       for_each_available_child_of_node(dev->of_node, child) {
-               /* Create per-lane phy */
-               ret = qmp_usb_create(dev, child, serdes, cfg);
-               if (ret) {
-                       dev_err(dev, "failed to create lane%d phy, %d\n",
-                               id, ret);
-                       goto err_node_put;
-               }
-
-               /*
-                * Register the pipe clock provided by phy.
-                * See function description to see details of this pipe clock.
-                */
-               ret = phy_pipe_clk_register(qmp, child);
-               if (ret) {
-                       dev_err(qmp->dev,
-                               "failed to register pipe clock source\n");
-                       goto err_node_put;
-               }
-
-               id++;
-       }
+       ret = qmp_usb_create(dev, child, serdes, cfg);
+       if (ret)
+               goto err_node_put;
+
+       ret = phy_pipe_clk_register(qmp, child);
+       if (ret)
+               goto err_node_put;
+
+       of_node_put(child);
 
        phy_provider = devm_of_phy_provider_register(dev, of_phy_simple_xlate);