|
@@ -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 -
|