From 720d736d5beea1cae7b0eac77366079e419309f0 Mon Sep 17 00:00:00 2001 From: Chandan Uddaraju Date: Tue, 8 Nov 2016 12:36:09 -0800 Subject: mdss: display-port: fix link rate calculation The current generated link rate in software doesn't consider fractional values. As a result, for few of the boundary cases, the calculated link rate is not correct. Fix this by checking for any fractional values. Change-Id: I3366b70c7e5bfa2a240aa24f1e0c70b54d686721 Signed-off-by: Chandan Uddaraju --- drivers/video/fbdev/msm/mdss_dp_aux.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/drivers/video/fbdev/msm/mdss_dp_aux.c b/drivers/video/fbdev/msm/mdss_dp_aux.c index 86cd9cada381..2884d212ffe6 100644 --- a/drivers/video/fbdev/msm/mdss_dp_aux.c +++ b/drivers/video/fbdev/msm/mdss_dp_aux.c @@ -514,7 +514,7 @@ char mdss_dp_gen_link_clk(struct mdss_panel_info *pinfo, char lane_cnt) { const u32 encoding_factx10 = 8; const u32 ln_to_link_ratio = 10; - u32 min_link_rate; + u32 min_link_rate, reminder = 0; char calc_link_rate = 0; pr_debug("clk_rate=%llu, bpp= %d, lane_cnt=%d\n", @@ -531,9 +531,15 @@ char mdss_dp_gen_link_clk(struct mdss_panel_info *pinfo, char lane_cnt) / (lane_cnt * encoding_factx10); min_link_rate /= ln_to_link_ratio; min_link_rate = (min_link_rate * pinfo->bpp); - min_link_rate = (u32)div_u64(min_link_rate * 10, - DP_LINK_RATE_MULTIPLIER); + min_link_rate = (u32)div_u64_rem(min_link_rate * 10, + DP_LINK_RATE_MULTIPLIER, &reminder); + /* + * To avoid any fractional values, + * increment the min_link_rate + */ + if (reminder) + min_link_rate += 1; pr_debug("min_link_rate = %d\n", min_link_rate); if (min_link_rate <= DP_LINK_RATE_162) -- cgit v1.2.3