summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Salido-Moreno <adrianm@codeaurora.org>2012-11-05 14:48:03 -0800
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 20:13:11 -0700
commitac5bb105f568f847a77ebc11442aa2fe08161141 (patch)
tree83474afc2bcb981ca9ad1609fc3c4a739fad02a9
parentc8ec555baebf2e1779caca2503bb0756b64c0195 (diff)
msm: mdss: correctly handle panel power on failure
Check panel power on return code and correctly revert any interface initialization if any error occurs. CRs-Fixed: 417959 Change-Id: I4ad644b16efd51e5e8b3be1393c39195687feb8a Signed-off-by: Adrian Salido-Moreno <adrianm@codeaurora.org>
-rw-r--r--drivers/video/fbdev/msm/mdss_mdp_ctl.c26
1 files changed, 18 insertions, 8 deletions
diff --git a/drivers/video/fbdev/msm/mdss_mdp_ctl.c b/drivers/video/fbdev/msm/mdss_mdp_ctl.c
index a793c2c2126c..5e3924810eac 100644
--- a/drivers/video/fbdev/msm/mdss_mdp_ctl.c
+++ b/drivers/video/fbdev/msm/mdss_mdp_ctl.c
@@ -569,6 +569,17 @@ int mdss_mdp_ctl_on(struct msm_fb_data_type *mfd)
goto start_fail;
}
+ /* request bus bandwidth for panel commands */
+ ctl->clk_rate = MDP_CLK_DEFAULT_RATE;
+ ctl->bus_ib_quota = SZ_1M;
+ mdss_mdp_ctl_perf_commit(MDSS_MDP_PERF_UPDATE_ALL);
+
+ ret = pdata->on(pdata);
+ if (ret) {
+ pr_err("panel power on failed ctl=%d\n", ctl->num);
+ goto panel_fail;
+ }
+
pr_debug("ctl_num=%d\n", ctl->num);
mixer = ctl->mixer_left;
@@ -596,17 +607,16 @@ int mdss_mdp_ctl_on(struct msm_fb_data_type *mfd)
MDSS_MDP_REG_WRITE(off + MDSS_MDP_REG_LM_OUT_SIZE, outsize);
mdss_mdp_ctl_write(ctl, MDSS_MDP_REG_CTL_PACK_3D, 0);
}
-
- /* request bus bandwidth for panel commands */
- ctl->clk_rate = MDP_CLK_DEFAULT_RATE;
- ctl->bus_ib_quota = SZ_1M;
- mdss_mdp_ctl_perf_commit(MDSS_MDP_PERF_UPDATE_ALL);
-
- ret = pdata->on(pdata);
-
+panel_fail:
+ if (ret && ctl->stop_fnc)
+ ctl->stop_fnc(ctl);
start_fail:
mdss_mdp_clk_ctrl(MDP_BLOCK_POWER_OFF, false);
mutex_unlock(&ctl->lock);
+ if (ret) {
+ mdss_mdp_ctl_destroy(mfd);
+ mdss_mdp_ctl_perf_commit(MDSS_MDP_PERF_UPDATE_ALL);
+ }
return ret;
}