drm/sun4i: dotclock: Round to closest clock rate
authorChen-Yu Tsai <wens@csie.org>
Thu, 15 Sep 2016 15:14:02 +0000 (23:14 +0800)
committerMaxime Ripard <maxime.ripard@free-electrons.com>
Tue, 20 Sep 2016 07:19:31 +0000 (09:19 +0200)
With display pixel clocks we want to have the closest possible clock
rate, to minimize timing and refresh rate skews. Whether the actual
clock rate is higher or lower than the requested rate is less important.

Also check candidates against the requested rate, rather than the
ideal parent rate, the varying dividers also influence the difference
between the requested rate and the rounded rate.

Signed-off-by: Chen-Yu Tsai <wens@csie.org>
Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
drivers/gpu/drm/sun4i/sun4i_dotclock.c

index 3eb99784f371bbc749c3fac8f6965f19773f38d4..d401156490f36c890f49f23d1eab1b3f7691d108 100644 (file)
@@ -90,7 +90,8 @@ static long sun4i_dclk_round_rate(struct clk_hw *hw, unsigned long rate,
                        goto out;
                }
 
-               if ((rounded < ideal) && (rounded > best_parent)) {
+               if (abs(rate - rounded / i) <
+                   abs(rate - best_parent / best_div)) {
                        best_parent = rounded;
                        best_div = i;
                }