diff options
| author | Ingrid Gallardo <ingridg@codeaurora.org> | 2016-03-22 17:14:39 -0700 |
|---|---|---|
| committer | Kyle Yan <kyan@codeaurora.org> | 2016-04-28 16:43:05 -0700 |
| commit | 40783c97f5d6f398e253a3a00a0bb213bc925b4a (patch) | |
| tree | 2a12417c864df68cf0b37c04de174fb1a23808dc | |
| parent | 43270c072ec5cb25e378367c2be34d2a5d3a2f84 (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.c | 8 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_panel.h | 11 |
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; } |
