ChangeSet 1.2297, 2005/03/31 08:47:26-08:00, [EMAIL PROTECTED]

        [PATCH] fbcon: Call set_par per fb_info once during init
        
        Currently, fbcon will unconditionally do set_par's on all info's mapped 
to
        each console.  This results in repetetive hardware initialization when 
one is
        enough.  Fix this by skipping all fbdev's that already underwent
        initialization.
        
        From: Antonino Daplas <[EMAIL PROTECTED]>
        Signed-off-by: Antonino Daplas <[EMAIL PROTECTED]>
        Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
        Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>



 fbcon.c |   16 ++++++++++++----
 fbcon.h |    3 +++
 2 files changed, 15 insertions(+), 4 deletions(-)


diff -Nru a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c
--- a/drivers/video/console/fbcon.c     2005-03-31 10:27:00 -08:00
+++ b/drivers/video/console/fbcon.c     2005-03-31 10:27:00 -08:00
@@ -599,9 +599,10 @@
 
        ops->currcon = fg_console;
 
-       if (info->fbops->fb_set_par)
+       if (info->fbops->fb_set_par && !(ops->flags & FBCON_FLAGS_INIT))
                info->fbops->fb_set_par(info);
 
+       ops->flags |= FBCON_FLAGS_INIT;
        ops->graphics = 0;
 
        if (vc)
@@ -900,6 +901,7 @@
 static void fbcon_init(struct vc_data *vc, int init)
 {
        struct fb_info *info = registered_fb[con2fb_map[vc->vc_num]];
+       struct fbcon_ops *ops;
        struct vc_data **default_mode = vc->vc_display_fg;
        struct vc_data *svc = *default_mode;
        struct display *t, *p = &fb_display[vc->vc_num];
@@ -950,6 +952,8 @@
        new_cols = info->var.xres / vc->vc_font.width;
        new_rows = info->var.yres / vc->vc_font.height;
        vc_resize(vc, new_cols, new_rows);
+
+       ops = info->fbcon_par;
        /*
         * We must always set the mode. The mode of the previous console
         * driver could be in the same resolution but we are using different
@@ -957,10 +961,14 @@
         *
         * We need to do it in fbcon_init() to prevent screen corruption.
         */
-       if (CON_IS_VISIBLE(vc) && info->fbops->fb_set_par)
-               info->fbops->fb_set_par(info);
+       if (CON_IS_VISIBLE(vc)) {
+               if (info->fbops->fb_set_par &&
+                   !(ops->flags & FBCON_FLAGS_INIT))
+                       info->fbops->fb_set_par(info);
+               ops->flags |= FBCON_FLAGS_INIT;
+       }
 
-       ((struct fbcon_ops *) info->fbcon_par)->graphics = 0;
+       ops->graphics = 0;
 
        if ((cap & FBINFO_HWACCEL_COPYAREA) &&
            !(cap & FBINFO_HWACCEL_DISABLED))
diff -Nru a/drivers/video/console/fbcon.h b/drivers/video/console/fbcon.h
--- a/drivers/video/console/fbcon.h     2005-03-31 10:27:00 -08:00
+++ b/drivers/video/console/fbcon.h     2005-03-31 10:27:00 -08:00
@@ -18,6 +18,8 @@
 
 #include <asm/io.h>
 
+#define FBCON_FLAGS_INIT 1
+
    /*
     *    This is the interface between the low-level console driver and the
     *    low-level frame buffer device
@@ -69,6 +71,7 @@
        int    cursor_reset;
        int    blank_state;
        int    graphics;
+       int    flags;
        char  *cursor_data;
 };
     /*
-
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