From c0ae920e8bcff905811f37b7c8b07d6ef2e7d2cd Mon Sep 17 00:00:00 2001 From: Terence Hampson Date: Fri, 11 Sep 2015 16:34:51 -0400 Subject: [PATCH] msm: mdss: fix flicker during DSI mode switch Resolve regression change I65ca10c2adad21637f8414784986aa15026fd774. DSI mode switch should not be calling mdss_dsi_ctrl_setup prior to issuing panel switch commands. Change-Id: I95eb9768d8bf64251466baaa371d6c12bb699410 Signed-off-by: Terence Hampson --- drivers/video/fbdev/msm/mdss_dsi.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/video/fbdev/msm/mdss_dsi.c b/drivers/video/fbdev/msm/mdss_dsi.c index f51f80b6a502..460b2ed0d47b 100644 --- a/drivers/video/fbdev/msm/mdss_dsi.c +++ b/drivers/video/fbdev/msm/mdss_dsi.c @@ -1086,6 +1086,7 @@ int mdss_dsi_switch_mode(struct mdss_panel_data *pdata, int mode) { struct mdss_dsi_ctrl_pdata *ctrl_pdata = NULL; struct mipi_panel_info *pinfo; + bool dsi_ctrl_setup_needed = false; if (!pdata) { pr_err("%s: Invalid input data\n", __func__); @@ -1108,6 +1109,7 @@ int mdss_dsi_switch_mode(struct mdss_panel_data *pdata, int mode) } else if (mode == MIPI_CMD_PANEL) { mode = SWITCH_TO_CMD_MODE; } else if (mode == SWITCH_RESOLUTION) { + dsi_ctrl_setup_needed = true; pr_debug("Resolution switch mode selected\n"); } else { pr_err("Invalid mode selected, mode=%d\n", mode); @@ -1116,7 +1118,8 @@ int mdss_dsi_switch_mode(struct mdss_panel_data *pdata, int mode) mdss_dsi_clk_ctrl(ctrl_pdata, ctrl_pdata->dsi_clk_handle, MDSS_DSI_ALL_CLKS, MDSS_DSI_CLK_ON); - mdss_dsi_ctrl_setup(ctrl_pdata); + if (dsi_ctrl_setup_needed) + mdss_dsi_ctrl_setup(ctrl_pdata); ctrl_pdata->switch_mode(pdata, mode); mdss_dsi_clk_ctrl(ctrl_pdata, ctrl_pdata->dsi_clk_handle, MDSS_DSI_ALL_CLKS, MDSS_DSI_CLK_OFF);