summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIngrid Gallardo <ingridg@codeaurora.org>2016-03-22 17:14:39 -0700
committerKyle Yan <kyan@codeaurora.org>2016-04-28 16:43:05 -0700
commit40783c97f5d6f398e253a3a00a0bb213bc925b4a (patch)
tree2a12417c864df68cf0b37c04de174fb1a23808dc
parent43270c072ec5cb25e378367c2be34d2a5d3a2f84 (diff)
msm: mdss: fix frame rate calculation for resolution switch
Current resolution switch calculation is using the wrong values for the fps calculation. Correct the values, by using the correct pixel clock value and adjusting if dsc is enabled as well as use the default fps, for panels where default frame rate is not 60. Change-Id: I4be0a9d5d163b0630e8cfeb930e72c32f487ccb1 Signed-off-by: Ingrid Gallardo <ingridg@codeaurora.org> Signed-off-by: Sandeep Panda <spanda@codeaurora.org>
-rw-r--r--drivers/video/fbdev/msm/mdss_fb.c8
-rw-r--r--drivers/video/fbdev/msm/mdss_panel.h11
2 files changed, 16 insertions, 3 deletions
diff --git a/drivers/video/fbdev/msm/mdss_fb.c b/drivers/video/fbdev/msm/mdss_fb.c
index bc24059adb51..4a7be5416acb 100644
--- a/drivers/video/fbdev/msm/mdss_fb.c
+++ b/drivers/video/fbdev/msm/mdss_fb.c
@@ -3367,6 +3367,14 @@ static void mdss_fb_var_to_panelinfo(struct fb_var_screeninfo *var,
pinfo->clk_rate = var->pixclock;
else
pinfo->clk_rate = PICOS2KHZ(var->pixclock) * 1000;
+
+ /*
+ * if it is a DBA panel i.e. HDMI TV connected through
+ * DSI interface, then store the pixel clock value in
+ * DSI specific variable.
+ */
+ if (pinfo->is_dba_panel)
+ pinfo->mipi.dsi_pclk_rate = pinfo->clk_rate;
}
void mdss_panelinfo_to_fb_var(struct mdss_panel_info *pinfo,
diff --git a/drivers/video/fbdev/msm/mdss_panel.h b/drivers/video/fbdev/msm/mdss_panel.h
index 7c3e2cea58ef..12945edd93e8 100644
--- a/drivers/video/fbdev/msm/mdss_panel.h
+++ b/drivers/video/fbdev/msm/mdss_panel.h
@@ -956,12 +956,17 @@ static inline u8 mdss_panel_calc_frame_rate(struct mdss_panel_info *pinfo)
{
u32 pixel_total = 0;
u8 frame_rate = 0;
- unsigned long pclk_rate = pinfo->clk_rate;
+ unsigned long pclk_rate = pinfo->mipi.dsi_pclk_rate;
+ u32 xres;
+
+ xres = pinfo->xres;
+ if (pinfo->compression_mode == COMPRESSION_DSC)
+ xres /= 3;
pixel_total = (pinfo->lcdc.h_back_porch +
pinfo->lcdc.h_front_porch +
pinfo->lcdc.h_pulse_width +
- pinfo->xres) *
+ xres) *
(pinfo->lcdc.v_back_porch +
pinfo->lcdc.v_front_porch +
pinfo->lcdc.v_pulse_width +
@@ -971,7 +976,7 @@ static inline u8 mdss_panel_calc_frame_rate(struct mdss_panel_info *pinfo)
frame_rate =
DIV_ROUND_CLOSEST(pclk_rate, pixel_total);
else
- frame_rate = DEFAULT_FRAME_RATE;
+ frame_rate = pinfo->panel_max_fps;
return frame_rate;
}