diff options
| author | Veera Sundaram Sankaran <veeras@codeaurora.org> | 2015-05-22 12:00:01 -0700 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 20:42:24 -0700 |
| commit | 5abc100e7a8e0aa4884f4007f82db66cab6b8722 (patch) | |
| tree | 28736870b0f9af5ddd5bc7f4ad644278b63e6ad5 | |
| parent | b9fc91fb691e6685e018f8cbe46ac80e7e682d97 (diff) | |
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 <veeras@codeaurora.org>
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_dsi_panel.c | 11 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_panel.c | 17 | ||||
| -rw-r--r-- | 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); |
