From 4a85d3152c0274afd2bc52159ea4bf515d086b69 Mon Sep 17 00:00:00 2001 From: Satya Rama Aditya Pinapala Date: Tue, 17 Mar 2020 16:49:03 -0700 Subject: [PATCH] disp: msm: dsi: Fix porch calculation issue for constant fps For constant fps feature, porch is calculated based on supported clk rates. Currently, data type of local variables used for porch calculation is u32 which leads to incorrect porch calculation for higher clk rates. So, update the data type to u64. Change-Id: I8eb04487d1dcce05989448c0b063e56752af412b Signed-off-by: Lipsa Rout Signed-off-by: Ritesh Kumar Signed-off-by: Satya Rama Aditya Pinapala --- msm/dsi/dsi_display.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/msm/dsi/dsi_display.c b/msm/dsi/dsi_display.c index e1a9e8ba2c..5434bf8337 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 -