Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

imx/clk-pllv1: fix wrong do_div() usage

do_div() is meant to be used with an unsigned dividend.

Signed-off-by: Nicolas Pitre <nico@linaro.org>
Acked-by: Shawn Guo <shawnguo@kernel.org>
Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>

authored by

Nicolas Pitre and committed by
Stephen Boyd
741e96e8 c6bb9cec

+7 -7
+7 -7
drivers/clk/imx/clk-pllv1.c
··· 52 52 unsigned long parent_rate) 53 53 { 54 54 struct clk_pllv1 *pll = to_clk_pllv1(hw); 55 - long long ll; 55 + unsigned long long ull; 56 56 int mfn_abs; 57 57 unsigned int mfi, mfn, mfd, pd; 58 58 u32 reg; ··· 94 94 rate = parent_rate * 2; 95 95 rate /= pd + 1; 96 96 97 - ll = (unsigned long long)rate * mfn_abs; 97 + ull = (unsigned long long)rate * mfn_abs; 98 98 99 - do_div(ll, mfd + 1); 99 + do_div(ull, mfd + 1); 100 100 101 101 if (mfn_is_negative(pll, mfn)) 102 - ll = -ll; 102 + ull = (rate * mfi) - ull; 103 + else 104 + ull = (rate * mfi) + ull; 103 105 104 - ll = (rate * mfi) + ll; 105 - 106 - return ll; 106 + return ull; 107 107 } 108 108 109 109 static struct clk_ops clk_pllv1_ops = {