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:
parent
4fc3b982ec
commit
aae5800a7a
5 changed files with 20 additions and 10 deletions
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Reference in a new issue