From 5abc100e7a8e0aa4884f4007f82db66cab6b8722 Mon Sep 17 00:00:00 2001 From: Veera Sundaram Sankaran Date: Fri, 22 May 2015 12:00:01 -0700 Subject: msm: mdss: fix SW TE for dynamic resolution change cases The Tear check sync cfg height, in case of SW TE is calculated based on panel's height and vertical porch values. Simulator panels has the capability to change the panel resolution after bootup, which would require recalculation of tear check height. Fix the sync cfg height to be set right for all cases. Change-Id: I5d27388a20d543b5655aa07ff6681001656a61c8 Signed-off-by: Veera Sundaram Sankaran --- drivers/video/fbdev/msm/mdss_dsi_panel.c | 11 +---------- drivers/video/fbdev/msm/mdss_panel.c | 17 +++++++++++++++++ drivers/video/fbdev/msm/mdss_panel.h | 7 +++++++ 3 files changed, 25 insertions(+), 10 deletions(-) diff --git a/drivers/video/fbdev/msm/mdss_dsi_panel.c b/drivers/video/fbdev/msm/mdss_dsi_panel.c index 3847d62ff887..017bac29cf3c 100644 --- a/drivers/video/fbdev/msm/mdss_dsi_panel.c +++ b/drivers/video/fbdev/msm/mdss_dsi_panel.c @@ -1290,16 +1290,7 @@ static void mdss_panel_parse_te_params(struct device_node *np, /* override te parameters if panel is in sw te mode */ if (panel_info->sim_panel_mode == SIM_SW_TE_MODE) { - panel_info->te.sync_cfg_height = panel_info->yres - + panel_info->lcdc.v_front_porch - + panel_info->lcdc.v_back_porch; - panel_info->te.vsync_init_val = 0; - panel_info->te.start_pos = 5; - panel_info->te.rd_ptr_irq = 1; - pr_debug("SW TE override: read_ptr:%d,start_pos:%d,height:%d,init_val:%d\n", - panel_info->te.rd_ptr_irq, panel_info->te.start_pos, - panel_info->te.sync_cfg_height, - panel_info->te.vsync_init_val); + mdss_panel_override_te_params(panel_info); } else { rc = of_property_read_u32 (np, "qcom,mdss-tear-check-sync-cfg-height", &tmp); diff --git a/drivers/video/fbdev/msm/mdss_panel.c b/drivers/video/fbdev/msm/mdss_panel.c index afac91a35bc9..3ee449afad87 100644 --- a/drivers/video/fbdev/msm/mdss_panel.c +++ b/drivers/video/fbdev/msm/mdss_panel.c @@ -504,6 +504,18 @@ void mdss_panel_debugfs_cleanup(struct mdss_panel_info *panel_info) pr_debug("Cleaned up mdss_panel_debugfs_info\n"); } +void mdss_panel_override_te_params(struct mdss_panel_info *pinfo) +{ + pinfo->te.sync_cfg_height = mdss_panel_get_vtotal(pinfo); + pinfo->te.vsync_init_val = 0; + pinfo->te.start_pos = 5; + pinfo->te.rd_ptr_irq = 1; + pr_debug("SW TE override: read_ptr:%d,start_pos:%d,height:%d,init_val:%d\n", + pinfo->te.rd_ptr_irq, pinfo->te.start_pos, + pinfo->te.sync_cfg_height, + pinfo->te.vsync_init_val); +} + void mdss_panel_debugfsinfo_to_panelinfo(struct mdss_panel_info *panel_info) { struct mdss_panel_data *pdata; @@ -550,6 +562,11 @@ void mdss_panel_debugfsinfo_to_panelinfo(struct mdss_panel_info *panel_info) } pinfo->panel_max_vtotal = mdss_panel_get_vtotal(pinfo); + + /* override te parameters if panel is in sw te mode */ + if (panel_info->sim_panel_mode == SIM_SW_TE_MODE) + mdss_panel_override_te_params(panel_info); + pdata = pdata->next; } while (pdata); } diff --git a/drivers/video/fbdev/msm/mdss_panel.h b/drivers/video/fbdev/msm/mdss_panel.h index 314e01de3fb7..dda3789d67c1 100644 --- a/drivers/video/fbdev/msm/mdss_panel.h +++ b/drivers/video/fbdev/msm/mdss_panel.h @@ -775,6 +775,13 @@ int mdss_panel_get_boot_cfg(void); */ bool mdss_is_ready(void); int mdss_rect_cmp(struct mdss_rect *rect1, struct mdss_rect *rect2); + +/** + * mdss_panel_override_te_params() - overrides TE params to enable SW TE + * @pinfo: panel info + */ +void mdss_panel_override_te_params(struct mdss_panel_info *pinfo); + #ifdef CONFIG_FB_MSM_MDSS int mdss_panel_debugfs_init(struct mdss_panel_info *panel_info); void mdss_panel_debugfs_cleanup(struct mdss_panel_info *panel_info); -- cgit v1.2.3