@@ -2471,7 +2471,6 @@ static int qmp_usb_probe(struct platform_device *pdev)
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);
@@ -2507,44 +2506,29 @@ static int qmp_usb_probe(struct platform_device *pdev)
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);