mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-18 09:44:18 +08:00
clk: mmp: fix the wrong calculation formula
The formula is numerator/denominator = Fin / (Fout * factor) So Fout = Fin * denominator / (numerator * factor). Current clk_factor_round_rate and clk_factor_recalc_rate use wrong formula. This patch will fix them. Signed-off-by: Chao Xie <chao.xie@marvell.com> Signed-off-by: Mike Turquette <mturquette@linaro.org>
This commit is contained in:
parent
7433ab43fa
commit
c45693a648
@ -40,12 +40,12 @@ static long clk_factor_round_rate(struct clk_hw *hw, unsigned long drate,
|
||||
|
||||
for (i = 0; i < factor->ftbl_cnt; i++) {
|
||||
prev_rate = rate;
|
||||
rate = (((*prate / 10000) * factor->ftbl[i].num) /
|
||||
(factor->ftbl[i].den * factor->masks->factor)) * 10000;
|
||||
rate = (((*prate / 10000) * factor->ftbl[i].den) /
|
||||
(factor->ftbl[i].num * factor->masks->factor)) * 10000;
|
||||
if (rate > drate)
|
||||
break;
|
||||
}
|
||||
if (i == 0)
|
||||
if ((i == 0) || (i == factor->ftbl_cnt))
|
||||
return rate;
|
||||
else
|
||||
return prev_rate;
|
||||
@ -85,8 +85,8 @@ static int clk_factor_set_rate(struct clk_hw *hw, unsigned long drate,
|
||||
|
||||
for (i = 0; i < factor->ftbl_cnt; i++) {
|
||||
prev_rate = rate;
|
||||
rate = (((prate / 10000) * factor->ftbl[i].num) /
|
||||
(factor->ftbl[i].den * factor->masks->factor)) * 10000;
|
||||
rate = (((prate / 10000) * factor->ftbl[i].den) /
|
||||
(factor->ftbl[i].num * factor->masks->factor)) * 10000;
|
||||
if (rate > drate)
|
||||
break;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user