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: Ingrid Gallardo <ingridg@codeaurora.org>
This commit is contained in:
Ingrid Gallardo 2015-11-19 17:37:32 -08:00 committed by David Keitel
parent 4fc3b982ec
commit aae5800a7a
5 changed files with 20 additions and 10 deletions

View file

@ -1970,10 +1970,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;
}
@ -2033,8 +2032,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.

View file

@ -1733,6 +1733,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;
}

View file

@ -4677,7 +4677,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;

View file

@ -2768,8 +2768,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;
}
}

View file

@ -1365,6 +1365,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)
{
@ -1403,9 +1412,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;