summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIngrid Gallardo <ingridg@codeaurora.org>2015-11-19 17:37:32 -0800
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 21:11:58 -0700
commitaae5800a7a6e585bbc0bb8db54845dbca3fe1c07 (patch)
treef1b4ba6f872baf41ae8b6a7773ab0edebd58f571
parent4fc3b982ec6271c489ca119139bd2fc32437b09f (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.c9
-rw-r--r--drivers/video/fbdev/msm/mdss_dsi_panel.c1
-rw-r--r--drivers/video/fbdev/msm/mdss_mdp_ctl.c3
-rw-r--r--drivers/video/fbdev/msm/mdss_mdp_overlay.c3
-rw-r--r--drivers/video/fbdev/msm/msm_mdss_io_8974.c14
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;