diff options
| author | Adrian Salido-Moreno <adrianm@codeaurora.org> | 2012-11-05 14:48:03 -0800 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 20:13:11 -0700 |
| commit | ac5bb105f568f847a77ebc11442aa2fe08161141 (patch) | |
| tree | 83474afc2bcb981ca9ad1609fc3c4a739fad02a9 | |
| parent | c8ec555baebf2e1779caca2503bb0756b64c0195 (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.c | 26 |
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; } |
