From 7c31730ea5d17b902e61758dc5f20104a56408cf Mon Sep 17 00:00:00 2001 From: Elaine Zhang Date: Thu, 24 May 2018 09:33:31 +0800 Subject: [PATCH] clk: frac-divider: fix up some frac clk freq setting error ie: clk_i2s set rate 11289600(get rate = 11289600) clk_i2s set rate 8192000(get rate = 8192000) clk_i2s set rate 11289600(get rate = 11214954) Change-Id: I042d2acdd22b56b5d8571921f63702aabffcacdd Signed-off-by: Elaine Zhang --- drivers/clk/clk-fractional-divider.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/drivers/clk/clk-fractional-divider.c b/drivers/clk/clk-fractional-divider.c index fdf625fb10fa..288633b30df8 100644 --- a/drivers/clk/clk-fractional-divider.c +++ b/drivers/clk/clk-fractional-divider.c @@ -77,13 +77,16 @@ static long clk_fd_round_rate(struct clk_hw *hw, unsigned long rate, unsigned long m, n; u64 ret; - if (!rate || rate >= *parent_rate) + if (!rate) return *parent_rate; - if (fd->approximation) + if (fd->approximation) { fd->approximation(hw, rate, parent_rate, &m, &n); - else + } else { + if (rate >= *parent_rate) + return *parent_rate; clk_fd_general_approximation(hw, rate, parent_rate, &m, &n); + } ret = (u64)*parent_rate * m; do_div(ret, n);