diff --git a/msm/dsi/dsi_panel.c b/msm/dsi/dsi_panel.c index 39eb8ee5d3..e4143a5152 100644 --- a/msm/dsi/dsi_panel.c +++ b/msm/dsi/dsi_panel.c @@ -4014,6 +4014,7 @@ void dsi_panel_calc_dsi_transfer_time(struct dsi_host_common_cfg *config, struct dsi_mode_info *timing = &mode->timing; struct dsi_display_mode *display_mode; u32 jitter_numer, jitter_denom, prefill_lines; + u32 default_prefill_lines, actual_prefill_lines, vtotal; u32 min_threshold_us, prefill_time_us, max_transfer_us, packet_overhead; u16 bpp; @@ -4077,11 +4078,15 @@ void dsi_panel_calc_dsi_transfer_time(struct dsi_host_common_cfg *config, * Increase the prefill_lines proportionately as recommended * 40lines for 60fps, 60 for 90fps, 120lines for 120fps, and so on. */ - prefill_lines = mult_frac(MIN_PREFILL_LINES, - timing->refresh_rate, 60); + default_prefill_lines = mult_frac(MIN_PREFILL_LINES, timing->refresh_rate, 60); - prefill_time_us = mult_frac(frame_time_us, prefill_lines, - (timing->v_active)); + actual_prefill_lines = timing->v_back_porch + timing->v_front_porch + timing->v_sync_width; + vtotal = actual_prefill_lines + timing->v_active; + + /* consider the max of default prefill lines and actual prefill lines */ + prefill_lines = max(actual_prefill_lines, default_prefill_lines); + + prefill_time_us = mult_frac(frame_time_us, prefill_lines, vtotal); min_threshold_us = min_threshold_us + prefill_time_us;