mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-22 16:06:04 -05:00
clk: meson: Support PLL with fixed fractional denominators
Some PLLS with fractional multipliers have fractional denominators with fixed values, instead of the previous "(1 << pll-> frc.width)". Signed-off-by: Chuan Liu <chuan.liu@amlogic.com> Link: https://lore.kernel.org/r/20240909-fix_clk-v3-1-a6d8f6333c04@amlogic.com Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>
This commit is contained in:
parent
eb61a12649
commit
c939154e84
2 changed files with 6 additions and 3 deletions
|
@ -57,12 +57,13 @@ static unsigned long __pll_params_to_rate(unsigned long parent_rate,
|
|||
struct meson_clk_pll_data *pll)
|
||||
{
|
||||
u64 rate = (u64)parent_rate * m;
|
||||
unsigned int frac_max = pll->frac_max ? pll->frac_max :
|
||||
(1 << pll->frac.width);
|
||||
|
||||
if (frac && MESON_PARM_APPLICABLE(&pll->frac)) {
|
||||
u64 frac_rate = (u64)parent_rate * frac;
|
||||
|
||||
rate += DIV_ROUND_UP_ULL(frac_rate,
|
||||
(1 << pll->frac.width));
|
||||
rate += DIV_ROUND_UP_ULL(frac_rate, frac_max);
|
||||
}
|
||||
|
||||
return DIV_ROUND_UP_ULL(rate, n);
|
||||
|
@ -100,7 +101,8 @@ static unsigned int __pll_params_with_frac(unsigned long rate,
|
|||
unsigned int n,
|
||||
struct meson_clk_pll_data *pll)
|
||||
{
|
||||
unsigned int frac_max = (1 << pll->frac.width);
|
||||
unsigned int frac_max = pll->frac_max ? pll->frac_max :
|
||||
(1 << pll->frac.width);
|
||||
u64 val = (u64)rate * n;
|
||||
|
||||
/* Bail out if we are already over the requested rate */
|
||||
|
|
|
@ -43,6 +43,7 @@ struct meson_clk_pll_data {
|
|||
unsigned int init_count;
|
||||
const struct pll_params_table *table;
|
||||
const struct pll_mult_range *range;
|
||||
unsigned int frac_max;
|
||||
u8 flags;
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue