clk: msm: mdss: enable pll resources once in prepare
Enable PLL resource only once in prepare. The current driver enables and
disables PLL resources multiple times during the course of prepare
routine.
Change-Id: I9fbf58e7e509dda55d8ec01ec7d305ccf1691f94
Signed-off-by: Vinu Deokaran <vinud@codeaurora.org>
diff --git a/drivers/clk/qcom/mdss/mdss-dsi-pll-8996-util.c b/drivers/clk/qcom/mdss/mdss-dsi-pll-8996-util.c
index b3fbe3b..6a83942 100644
--- a/drivers/clk/qcom/mdss/mdss-dsi-pll-8996-util.c
+++ b/drivers/clk/qcom/mdss/mdss-dsi-pll-8996-util.c
@@ -254,13 +254,6 @@
struct dsi_pll_vco_clk *vco = to_vco_clk(c);
struct mdss_pll_resources *pll = vco->priv;
- rc = mdss_pll_resource_enable(pll, true);
- if (rc) {
- pr_err("ndx=%d Failed to enable mdss dsi pll resources\n",
- pll->index);
- return rc;
- }
-
/* Try all enable sequences until one succeeds */
for (i = 0; i < vco->pll_en_seq_cnt; i++) {
rc = vco->pll_enable_seqs[i](pll);
@@ -270,12 +263,10 @@
break;
}
- if (rc) {
- mdss_pll_resource_enable(pll, false);
+ if (rc)
pr_err("ndx=%d DSI PLL failed to lock\n", pll->index);
- } else {
+ else
pll->pll_on = true;
- }
return rc;
}
@@ -901,18 +892,31 @@
return -EINVAL;
}
+ rc = mdss_pll_resource_enable(pll, true);
+ if (rc) {
+ pr_err("ndx=%d Failed to enable mdss dsi pll resources\n",
+ pll->index);
+ return rc;
+ }
+
if ((pll->vco_cached_rate != 0)
&& (pll->vco_cached_rate == c->rate)) {
rc = c->ops->set_rate(c, pll->vco_cached_rate);
if (rc) {
pr_err("index=%d vco_set_rate failed. rc=%d\n",
rc, pll->index);
+ mdss_pll_resource_enable(pll, false);
goto error;
}
}
rc = dsi_pll_enable(c);
+ if (rc) {
+ mdss_pll_resource_enable(pll, false);
+ pr_err("ndx=%d failed to enable dsi pll\n", pll->index);
+ }
+
error:
return rc;
}