summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-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;
}