[PATCH] Funny sync calculation correction
From: Fredrik Noring <hidden>
Date: 2003-01-24 23:16:36
I've been digging around in the rivafb module to find out why some
modes converted from XFree86 4.2 don't work on some display devices.
Here's a funny part of the riva_load_video_mode function (Linux
2.4.21-pre2):
hStart = (hDisplaySize + video_mode->right_margin) / 8 + 2;
hEnd = (hDisplaySize + video_mode->right_margin +
video_mode->hsync_len) / 8 - 1;
Please notice how "hsync_len" does not actually represent the length
of the sync. Rather, it's compensated with 24 pixels. The corresponding
code in the XFree86 4.2 (nv_dac.c) contains no such compensation:
int horizStart = (mode->CrtcHSyncStart/8) - 1;
int horizEnd = (mode->CrtcHSyncEnd/8) - 1;
The difference seems to be almost insignificant for modern multisync
screens, but devices such as TV:s get confused by the current version.
Is there a reason for the difference in calculations?
The attached patch corrects the calculations in accordance with XFree86
and works better with the modelines I've tested.
Please give it a try. Thanks,
Fredrik
--- linux-2.4.21-pre2/drivers/video/riva/fbdev.c.orig 2003-01-24 23:59:56.000000000 +0100
+++ linux-2.4.21-pre2/drivers/video/riva/fbdev.c 2003-01-25 00:00:24.000000000 +0100@@ -874,7 +874,7 @@ width = video_mode->xres_virtual; hDisplaySize = video_mode->xres; hDisplay = (hDisplaySize / 8) - 1; - hStart = (hDisplaySize + video_mode->right_margin) / 8 + 2; + hStart = (hDisplaySize + video_mode->right_margin) / 8 - 1; hEnd = (hDisplaySize + video_mode->right_margin + video_mode->hsync_len) / 8 - 1; hTotal = (hDisplaySize + video_mode->right_margin + -------------------------------------------------------
This SF.NET email is sponsored by: SourceForge Enterprise Edition + IBM + LinuxWorld = Something 2 See! http://www.vasoftware.com