|
@@ -32,35 +32,15 @@
|
|
static int get_div(struct tegra_clk_frac_div *divider, unsigned long rate,
|
|
static int get_div(struct tegra_clk_frac_div *divider, unsigned long rate,
|
|
unsigned long parent_rate)
|
|
unsigned long parent_rate)
|
|
{
|
|
{
|
|
- u64 divider_ux1 = parent_rate;
|
|
|
|
- u8 flags = divider->flags;
|
|
|
|
- int mul;
|
|
|
|
-
|
|
|
|
- if (!rate)
|
|
|
|
- return 0;
|
|
|
|
-
|
|
|
|
- mul = get_mul(divider);
|
|
|
|
-
|
|
|
|
- if (!(flags & TEGRA_DIVIDER_INT))
|
|
|
|
- divider_ux1 *= mul;
|
|
|
|
-
|
|
|
|
- if (flags & TEGRA_DIVIDER_ROUND_UP)
|
|
|
|
- divider_ux1 += rate - 1;
|
|
|
|
-
|
|
|
|
- do_div(divider_ux1, rate);
|
|
|
|
-
|
|
|
|
- if (flags & TEGRA_DIVIDER_INT)
|
|
|
|
- divider_ux1 *= mul;
|
|
|
|
|
|
+ int div;
|
|
|
|
|
|
- divider_ux1 -= mul;
|
|
|
|
|
|
+ div = div_frac_get(rate, parent_rate, divider->width,
|
|
|
|
+ divider->frac_width, divider->flags);
|
|
|
|
|
|
- if ((s64)divider_ux1 < 0)
|
|
|
|
|
|
+ if (div < 0)
|
|
return 0;
|
|
return 0;
|
|
|
|
|
|
- if (divider_ux1 > get_max_div(divider))
|
|
|
|
- return get_max_div(divider);
|
|
|
|
-
|
|
|
|
- return divider_ux1;
|
|
|
|
|
|
+ return div;
|
|
}
|
|
}
|
|
|
|
|
|
static unsigned long clk_frac_div_recalc_rate(struct clk_hw *hw,
|
|
static unsigned long clk_frac_div_recalc_rate(struct clk_hw *hw,
|