From 8b935effae7ac8ed323037bdf16edf612009ff86 Mon Sep 17 00:00:00 2001 From: Krzysztof Helt Date: Wed, 23 Jul 2008 21:30:56 -0700 Subject: [PATCH] --- yaml --- r: 105503 b: refs/heads/master c: 6bdf1035602abf0564d24a7447eea1c149c4bcb1 h: refs/heads/master i: 105501: e3cbc302dbd4063ce4b03073da80b8b6ec7eb980 105499: 46e055cb41de4d138ad411ebed5070c1983e619e 105495: b4839e9c873d179552303715812e5f874ac1df29 105487: d8d73fadfab7a78f604cf3230a88eea2fa0f756c 105471: dd6076418e8746619181b3b0a87240f37fe8caee v: v3 --- [refs] | 2 +- trunk/drivers/video/tridentfb.c | 31 +++++++++++++++++++++++-------- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/[refs] b/[refs] index f9f0d48d24cd..a8ed2dfa8011 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: c1724fecabfed504a4cfb87319ad3b9d3a8baa92 +refs/heads/master: 6bdf1035602abf0564d24a7447eea1c149c4bcb1 diff --git a/trunk/drivers/video/tridentfb.c b/trunk/drivers/video/tridentfb.c index f3153a82f926..8ee4261abf3b 100644 --- a/trunk/drivers/video/tridentfb.c +++ b/trunk/drivers/video/tridentfb.c @@ -85,6 +85,11 @@ MODULE_PARM_DESC(fp, "Define if flatpanel is connected"); module_param(crt, int, 0); MODULE_PARM_DESC(crt, "Define if CRT is connected"); +static int is_oldclock(int id) +{ + return (id == TGUI9660); +} + static int is_blade(int id) { return (id == BLADE3D) || @@ -659,23 +664,33 @@ static void set_screen_start(struct tridentfb_par *par, int base) static void set_vclk(struct tridentfb_par *par, unsigned long freq) { int m, n, k; - unsigned long f, fi, d, di; - unsigned char lo = 0, hi = 0; + unsigned long fi, d, di; + unsigned char best_m = 0, best_n = 0, best_k = 0; + unsigned char hi, lo; d = 20000; - for (k = 2; k >= 0; k--) - for (m = 0; m < 63; m++) - for (n = 0; n < 128; n++) { + for (k = 1; k >= 0; k--) + for (m = 0; m < 32; m++) + for (n = 0; n < 122; n++) { fi = ((14318l * (n + 8)) / (m + 2)) >> k; if ((di = abs(fi - freq)) < d) { d = di; - f = fi; - lo = n; - hi = (k << 6) | m; + best_n = n; + best_m = m; + best_k = k; } if (fi > freq) break; } + + if (is_oldclock(par->chip_id)) { + lo = best_n | (best_m << 7); + hi = (best_m >> 1) | (best_k << 4); + } else { + lo = best_n; + hi = best_m | (best_k << 6); + } + if (is3Dchip(par->chip_id)) { vga_mm_wseq(par->io_virt, ClockHigh, hi); vga_mm_wseq(par->io_virt, ClockLow, lo);