diff options
author | Icenowy Zheng <icenowy@aosc.xyz> | 2017-03-18 04:19:43 +0800 |
---|---|---|
committer | Maxime Ripard <maxime.ripard@free-electrons.com> | 2017-03-20 10:34:05 +0100 |
commit | b467e08a15563dede0d37d3233baa24fb97a7310 (patch) | |
tree | 4e8e49c564442885d61aa02141932aa71a378eae | |
parent | fe686babf4cf62b9b214b99847c735baa35a9fa2 (diff) | |
download | linux-stable-b467e08a15563dede0d37d3233baa24fb97a7310.tar.gz linux-stable-b467e08a15563dede0d37d3233baa24fb97a7310.tar.bz2 linux-stable-b467e08a15563dede0d37d3233baa24fb97a7310.zip |
clk: sunxi-ng: fix recalc_rate formula of NKMP clocks
In commit e66f81bbd746 ("clk: sunxi-ng: Implement factors offsets"), the
final formula of NKMP clocks' recalc_rate is refactored; however, the
refactored formula broke the calculation due to some C language operand
priority problem -- the priority of operand >> is lower than * and /,
makes the formula being parsed as "(parent_rate * n * k) >> (p / m)", but
it should be "(parent_rate * n * k >> p) / m".
Add the pair of parentheses to fix up this issue. This pair of
parentheses used to exist in the old formula.
Fixes: e66f81bbd746 ("clk: sunxi-ng: Implement factors offsets")
Signed-off-by: Icenowy Zheng <icenowy@aosc.xyz>
Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
-rw-r--r-- | drivers/clk/sunxi-ng/ccu_nkmp.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/clk/sunxi-ng/ccu_nkmp.c b/drivers/clk/sunxi-ng/ccu_nkmp.c index a2b40a000157..488055ed944f 100644 --- a/drivers/clk/sunxi-ng/ccu_nkmp.c +++ b/drivers/clk/sunxi-ng/ccu_nkmp.c @@ -107,7 +107,7 @@ static unsigned long ccu_nkmp_recalc_rate(struct clk_hw *hw, p = reg >> nkmp->p.shift; p &= (1 << nkmp->p.width) - 1; - return parent_rate * n * k >> p / m; + return (parent_rate * n * k >> p) / m; } static long ccu_nkmp_round_rate(struct clk_hw *hw, unsigned long rate, |