summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVeera Sundaram Sankaran <veeras@codeaurora.org>2015-05-22 12:00:01 -0700
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 20:42:24 -0700
commit5abc100e7a8e0aa4884f4007f82db66cab6b8722 (patch)
tree28736870b0f9af5ddd5bc7f4ad644278b63e6ad5
parentb9fc91fb691e6685e018f8cbe46ac80e7e682d97 (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.c11
-rw-r--r--drivers/video/fbdev/msm/mdss_panel.c17
-rw-r--r--drivers/video/fbdev/msm/mdss_panel.h7
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);