Commit 6280fd4f authored by Krzysztof Helt's avatar Krzysztof Helt Committed by Linus Torvalds

tridentfb: Blade3D clock fixes

This patch fixes following problems:
- does not allow the m parameter to reach 0 as
  it locks the graphics core (power cycle needed)
- for the newer chips (with new clock registers)
  does not allow of n / m ratio below 4 as it gives
  unstable image on the Blade3D core
- extend shift parameter (k) range  to 2 for the newer
  chips to cope with the n /m >= 4 limit at low resolution
  (bandwidth) modes
- prefer modes with higher n / m ratio (higher k values)
Signed-off-by: default avatarKrzysztof Helt <krzysztof.h1@wp.pl>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent f330c4b1
...@@ -672,15 +672,16 @@ static void set_vclk(struct tridentfb_par *par, unsigned long freq) ...@@ -672,15 +672,16 @@ static void set_vclk(struct tridentfb_par *par, unsigned long freq)
unsigned long fi, d, di; unsigned long fi, d, di;
unsigned char best_m = 0, best_n = 0, best_k = 0; unsigned char best_m = 0, best_n = 0, best_k = 0;
unsigned char hi, lo; unsigned char hi, lo;
unsigned char shift = !is_oldclock(par->chip_id) ? 2 : 1;
d = 20000; d = 20000;
for (k = 1; k >= 0; k--) for (k = shift; k >= 0; k--)
for (m = 0; m < 32; m++) { for (m = 1; m < 32; m++) {
n = 2 * (m + 2) - 8; n = ((m + 2) << shift) - 8;
for (n = (n < 0 ? 0 : n); n < 122; n++) { for (n = (n < 0 ? 0 : n); n < 122; n++) {
fi = ((14318l * (n + 8)) / (m + 2)) >> k; fi = ((14318l * (n + 8)) / (m + 2)) >> k;
di = abs(fi - freq); di = abs(fi - freq);
if (di <= d) { if (di < d || (di == d && k == best_k)) {
d = di; d = di;
best_n = n; best_n = n;
best_m = m; best_m = m;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment