lkml.org 
[lkml]   [2022]   [Oct]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3 11/15] phy: qcom-qmp-pcie: restructure PHY creation
    Date
    In preparation for supporting devicetree bindings which do not use a
    child node, move the PHY creation to probe() proper and parse the serdes
    resource in what is now the legacy devicetree helper.

    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
    ---
    drivers/phy/qualcomm/phy-qcom-qmp-pcie.c | 36 +++++++++++-------------
    1 file changed, 17 insertions(+), 19 deletions(-)

    diff --git a/drivers/phy/qualcomm/phy-qcom-qmp-pcie.c b/drivers/phy/qualcomm/phy-qcom-qmp-pcie.c
    index f57d10f20277..2f4bdef73395 100644
    --- a/drivers/phy/qualcomm/phy-qcom-qmp-pcie.c
    +++ b/drivers/phy/qualcomm/phy-qcom-qmp-pcie.c
    @@ -2147,14 +2147,15 @@ static int phy_pipe_clk_register(struct qmp_pcie *qmp, struct device_node *np)
    return devm_add_action_or_reset(qmp->dev, phy_clk_release_provider, np);
    }

    -static int qmp_pcie_create(struct qmp_pcie *qmp, struct device_node *np)
    +static int qmp_pcie_parse_dt_legacy(struct qmp_pcie *qmp, struct device_node *np)
    {
    + struct platform_device *pdev = to_platform_device(qmp->dev);
    const struct qmp_phy_cfg *cfg = qmp->cfg;
    struct device *dev = qmp->dev;
    - struct phy *generic_phy;
    - int ret;

    - qmp->mode = PHY_MODE_PCIE_RC;
    + qmp->serdes = devm_platform_ioremap_resource(pdev, 0);
    + if (IS_ERR(qmp->serdes))
    + return PTR_ERR(qmp->serdes);

    /*
    * Get memory resources for the PHY:
    @@ -2209,16 +2210,6 @@ static int qmp_pcie_create(struct qmp_pcie *qmp, struct device_node *np)
    "failed to get pipe clock\n");
    }

    - generic_phy = devm_phy_create(dev, np, &qmp_pcie_phy_ops);
    - if (IS_ERR(generic_phy)) {
    - ret = PTR_ERR(generic_phy);
    - dev_err(dev, "failed to create PHY: %d\n", ret);
    - return ret;
    - }
    -
    - qmp->phy = generic_phy;
    - phy_set_drvdata(generic_phy, qmp);
    -
    return 0;
    }

    @@ -2243,10 +2234,6 @@ static int qmp_pcie_probe(struct platform_device *pdev)
    WARN_ON_ONCE(!qmp->cfg->pwrdn_ctrl);
    WARN_ON_ONCE(!qmp->cfg->phy_status);

    - qmp->serdes = devm_platform_ioremap_resource(pdev, 0);
    - if (IS_ERR(qmp->serdes))
    - return PTR_ERR(qmp->serdes);
    -
    ret = qmp_pcie_clk_init(qmp);
    if (ret)
    return ret;
    @@ -2263,7 +2250,7 @@ static int qmp_pcie_probe(struct platform_device *pdev)
    if (!child)
    return -EINVAL;

    - ret = qmp_pcie_create(qmp, child);
    + ret = qmp_pcie_parse_dt_legacy(qmp, child);
    if (ret)
    goto err_node_put;

    @@ -2271,6 +2258,17 @@ static int qmp_pcie_probe(struct platform_device *pdev)
    if (ret)
    goto err_node_put;

    + qmp->mode = PHY_MODE_PCIE_RC;
    +
    + qmp->phy = devm_phy_create(dev, child, &qmp_pcie_phy_ops);
    + if (IS_ERR(qmp->phy)) {
    + ret = PTR_ERR(qmp->phy);
    + dev_err(dev, "failed to create PHY: %d\n", ret);
    + goto err_node_put;
    + }
    +
    + phy_set_drvdata(qmp->phy, qmp);
    +
    of_node_put(child);

    phy_provider = devm_of_phy_provider_register(dev, of_phy_simple_xlate);
    --
    2.37.3
    \
     
     \ /
      Last update: 2022-10-21 13:13    [W:5.065 / U:0.180 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site