diff --git a/msm/dsi/dsi_display.c b/msm/dsi/dsi_display.c index e1a9e8ba2c58..5434bf83379e 100644 --- a/msm/dsi/dsi_display.c +++ b/msm/dsi/dsi_display.c @@ -5931,7 +5931,7 @@ void dsi_display_adjust_mode_timing( struct dsi_display_mode *dsi_mode, int lanes, int bpp) { - u32 new_htotal, new_vtotal, htotal, vtotal, old_htotal; + u64 new_htotal, new_vtotal, htotal, vtotal, old_htotal, div; if (!dyn_clk_caps->maintain_const_fps) return; @@ -5946,8 +5946,9 @@ void dsi_display_adjust_mode_timing( case DSI_DYN_CLK_TYPE_CONST_FPS_ADJUST_HFP: vtotal = DSI_V_TOTAL(&dsi_mode->timing); old_htotal = dsi_h_total_dce(&dsi_mode->timing); - new_htotal = (dsi_mode->timing.clk_rate_hz * lanes); - new_htotal /= (bpp * vtotal * dsi_mode->timing.refresh_rate); + new_htotal = dsi_mode->timing.clk_rate_hz * lanes; + div = bpp * vtotal * dsi_mode->timing.refresh_rate; + do_div(new_htotal, div); if (old_htotal > new_htotal) dsi_mode->timing.h_front_porch -= (old_htotal - new_htotal); @@ -5958,8 +5959,9 @@ void dsi_display_adjust_mode_timing( case DSI_DYN_CLK_TYPE_CONST_FPS_ADJUST_VFP: htotal = dsi_h_total_dce(&dsi_mode->timing); - new_vtotal = (dsi_mode->timing.clk_rate_hz * lanes); - new_vtotal /= (bpp * htotal * dsi_mode->timing.refresh_rate); + new_vtotal = dsi_mode->timing.clk_rate_hz * lanes; + div = bpp * htotal * dsi_mode->timing.refresh_rate; + do_div(new_vtotal, div); dsi_mode->timing.v_front_porch = new_vtotal - dsi_mode->timing.v_back_porch - dsi_mode->timing.v_sync_width -