Skip to content

Commit b3982f2

Browse files
jhovoldvinodkoul
authored andcommitted
phy: qcom-qmp-combo: restructure PHY creation
In preparation for supporting devicetree bindings which do not use child nodes, move the PHY creation to probe() proper and parse the serdes, dp_com and dp_serdes resources in a dedicated legacy devicetree helper. Reviewed-by: Dmitry Baryshkov <[email protected]> Signed-off-by: Johan Hovold <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Vinod Koul <[email protected]>
1 parent 774903c commit b3982f2

File tree

1 file changed

+48
-41
lines changed

1 file changed

+48
-41
lines changed

drivers/phy/qualcomm/phy-qcom-qmp-combo.c

Lines changed: 48 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -2471,11 +2471,9 @@ static int phy_dp_clks_register(struct qmp_combo *qmp, struct device_node *np)
24712471
return devm_add_action_or_reset(qmp->dev, phy_clk_release_provider, np);
24722472
}
24732473

2474-
static int qmp_combo_create_dp(struct qmp_combo *qmp, struct device_node *np)
2474+
static int qmp_combo_parse_dt_lecacy_dp(struct qmp_combo *qmp, struct device_node *np)
24752475
{
24762476
struct device *dev = qmp->dev;
2477-
struct phy *generic_phy;
2478-
int ret;
24792477

24802478
/*
24812479
* Get memory resources from the DP child node:
@@ -2496,25 +2494,13 @@ static int qmp_combo_create_dp(struct qmp_combo *qmp, struct device_node *np)
24962494
if (IS_ERR(qmp->dp_tx2))
24972495
return PTR_ERR(qmp->dp_tx2);
24982496

2499-
generic_phy = devm_phy_create(dev, np, &qmp_combo_dp_phy_ops);
2500-
if (IS_ERR(generic_phy)) {
2501-
ret = PTR_ERR(generic_phy);
2502-
dev_err(dev, "failed to create DP PHY: %d\n", ret);
2503-
return ret;
2504-
}
2505-
2506-
qmp->dp_phy = generic_phy;
2507-
phy_set_drvdata(generic_phy, qmp);
2508-
25092497
return 0;
25102498
}
25112499

2512-
static int qmp_combo_create_usb(struct qmp_combo *qmp, struct device_node *np)
2500+
static int qmp_combo_parse_dt_lecacy_usb(struct qmp_combo *qmp, struct device_node *np)
25132501
{
25142502
const struct qmp_phy_cfg *cfg = qmp->cfg;
25152503
struct device *dev = qmp->dev;
2516-
struct phy *generic_phy;
2517-
int ret;
25182504

25192505
/*
25202506
* Get memory resources from the USB child node:
@@ -2556,15 +2542,34 @@ static int qmp_combo_create_usb(struct qmp_combo *qmp, struct device_node *np)
25562542
"failed to get pipe clock\n");
25572543
}
25582544

2559-
generic_phy = devm_phy_create(dev, np, &qmp_combo_usb_phy_ops);
2560-
if (IS_ERR(generic_phy)) {
2561-
ret = PTR_ERR(generic_phy);
2562-
dev_err(dev, "failed to create USB PHY: %d\n", ret);
2545+
return 0;
2546+
}
2547+
2548+
static int qmp_combo_parse_dt_legacy(struct qmp_combo *qmp, struct device_node *usb_np,
2549+
struct device_node *dp_np)
2550+
{
2551+
struct platform_device *pdev = to_platform_device(qmp->dev);
2552+
int ret;
2553+
2554+
qmp->serdes = devm_platform_ioremap_resource(pdev, 0);
2555+
if (IS_ERR(qmp->serdes))
2556+
return PTR_ERR(qmp->serdes);
2557+
2558+
qmp->dp_com = devm_platform_ioremap_resource(pdev, 1);
2559+
if (IS_ERR(qmp->dp_com))
2560+
return PTR_ERR(qmp->dp_com);
2561+
2562+
qmp->dp_serdes = devm_platform_ioremap_resource(pdev, 2);
2563+
if (IS_ERR(qmp->dp_serdes))
2564+
return PTR_ERR(qmp->dp_serdes);
2565+
2566+
ret = qmp_combo_parse_dt_lecacy_usb(qmp, usb_np);
2567+
if (ret)
25632568
return ret;
2564-
}
25652569

2566-
qmp->usb_phy = generic_phy;
2567-
phy_set_drvdata(generic_phy, qmp);
2570+
ret = qmp_combo_parse_dt_lecacy_dp(qmp, dp_np);
2571+
if (ret)
2572+
return ret;
25682573

25692574
return 0;
25702575
}
@@ -2587,18 +2592,6 @@ static int qmp_combo_probe(struct platform_device *pdev)
25872592
if (!qmp->cfg)
25882593
return -EINVAL;
25892594

2590-
qmp->serdes = devm_platform_ioremap_resource(pdev, 0);
2591-
if (IS_ERR(qmp->serdes))
2592-
return PTR_ERR(qmp->serdes);
2593-
2594-
qmp->dp_com = devm_platform_ioremap_resource(pdev, 1);
2595-
if (IS_ERR(qmp->dp_com))
2596-
return PTR_ERR(qmp->dp_com);
2597-
2598-
qmp->dp_serdes = devm_platform_ioremap_resource(pdev, 2);
2599-
if (IS_ERR(qmp->dp_serdes))
2600-
return PTR_ERR(qmp->dp_serdes);
2601-
26022595
mutex_init(&qmp->phy_mutex);
26032596

26042597
ret = qmp_combo_clk_init(qmp);
@@ -2623,6 +2616,10 @@ static int qmp_combo_probe(struct platform_device *pdev)
26232616
return -EINVAL;
26242617
}
26252618

2619+
ret = qmp_combo_parse_dt_legacy(qmp, usb_np, dp_np);
2620+
if (ret)
2621+
goto err_node_put;
2622+
26262623
pm_runtime_set_active(dev);
26272624
ret = devm_pm_runtime_enable(dev);
26282625
if (ret)
@@ -2633,21 +2630,31 @@ static int qmp_combo_probe(struct platform_device *pdev)
26332630
*/
26342631
pm_runtime_forbid(dev);
26352632

2636-
ret = qmp_combo_create_usb(qmp, usb_np);
2633+
ret = phy_pipe_clk_register(qmp, usb_np);
26372634
if (ret)
26382635
goto err_node_put;
26392636

2640-
ret = phy_pipe_clk_register(qmp, usb_np);
2637+
ret = phy_dp_clks_register(qmp, dp_np);
26412638
if (ret)
26422639
goto err_node_put;
26432640

2644-
ret = qmp_combo_create_dp(qmp, dp_np);
2645-
if (ret)
2641+
qmp->usb_phy = devm_phy_create(dev, usb_np, &qmp_combo_usb_phy_ops);
2642+
if (IS_ERR(qmp->usb_phy)) {
2643+
ret = PTR_ERR(qmp->usb_phy);
2644+
dev_err(dev, "failed to create USB PHY: %d\n", ret);
26462645
goto err_node_put;
2646+
}
26472647

2648-
ret = phy_dp_clks_register(qmp, dp_np);
2649-
if (ret)
2648+
phy_set_drvdata(qmp->usb_phy, qmp);
2649+
2650+
qmp->dp_phy = devm_phy_create(dev, dp_np, &qmp_combo_dp_phy_ops);
2651+
if (IS_ERR(qmp->dp_phy)) {
2652+
ret = PTR_ERR(qmp->dp_phy);
2653+
dev_err(dev, "failed to create DP PHY: %d\n", ret);
26502654
goto err_node_put;
2655+
}
2656+
2657+
phy_set_drvdata(qmp->dp_phy, qmp);
26512658

26522659
phy_provider = devm_of_phy_provider_register(dev, of_phy_simple_xlate);
26532660

0 commit comments

Comments
 (0)