Fix four bugs in the MA35D1 PLL clock driver that cause incorrect
frequency values returned from recalc_rate() and determine_rate().
v1 combined all fixes into a single commit. At reviewer request,
split into one patch per logical fix:
1/3 - fix div_u64 return value being discarded (affects both
ma35d1_calc_smic_pll_freq and ma35d1_calc_pll_freq INT mode)
2/3 - fix PLL_CTL1_FRAC mask width (8-bit -> 24-bit) and update
the fractional-mode arithmetic accordingly
3/3 - fix ma35d1_clk_pll_determine_rate: move find_closest() into
the configurable-PLL branch; split CAPLL and DDRPLL into
separate case labels mirroring recalc_rate()
Changes in v5 (vs v4):
- 3/3: split CAPLL and DDRPLL back into separate case labels so
that determine_rate() is structurally parallel with recalc_rate();
add explicit default label; share single req->rate = pll_freq tail
(readability suggestion by Alexandre Mergnat)
- 3/3: add Reviewed-by tag
Changes in v4 (vs v3):
- 2/3: add Reviewed-by tag
Changes in v3 (vs v2):
- 2/3: replace the manual round-to-nearest expression
"(u32)(((u64)x * 1000 + 500) >> 24)" with the kernel helper
DIV_ROUND_CLOSEST_ULL((u64)x * 1000, 1ULL << 24); the result
is mathematically identical but more readable and idiomatic
Joey Lu (3):
clk: nuvoton: ma35d1: fix ignored div_u64 return values in PLL freq
calculation
clk: nuvoton: ma35d1: fix PLL_CTL1_FRAC bit field width and fractional
calc
clk: nuvoton: ma35d1: fix ma35d1_clk_pll_determine_rate logic
drivers/clk/nuvoton/clk-ma35d1-pll.c | 43 ++++++++++++++--------------
1 file changed, 22 insertions(+), 21 deletions(-)
--
2.43.0