Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a93872da authored by Veera Sundaram Sankaran's avatar Veera Sundaram Sankaran Committed by Matt Wagantall
Browse files

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: default avatarVeera Sundaram Sankaran <veeras@codeaurora.org>
parent 19f53169
Loading
Loading
Loading
Loading
+1 −10
Original line number Diff line number Diff line
@@ -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);
+17 −0
Original line number Diff line number Diff line
@@ -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);
}
+7 −0
Original line number Diff line number Diff line
@@ -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);