diff options
| author | Ingrid Gallardo <ingridg@codeaurora.org> | 2015-11-19 17:37:32 -0800 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 21:11:58 -0700 |
| commit | aae5800a7a6e585bbc0bb8db54845dbca3fe1c07 (patch) | |
| tree | f1b4ba6f872baf41ae8b6a7773ab0edebd58f571 | |
| parent | 4fc3b982ec6271c489ca119139bd2fc32437b09f (diff) | |
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>
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_dsi.c | 9 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_dsi_panel.c | 1 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp_ctl.c | 3 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp_overlay.c | 3 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/msm_mdss_io_8974.c | 14 |
5 files changed, 20 insertions, 10 deletions
diff --git a/drivers/video/fbdev/msm/mdss_dsi.c b/drivers/video/fbdev/msm/mdss_dsi.c index a171fa5bb084..51b98632c18a 100644 --- a/drivers/video/fbdev/msm/mdss_dsi.c +++ b/drivers/video/fbdev/msm/mdss_dsi.c @@ -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. diff --git a/drivers/video/fbdev/msm/mdss_dsi_panel.c b/drivers/video/fbdev/msm/mdss_dsi_panel.c index 65fe58abb248..4b7a00fbd3f2 100644 --- a/drivers/video/fbdev/msm/mdss_dsi_panel.c +++ b/drivers/video/fbdev/msm/mdss_dsi_panel.c @@ -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; } diff --git a/drivers/video/fbdev/msm/mdss_mdp_ctl.c b/drivers/video/fbdev/msm/mdss_mdp_ctl.c index 3a6748998243..7435166dbfcb 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_ctl.c +++ b/drivers/video/fbdev/msm/mdss_mdp_ctl.c @@ -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; diff --git a/drivers/video/fbdev/msm/mdss_mdp_overlay.c b/drivers/video/fbdev/msm/mdss_mdp_overlay.c index c4fa50cbdca2..d7d0e00a9741 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_overlay.c +++ b/drivers/video/fbdev/msm/mdss_mdp_overlay.c @@ -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; } } diff --git a/drivers/video/fbdev/msm/msm_mdss_io_8974.c b/drivers/video/fbdev/msm/msm_mdss_io_8974.c index a03120b8fe18..9bf2dbc6e205 100644 --- a/drivers/video/fbdev/msm/msm_mdss_io_8974.c +++ b/drivers/video/fbdev/msm/msm_mdss_io_8974.c @@ -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; |
