u8 lanes = msm_host->lanes;
        u32 bpp = dsi_get_bpp(msm_host->format);
        unsigned long pclk_rate = dsi_get_pclk_rate(mode, is_bonded_dsi);
-       u64 pclk_bpp = (u64)pclk_rate * bpp;
+       unsigned long pclk_bpp;
 
        if (lanes == 0) {
                pr_err("%s: forcing mdss_dsi lanes to 1\n", __func__);
 
        /* CPHY "byte_clk" is in units of 16 bits */
        if (msm_host->cphy_mode)
-               do_div(pclk_bpp, (16 * lanes));
+               pclk_bpp = mult_frac(pclk_rate, bpp, 16 * lanes);
        else
-               do_div(pclk_bpp, (8 * lanes));
+               pclk_bpp = mult_frac(pclk_rate, bpp, 8 * lanes);
 
        return pclk_bpp;
 }
 int dsi_calc_clk_rate_v2(struct msm_dsi_host *msm_host, bool is_bonded_dsi)
 {
        u32 bpp = dsi_get_bpp(msm_host->format);
-       u64 pclk_bpp;
        unsigned int esc_mhz, esc_div;
        unsigned long byte_mhz;
 
        dsi_calc_pclk(msm_host, is_bonded_dsi);
 
-       pclk_bpp = (u64)msm_host->pixel_clk_rate * bpp;
-       do_div(pclk_bpp, 8);
-       msm_host->src_clk_rate = pclk_bpp;
+       msm_host->src_clk_rate = mult_frac(msm_host->pixel_clk_rate, bpp, 8);
 
        /*
         * esc clock is byte clock followed by a 4 bit divider,