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

Commit cdcf4fb5 authored by Ingrid Gallardo's avatar Ingrid Gallardo
Browse files

msm: mdss: update the correct panel info for dfps clock method



Current code does not reflect the correct panel information
when user space request the panel info and fps data
after the fps update when using the clock method.
This change fixes the code, so further calls to get
the screen info have the correct panel data, as it
is done for vfp method already.

Change-Id: I2cae33cad02f43a9b887c8bdc55aca876e47a99a
Signed-off-by: default avatarIngrid Gallardo <ingridg@codeaurora.org>
parent 9d9fb803
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -1940,10 +1940,9 @@ static int __mdss_dsi_dfps_update_clks(struct mdss_panel_data *pdata,
	clk_disable_unprepare(ctrl_pdata->pll_byte_clk);
	clk_disable_unprepare(ctrl_pdata->pll_pixel_clk);

	pinfo->mipi.frame_rate = new_fps;
	/* update new fps that at this point is already updated in hw */
	pinfo->current_fps = new_fps;
	if (sctrl_pdata) {
		spinfo->mipi.frame_rate = new_fps;
		spinfo->current_fps = new_fps;
	}

@@ -2003,8 +2002,10 @@ static int mdss_dsi_dfps_config(struct mdss_panel_data *pdata, int new_fps)
	phy_rev = mdss_dsi_get_phy_revision(ctrl_pdata);
	pinfo = &pdata->panel_info;

	frame_rate_bkp = mdss_panel_get_framerate(pinfo);
	if (new_fps == pinfo->mipi.frame_rate) {
	/* get the fps configured in HW */
	frame_rate_bkp = pinfo->current_fps;

	if (new_fps == pinfo->current_fps) {
		/*
		 * This is unlikely as mdss driver checks for previously
		 * configured frame rate.
+1 −0
Original line number Diff line number Diff line
@@ -2031,6 +2031,7 @@ static void mdss_dsi_parse_dfps_config(struct device_node *pan_node,
		pr_debug("dfps update mode not configured: disable\n");
	}
	pinfo->new_fps = pinfo->mipi.frame_rate;
	pinfo->current_fps = pinfo->mipi.frame_rate;

	return;
}
+2 −1
Original line number Diff line number Diff line
@@ -4416,7 +4416,8 @@ int mdss_mdp_ctl_update_fps(struct mdss_mdp_ctl *ctl)
	mutex_lock(&mdp5_data->dfps_lock);

	if ((pinfo->dfps_update == DFPS_IMMEDIATE_PORCH_UPDATE_MODE_VFP) ||
		(pinfo->dfps_update == DFPS_IMMEDIATE_PORCH_UPDATE_MODE_HFP)) {
		(pinfo->dfps_update == DFPS_IMMEDIATE_PORCH_UPDATE_MODE_HFP) ||
		pinfo->dfps_update == DFPS_IMMEDIATE_CLK_UPDATE_MODE) {
		new_fps = mdss_panel_get_framerate(pinfo);
	} else {
		new_fps = pinfo->new_fps;
+1 −2
Original line number Diff line number Diff line
@@ -2779,8 +2779,7 @@ static void mdss_mdp_dfps_update_params(struct mdss_panel_data *pdata,
			pdata->panel_info.saved_fporch + add_h_pixels;
		pdata->panel_info.mipi.frame_rate = new_fps;
	} else {
		/* in clock method we are not updating panel data here */
		pdata->panel_info.new_fps = new_fps;
		pdata->panel_info.mipi.frame_rate = new_fps;
	}
}

+11 −3
Original line number Diff line number Diff line
@@ -1357,6 +1357,15 @@ error:
	return rc;
}

bool is_diff_frame_rate(struct mdss_panel_info *panel_info,
	u32 frame_rate)
{
	if (panel_info->dynamic_fps && panel_info->current_fps)
		return (frame_rate != panel_info->current_fps);
	else
		return (frame_rate != panel_info->mipi.frame_rate);
}

int mdss_dsi_clk_div_config(struct mdss_panel_info *panel_info,
			    int frame_rate)
{
@@ -1395,9 +1404,8 @@ int mdss_dsi_clk_div_config(struct mdss_panel_info *panel_info,
	h_period = mdss_panel_get_htotal(panel_info, true);
	v_period = mdss_panel_get_vtotal(panel_info);

	if (ctrl_pdata->refresh_clk_rate || (frame_rate !=
	     panel_info->mipi.frame_rate) ||
	    (!panel_info->clk_rate)) {
	if (ctrl_pdata->refresh_clk_rate || is_diff_frame_rate(panel_info,
			frame_rate) || (!panel_info->clk_rate)) {
		if (lanes > 0) {
			panel_info->clk_rate = h_period * v_period * frame_rate
				* bpp * 8;