]> git.baikalelectronics.ru Git - kernel.git/commitdiff
remoteproc: qcom_q6v5_pas: Deal silently with optional px and cx regulators
authorAbel Vesa <abel.vesa@linaro.org>
Wed, 13 Jul 2022 15:28:35 +0000 (18:28 +0300)
committerBjorn Andersson <bjorn.andersson@linaro.org>
Mon, 18 Jul 2022 20:32:34 +0000 (15:32 -0500)
Use _get_optional as some platforms might not provide the px
and cx regulators. This avoids printing the following for each
unavailable regulator:

[    4.350229] qcom_q6v5_pas 5c00000.remoteproc: supply cx not found,
using dummy regulator
[    4.374224] qcom_q6v5_pas 5c00000.remoteproc: supply px not found,
using dummy regulator

Signed-off-by: Abel Vesa <abel.vesa@linaro.org>
Acked-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Link: https://lore.kernel.org/r/20220713152835.3848875-1-abel.vesa@linaro.org
drivers/remoteproc/qcom_q6v5_pas.c

index d103101a5ea0a29e37f3962e2c6c03e9d6d374a8..98f133f9bb600aa30591af83aea7e8f7ecdbb3a8 100644 (file)
@@ -206,13 +206,17 @@ static int adsp_start(struct rproc *rproc)
        if (ret)
                goto disable_xo_clk;
 
-       ret = regulator_enable(adsp->cx_supply);
-       if (ret)
-               goto disable_aggre2_clk;
+       if (adsp->cx_supply) {
+               ret = regulator_enable(adsp->cx_supply);
+               if (ret)
+                       goto disable_aggre2_clk;
+       }
 
-       ret = regulator_enable(adsp->px_supply);
-       if (ret)
-               goto disable_cx_supply;
+       if (adsp->px_supply) {
+               ret = regulator_enable(adsp->px_supply);
+               if (ret)
+                       goto disable_cx_supply;
+       }
 
        ret = qcom_scm_pas_auth_and_reset(adsp->pas_id);
        if (ret) {
@@ -233,9 +237,11 @@ static int adsp_start(struct rproc *rproc)
        return 0;
 
 disable_px_supply:
-       regulator_disable(adsp->px_supply);
+       if (adsp->px_supply)
+               regulator_disable(adsp->px_supply);
 disable_cx_supply:
-       regulator_disable(adsp->cx_supply);
+       if (adsp->cx_supply)
+               regulator_disable(adsp->cx_supply);
 disable_aggre2_clk:
        clk_disable_unprepare(adsp->aggre2_clk);
 disable_xo_clk:
@@ -252,8 +258,10 @@ static void qcom_pas_handover(struct qcom_q6v5 *q6v5)
 {
        struct qcom_adsp *adsp = container_of(q6v5, struct qcom_adsp, q6v5);
 
-       regulator_disable(adsp->px_supply);
-       regulator_disable(adsp->cx_supply);
+       if (adsp->px_supply)
+               regulator_disable(adsp->px_supply);
+       if (adsp->cx_supply)
+               regulator_disable(adsp->cx_supply);
        clk_disable_unprepare(adsp->aggre2_clk);
        clk_disable_unprepare(adsp->xo);
        adsp_pds_disable(adsp, adsp->proxy_pds, adsp->proxy_pd_count);
@@ -353,13 +361,13 @@ static int adsp_init_clock(struct qcom_adsp *adsp)
 
 static int adsp_init_regulator(struct qcom_adsp *adsp)
 {
-       adsp->cx_supply = devm_regulator_get(adsp->dev, "cx");
+       adsp->cx_supply = devm_regulator_get_optional(adsp->dev, "cx");
        if (IS_ERR(adsp->cx_supply))
                return PTR_ERR(adsp->cx_supply);
 
        regulator_set_load(adsp->cx_supply, 100000);
 
-       adsp->px_supply = devm_regulator_get(adsp->dev, "px");
+       adsp->px_supply = devm_regulator_get_optional(adsp->dev, "px");
        return PTR_ERR_OR_ZERO(adsp->px_supply);
 }