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; }