Index: sys/arm/allwinner/clkng/aw_clk_nm.c =================================================================== --- sys/arm/allwinner/clkng/aw_clk_nm.c +++ sys/arm/allwinner/clkng/aw_clk_nm.c @@ -136,6 +136,12 @@ return (0); } +static inline uint64_t +distance(uint64_t x, uint64_t y) +{ + return (x >= y ? x - y : y - x); +} + static uint64_t aw_clk_nm_find_best(struct aw_clk_nm_sc *sc, uint64_t fparent, uint64_t *fout, uint32_t *factor_n, uint32_t *factor_m) @@ -153,7 +159,7 @@ for (m = min_m; m <= max_m; ) { for (n = min_n; n <= max_n; ) { cur = fparent / n / m; - if (abs(*fout - cur) < abs(*fout - best)) { + if (distance(*fout, cur) < distance(*fout, best)) { best = cur; *factor_n = n; *factor_m = m; @@ -196,7 +202,7 @@ clknode_get_freq(p_clk, &fparent); cur = aw_clk_nm_find_best(sc, fparent, fout, &n, &m); - if (abs((*fout - cur)) < abs((*fout - best))) { + if (distance(*fout, cur) < distance(*fout, best)) { best = cur; best_parent = p_idx; best_n = n;