From: Kuogee Hsieh <quic_khsieh@quicinc.com> To: <dri-devel@lists.freedesktop.org>, <robdclark@gmail.com>, <sean@poorly.run>, <swboyd@chromium.org>, <dianders@chromium.org>, <vkoul@kernel.org>, <daniel@ffwll.ch>, <airlied@linux.ie>, <agross@kernel.org>, <dmitry.baryshkov@linaro.org>, <bjorn.andersson@linaro.org> Cc: Kuogee Hsieh <quic_khsieh@quicinc.com>, <quic_abhinavk@quicinc.com>, <quic_aravindh@quicinc.com>, <quic_sbillaka@quicinc.com>, <freedreno@lists.freedesktop.org>, <linux-arm-msm@vger.kernel.org>, <linux-kernel@vger.kernel.org> Subject: [PATCH v2 1/2] phy/qcom: add regulator_set_load to edp/dp phy Date: Wed, 18 May 2022 09:43:05 -0700 [thread overview] Message-ID: <1652892186-22346-2-git-send-email-quic_khsieh@quicinc.com> (raw) In-Reply-To: <1652892186-22346-1-git-send-email-quic_khsieh@quicinc.com> This patch add regulator_set_load() to both eDP and DP phy driver to have totally control regulators. Changes in v2: -- no regulator_set_laod() before disable regulator Signed-off-by: Kuogee Hsieh <quic_khsieh@quicinc.com> --- drivers/phy/qualcomm/phy-qcom-edp.c | 25 +++++++++++++++++++++---- drivers/phy/qualcomm/phy-qcom-qmp.c | 13 +++++++++++++ 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/drivers/phy/qualcomm/phy-qcom-edp.c b/drivers/phy/qualcomm/phy-qcom-edp.c index cacd32f..9b55095 100644 --- a/drivers/phy/qualcomm/phy-qcom-edp.c +++ b/drivers/phy/qualcomm/phy-qcom-edp.c @@ -87,17 +87,24 @@ struct qcom_edp { struct clk_bulk_data clks[2]; struct regulator_bulk_data supplies[2]; + int enable_load[2]; + int disable_load[2]; }; static int qcom_edp_phy_init(struct phy *phy) { struct qcom_edp *edp = phy_get_drvdata(phy); int ret; + int num_consumers = ARRAY_SIZE(edp->supplies); + int i; - ret = regulator_bulk_enable(ARRAY_SIZE(edp->supplies), edp->supplies); + ret = regulator_bulk_enable(num_consumers, edp->supplies); if (ret) return ret; + for (i = num_consumers - 1; i >= 0; --i) + regulator_set_load(edp->supplies[i].consumer, edp->enable_load[i]); + ret = clk_bulk_prepare_enable(ARRAY_SIZE(edp->clks), edp->clks); if (ret) goto out_disable_supplies; @@ -425,9 +432,15 @@ static int qcom_edp_phy_power_off(struct phy *phy) static int qcom_edp_phy_exit(struct phy *phy) { struct qcom_edp *edp = phy_get_drvdata(phy); + int num_consumers = ARRAY_SIZE(edp->supplies); + int i; clk_bulk_disable_unprepare(ARRAY_SIZE(edp->clks), edp->clks); - regulator_bulk_disable(ARRAY_SIZE(edp->supplies), edp->supplies); + + for (i = num_consumers - 1; i >= 0; --i) + regulator_set_load(edp->supplies[i].consumer, edp->disable_load[i]); + + regulator_bulk_disable(num_consumers, edp->supplies); return 0; } @@ -633,8 +646,12 @@ static int qcom_edp_phy_probe(struct platform_device *pdev) if (ret) return ret; - edp->supplies[0].supply = "vdda-phy"; - edp->supplies[1].supply = "vdda-pll"; + edp->supplies[0].supply = "vdda-1p2"; + edp->supplies[1].supply = "vdda-0p9"; + edp->enable_load[0] = 21800; /* 1.2 V */ + edp->enable_load[1] = 36000; /* 1.2 V */ + edp->disable_load[0] = 4; /* 0.9 V */ + edp->disable_load[1] = 4; /* 10.9V */ ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(edp->supplies), edp->supplies); if (ret) return ret; diff --git a/drivers/phy/qualcomm/phy-qcom-qmp.c b/drivers/phy/qualcomm/phy-qcom-qmp.c index b144ae1..0a4c8a8 100644 --- a/drivers/phy/qualcomm/phy-qcom-qmp.c +++ b/drivers/phy/qualcomm/phy-qcom-qmp.c @@ -3130,6 +3130,7 @@ struct qmp_phy_cfg { int num_resets; /* regulators to be requested */ const char * const *vreg_list; + const unsigned int *vreg_enable_load; int num_vregs; /* array of registers with different offsets */ @@ -3346,6 +3347,10 @@ static const char * const qmp_phy_vreg_l[] = { "vdda-phy", "vdda-pll", }; +static const unsigned int qmp_phy_vreg_enable_load[] = { + 21800, 36000 +}; + static const struct qmp_phy_cfg ipq8074_usb3phy_cfg = { .type = PHY_TYPE_USB3, .nlanes = 1, @@ -4072,6 +4077,7 @@ static const struct qmp_phy_cfg sm8250_usb3phy_cfg = { .reset_list = msm8996_usb3phy_reset_l, .num_resets = ARRAY_SIZE(msm8996_usb3phy_reset_l), .vreg_list = qmp_phy_vreg_l, + .vreg_enable_load = qmp_phy_vreg_enable_load, .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l), .regs = qmp_v4_usb3phy_regs_layout, @@ -4139,6 +4145,7 @@ static const struct qmp_phy_cfg sm8250_dpphy_cfg = { .reset_list = msm8996_usb3phy_reset_l, .num_resets = ARRAY_SIZE(msm8996_usb3phy_reset_l), .vreg_list = qmp_phy_vreg_l, + .vreg_enable_load = qmp_phy_vreg_enable_load, .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l), .regs = qmp_v4_usb3phy_regs_layout, @@ -5008,6 +5015,11 @@ static int qcom_qmp_phy_com_init(struct qmp_phy *qphy) return 0; } + if (cfg->vreg_enable_load) { + for (i = cfg->num_vregs - 1; i >= 0; --i) + regulator_set_load(qmp->vregs[i].consumer, cfg->vreg_enable_load[i]); + } + /* turn on regulator supplies */ ret = regulator_bulk_enable(cfg->num_vregs, qmp->vregs); if (ret) { @@ -5116,6 +5128,7 @@ static int qcom_qmp_phy_com_exit(struct qmp_phy *qphy) clk_bulk_disable_unprepare(cfg->num_clks, qmp->clks); + /* no minimum load set required before disable regulator */ regulator_bulk_disable(cfg->num_vregs, qmp->vregs); mutex_unlock(&qmp->phy_mutex); -- The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
WARNING: multiple messages have this Message-ID (diff)
From: Kuogee Hsieh <quic_khsieh@quicinc.com> To: <dri-devel@lists.freedesktop.org>, <robdclark@gmail.com>, <sean@poorly.run>, <swboyd@chromium.org>, <dianders@chromium.org>, <vkoul@kernel.org>, <daniel@ffwll.ch>, <airlied@linux.ie>, <agross@kernel.org>, <dmitry.baryshkov@linaro.org>, <bjorn.andersson@linaro.org> Cc: quic_sbillaka@quicinc.com, linux-arm-msm@vger.kernel.org, quic_abhinavk@quicinc.com, Kuogee Hsieh <quic_khsieh@quicinc.com>, quic_aravindh@quicinc.com, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 1/2] phy/qcom: add regulator_set_load to edp/dp phy Date: Wed, 18 May 2022 09:43:05 -0700 [thread overview] Message-ID: <1652892186-22346-2-git-send-email-quic_khsieh@quicinc.com> (raw) In-Reply-To: <1652892186-22346-1-git-send-email-quic_khsieh@quicinc.com> This patch add regulator_set_load() to both eDP and DP phy driver to have totally control regulators. Changes in v2: -- no regulator_set_laod() before disable regulator Signed-off-by: Kuogee Hsieh <quic_khsieh@quicinc.com> --- drivers/phy/qualcomm/phy-qcom-edp.c | 25 +++++++++++++++++++++---- drivers/phy/qualcomm/phy-qcom-qmp.c | 13 +++++++++++++ 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/drivers/phy/qualcomm/phy-qcom-edp.c b/drivers/phy/qualcomm/phy-qcom-edp.c index cacd32f..9b55095 100644 --- a/drivers/phy/qualcomm/phy-qcom-edp.c +++ b/drivers/phy/qualcomm/phy-qcom-edp.c @@ -87,17 +87,24 @@ struct qcom_edp { struct clk_bulk_data clks[2]; struct regulator_bulk_data supplies[2]; + int enable_load[2]; + int disable_load[2]; }; static int qcom_edp_phy_init(struct phy *phy) { struct qcom_edp *edp = phy_get_drvdata(phy); int ret; + int num_consumers = ARRAY_SIZE(edp->supplies); + int i; - ret = regulator_bulk_enable(ARRAY_SIZE(edp->supplies), edp->supplies); + ret = regulator_bulk_enable(num_consumers, edp->supplies); if (ret) return ret; + for (i = num_consumers - 1; i >= 0; --i) + regulator_set_load(edp->supplies[i].consumer, edp->enable_load[i]); + ret = clk_bulk_prepare_enable(ARRAY_SIZE(edp->clks), edp->clks); if (ret) goto out_disable_supplies; @@ -425,9 +432,15 @@ static int qcom_edp_phy_power_off(struct phy *phy) static int qcom_edp_phy_exit(struct phy *phy) { struct qcom_edp *edp = phy_get_drvdata(phy); + int num_consumers = ARRAY_SIZE(edp->supplies); + int i; clk_bulk_disable_unprepare(ARRAY_SIZE(edp->clks), edp->clks); - regulator_bulk_disable(ARRAY_SIZE(edp->supplies), edp->supplies); + + for (i = num_consumers - 1; i >= 0; --i) + regulator_set_load(edp->supplies[i].consumer, edp->disable_load[i]); + + regulator_bulk_disable(num_consumers, edp->supplies); return 0; } @@ -633,8 +646,12 @@ static int qcom_edp_phy_probe(struct platform_device *pdev) if (ret) return ret; - edp->supplies[0].supply = "vdda-phy"; - edp->supplies[1].supply = "vdda-pll"; + edp->supplies[0].supply = "vdda-1p2"; + edp->supplies[1].supply = "vdda-0p9"; + edp->enable_load[0] = 21800; /* 1.2 V */ + edp->enable_load[1] = 36000; /* 1.2 V */ + edp->disable_load[0] = 4; /* 0.9 V */ + edp->disable_load[1] = 4; /* 10.9V */ ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(edp->supplies), edp->supplies); if (ret) return ret; diff --git a/drivers/phy/qualcomm/phy-qcom-qmp.c b/drivers/phy/qualcomm/phy-qcom-qmp.c index b144ae1..0a4c8a8 100644 --- a/drivers/phy/qualcomm/phy-qcom-qmp.c +++ b/drivers/phy/qualcomm/phy-qcom-qmp.c @@ -3130,6 +3130,7 @@ struct qmp_phy_cfg { int num_resets; /* regulators to be requested */ const char * const *vreg_list; + const unsigned int *vreg_enable_load; int num_vregs; /* array of registers with different offsets */ @@ -3346,6 +3347,10 @@ static const char * const qmp_phy_vreg_l[] = { "vdda-phy", "vdda-pll", }; +static const unsigned int qmp_phy_vreg_enable_load[] = { + 21800, 36000 +}; + static const struct qmp_phy_cfg ipq8074_usb3phy_cfg = { .type = PHY_TYPE_USB3, .nlanes = 1, @@ -4072,6 +4077,7 @@ static const struct qmp_phy_cfg sm8250_usb3phy_cfg = { .reset_list = msm8996_usb3phy_reset_l, .num_resets = ARRAY_SIZE(msm8996_usb3phy_reset_l), .vreg_list = qmp_phy_vreg_l, + .vreg_enable_load = qmp_phy_vreg_enable_load, .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l), .regs = qmp_v4_usb3phy_regs_layout, @@ -4139,6 +4145,7 @@ static const struct qmp_phy_cfg sm8250_dpphy_cfg = { .reset_list = msm8996_usb3phy_reset_l, .num_resets = ARRAY_SIZE(msm8996_usb3phy_reset_l), .vreg_list = qmp_phy_vreg_l, + .vreg_enable_load = qmp_phy_vreg_enable_load, .num_vregs = ARRAY_SIZE(qmp_phy_vreg_l), .regs = qmp_v4_usb3phy_regs_layout, @@ -5008,6 +5015,11 @@ static int qcom_qmp_phy_com_init(struct qmp_phy *qphy) return 0; } + if (cfg->vreg_enable_load) { + for (i = cfg->num_vregs - 1; i >= 0; --i) + regulator_set_load(qmp->vregs[i].consumer, cfg->vreg_enable_load[i]); + } + /* turn on regulator supplies */ ret = regulator_bulk_enable(cfg->num_vregs, qmp->vregs); if (ret) { @@ -5116,6 +5128,7 @@ static int qcom_qmp_phy_com_exit(struct qmp_phy *qphy) clk_bulk_disable_unprepare(cfg->num_clks, qmp->clks); + /* no minimum load set required before disable regulator */ regulator_bulk_disable(cfg->num_vregs, qmp->vregs); mutex_unlock(&qmp->phy_mutex); -- The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project
next prev parent reply other threads:[~2022-05-18 16:43 UTC|newest] Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top 2022-05-18 16:43 [PATCH v2 0/2] eDP/DP Phy vdda realted function Kuogee Hsieh 2022-05-18 16:43 ` Kuogee Hsieh 2022-05-18 16:43 ` Kuogee Hsieh [this message] 2022-05-18 16:43 ` [PATCH v2 1/2] phy/qcom: add regulator_set_load to edp/dp phy Kuogee Hsieh 2022-05-18 17:12 ` Dmitry Baryshkov 2022-05-18 17:12 ` Dmitry Baryshkov 2022-05-18 17:36 ` Kuogee Hsieh 2022-05-18 17:36 ` Kuogee Hsieh 2022-05-18 17:52 ` Dmitry Baryshkov 2022-05-18 17:52 ` Dmitry Baryshkov 2022-05-18 18:27 ` Kuogee Hsieh 2022-05-18 18:27 ` Kuogee Hsieh 2022-05-18 16:43 ` [PATCH v2 2/2] drm/msm/dp: delete vdda regulator related functions from eDP/DP controller Kuogee Hsieh 2022-05-18 16:43 ` Kuogee Hsieh 2022-05-18 17:13 ` Dmitry Baryshkov 2022-05-18 17:13 ` Dmitry Baryshkov 2022-05-18 17:16 ` [PATCH v2 0/2] eDP/DP Phy vdda realted function Dmitry Baryshkov 2022-05-18 17:16 ` Dmitry Baryshkov 2022-05-18 17:29 ` Kuogee Hsieh 2022-05-18 17:29 ` Kuogee Hsieh 2022-05-18 17:31 ` Dmitry Baryshkov 2022-05-18 17:31 ` Dmitry Baryshkov 2022-05-18 20:19 ` Kuogee Hsieh 2022-05-18 20:19 ` Kuogee Hsieh
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1652892186-22346-2-git-send-email-quic_khsieh@quicinc.com \ --to=quic_khsieh@quicinc.com \ --cc=agross@kernel.org \ --cc=airlied@linux.ie \ --cc=bjorn.andersson@linaro.org \ --cc=daniel@ffwll.ch \ --cc=dianders@chromium.org \ --cc=dmitry.baryshkov@linaro.org \ --cc=dri-devel@lists.freedesktop.org \ --cc=freedreno@lists.freedesktop.org \ --cc=linux-arm-msm@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=quic_abhinavk@quicinc.com \ --cc=quic_aravindh@quicinc.com \ --cc=quic_sbillaka@quicinc.com \ --cc=robdclark@gmail.com \ --cc=sean@poorly.run \ --cc=swboyd@chromium.org \ --cc=vkoul@kernel.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.