mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 03:40:35 +09:00
clk: rockchip: fix up the frac clk get rate error
support fractional divider with only one level parent clock Change-Id: I6593f908edf4454ef03255080bf9ac1d72c6f64e Signed-off-by: Elaine Zhang <zhangqing@rock-chips.com>
This commit is contained in:
@@ -195,16 +195,21 @@ static void rockchip_fractional_approximation(struct clk_hw *hw,
|
||||
if (((rate * 20 > p_rate) && (p_rate % rate != 0)) ||
|
||||
(fd->max_prate && fd->max_prate < p_rate)) {
|
||||
p_parent = clk_hw_get_parent(clk_hw_get_parent(hw));
|
||||
p_parent_rate = clk_hw_get_rate(p_parent);
|
||||
*parent_rate = p_parent_rate;
|
||||
if (fd->max_prate && p_parent_rate > fd->max_prate) {
|
||||
div = DIV_ROUND_UP(p_parent_rate, fd->max_prate);
|
||||
*parent_rate = p_parent_rate / div;
|
||||
if (!p_parent) {
|
||||
*parent_rate = p_rate;
|
||||
} else {
|
||||
p_parent_rate = clk_hw_get_rate(p_parent);
|
||||
*parent_rate = p_parent_rate;
|
||||
if (fd->max_prate && p_parent_rate > fd->max_prate) {
|
||||
div = DIV_ROUND_UP(p_parent_rate,
|
||||
fd->max_prate);
|
||||
*parent_rate = p_parent_rate / div;
|
||||
}
|
||||
}
|
||||
|
||||
if (*parent_rate < rate * 20) {
|
||||
pr_err("%s parent_rate(%ld) is low than rate(%ld)*20, fractional div is not allowed\n",
|
||||
clk_hw_get_name(hw), *parent_rate, rate);
|
||||
pr_warn("%s p_rate(%ld) is low than rate(%ld)*20, use integer or half-div\n",
|
||||
clk_hw_get_name(hw), *parent_rate, rate);
|
||||
*m = 0;
|
||||
*n = 1;
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user