ChangeSet 1.2303, 2005/03/31 08:49:09-08:00, [EMAIL PROTECTED]

        [PATCH] radeonfb: Fix mode setting on CRT monitors
        
        Current radeonfb is a bit "anal" about accepting CRT modes, it basically
        only accepts modes that have the exact resolution, which tends to break
        with fbcon on console switches as it provides "approximate" modes.  This
        patch fixes it by having the driver chose the closest possible mode 
instead
        of looking for an exact match.
        
        Signed-off-by: Benjamin Herrenschmidt <[EMAIL PROTECTED]>
        Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
        Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>



 radeon_monitor.c |   22 ++++++++++------------
 1 files changed, 10 insertions(+), 12 deletions(-)


diff -Nru a/drivers/video/aty/radeon_monitor.c 
b/drivers/video/aty/radeon_monitor.c
--- a/drivers/video/aty/radeon_monitor.c        2005-03-31 10:28:26 -08:00
+++ b/drivers/video/aty/radeon_monitor.c        2005-03-31 10:28:26 -08:00
@@ -901,7 +901,7 @@
  */
 
 /*
- * This is used when looking for modes. We assign a "goodness" value
+ * This is used when looking for modes. We assign a "distance" value
  * to a mode in the modedb depending how "close" it is from what we
  * are looking for.
  * Currently, we don't compare that much, we could do better but
@@ -910,13 +910,11 @@
 static int radeon_compare_modes(const struct fb_var_screeninfo *var,
                                const struct fb_videomode *mode)
 {
-       int goodness = 0;
+       int distance = 0;
 
-       if (var->yres == mode->yres)
-               goodness += 10;
-       if (var->xres == mode->xres)
-               goodness += 9;
-       return goodness;
+       distance = mode->yres - var->yres;
+       distance += (mode->xres - var->xres)/2;
+       return distance;
 }
 
 /*
@@ -938,7 +936,7 @@
        const struct fb_videomode       *db = vesa_modes;
        int                             i, dbsize = 34;
        int                             has_rmx, native_db = 0;
-       int                             goodness = 0;
+       int                             distance = INT_MAX;
        const struct fb_videomode       *candidate = NULL;
 
        /* Start with a copy of the requested mode */
@@ -974,19 +972,19 @@
        /* Now look for a mode in the database */
        while (db) {
                for (i = 0; i < dbsize; i++) {
-                       int g;
+                       int d;
 
                        if (db[i].yres < src->yres)
                                continue;       
                        if (db[i].xres < src->xres)
                                continue;
-                       g = radeon_compare_modes(src, &db[i]);
+                       d = radeon_compare_modes(src, &db[i]);
                        /* If the new mode is at least as good as the previous 
one,
                         * then it's our new candidate
                         */
-                       if (g >= goodness) {
+                       if (d < distance) {
                                candidate = &db[i];
-                               goodness = g;
+                               distance = d;
                        }
                }
                db = NULL;
-
To unsubscribe from this list: send the line "unsubscribe bk-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to