mirror of
https://github.com/followmsi/android_kernel_google_msm.git
synced 2024-11-06 23:17:41 +00:00
msm_fb: display: Send pixel data while sending on/off commands
To avoid LCD off sequence violeation for some LCD vendors, we need to keep sending video data during off/sleep commands. This fixes issues seen while going to a suspend. Crs-Fixed: 445707 Change-Id: I0ba2704502e8959d0f82deea60481cd5b1f0be20 Signed-off-by: Siddhartha Agrawal <agrawals@codeaurora.org>
This commit is contained in:
parent
a76e7e31e0
commit
90f633305e
3 changed files with 35 additions and 14 deletions
|
@ -2377,6 +2377,22 @@ static int mdp_on(struct platform_device *pdev)
|
|||
|
||||
pr_debug("%s:+\n", __func__);
|
||||
|
||||
if (!(mfd->cont_splash_done)) {
|
||||
if (mfd->panel.type == MIPI_VIDEO_PANEL)
|
||||
mdp4_dsi_video_splash_done();
|
||||
|
||||
/* Clks are enabled in probe.
|
||||
Disabling clocks now */
|
||||
mdp_clk_ctrl(0);
|
||||
mfd->cont_splash_done = 1;
|
||||
}
|
||||
|
||||
mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_ON, FALSE);
|
||||
|
||||
ret = panel_next_on(pdev);
|
||||
mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_OFF, FALSE);
|
||||
|
||||
|
||||
if (mdp_rev >= MDP_REV_40) {
|
||||
mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_ON, FALSE);
|
||||
mdp_clk_ctrl(1);
|
||||
|
@ -2405,11 +2421,6 @@ static int mdp_on(struct platform_device *pdev)
|
|||
atomic_set(&vsync_cntrl.suspend, 1);
|
||||
}
|
||||
|
||||
mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_ON, FALSE);
|
||||
|
||||
ret = panel_next_on(pdev);
|
||||
mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_OFF, FALSE);
|
||||
|
||||
mdp_histogram_ctrl_all(TRUE);
|
||||
|
||||
if (ret == 0)
|
||||
|
|
|
@ -783,6 +783,7 @@ int mdp4_dsi_cmd_on(struct platform_device *pdev);
|
|||
int mdp4_dsi_cmd_off(struct platform_device *pdev);
|
||||
int mdp4_dsi_video_off(struct platform_device *pdev);
|
||||
int mdp4_dsi_video_on(struct platform_device *pdev);
|
||||
int mdp4_dsi_video_splash_done(void);
|
||||
void mdp4_primary_vsync_dsi_video(void);
|
||||
void mdp4_dsi_cmd_base_swap(int cndx, struct mdp4_overlay_pipe *pipe);
|
||||
void mdp4_dsi_cmd_wait4vsync(int cndx);
|
||||
|
@ -851,6 +852,11 @@ static inline void mdp4_overlay_dsi_video_start(void)
|
|||
{
|
||||
/* empty */
|
||||
}
|
||||
|
||||
static int mdp4_dsi_video_splash_done(void)
|
||||
{
|
||||
}
|
||||
|
||||
#ifdef CONFIG_FB_MSM_MDP40
|
||||
static inline void mdp_dsi_cmd_overlay_suspend(struct msm_fb_data_type *mfd)
|
||||
{
|
||||
|
|
|
@ -500,6 +500,19 @@ static void mdp4_dsi_video_tg_off(struct vsycn_ctrl *vctrl)
|
|||
mdp4_dsi_video_wait4vsync(0);
|
||||
}
|
||||
|
||||
int mdp4_dsi_video_splash_done(void)
|
||||
{
|
||||
struct vsycn_ctrl *vctrl;
|
||||
int cndx = 0;
|
||||
|
||||
vctrl = &vsync_ctrl_db[cndx];
|
||||
|
||||
mdp4_dsi_video_tg_off(vctrl);
|
||||
mipi_dsi_controller_cfg(0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int mdp4_dsi_video_on(struct platform_device *pdev)
|
||||
{
|
||||
int dsi_width;
|
||||
|
@ -597,15 +610,6 @@ int mdp4_dsi_video_on(struct platform_device *pdev)
|
|||
|
||||
atomic_set(&vctrl->suspend, 0);
|
||||
|
||||
if (!(mfd->cont_splash_done)) {
|
||||
mfd->cont_splash_done = 1;
|
||||
mdp4_dsi_video_tg_off(vctrl);
|
||||
mipi_dsi_controller_cfg(0);
|
||||
/* Clks are enabled in probe.
|
||||
Disabling clocks now */
|
||||
mdp_clk_ctrl(0);
|
||||
}
|
||||
|
||||
pipe->src_height = fbi->var.yres;
|
||||
pipe->src_width = fbi->var.xres;
|
||||
pipe->src_h = fbi->var.yres;
|
||||
|
|
Loading…
Reference in a new issue