tridentfb: acceleration bug fixes
authorKrzysztof Helt <krzysztof.h1@wp.pl>
Thu, 24 Jul 2008 04:31:03 +0000 (21:31 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 24 Jul 2008 17:47:36 +0000 (10:47 -0700)
This patch fixes two problems when acceleration is enabled:

 - bit for bitblt direction is corrected
   so scrolling down works as expected on 3DImage chips

 - initialization of acceleration is done later
   this helps with initial console malfuntion (on Blade3D
   chips) well documented here:
   http://marc.info/?l=linux-fbdev-users&m=111386953124478&w=2

Signed-off-by: Krzysztof Helt <krzysztof.h1@wp.pl>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
drivers/video/tridentfb.c

index 4a1258f9509e358a9fa08d5372ef75fa7d9e1f57..d896dee7b487b7fb90b28d48aa55031014e99a24 100644 (file)
@@ -395,7 +395,7 @@ static void image_fill_rect(struct tridentfb_par *par,
 static void image_copy_rect(struct tridentfb_par *par,
                            u32 x1, u32 y1, u32 x2, u32 y2, u32 w, u32 h)
 {
-       int direction = 2;
+       int direction = 0x4;
        u32 s1 = point(x1, y1);
        u32 s2 = point(x1 + w - 1, y1 + h - 1);
        u32 d1 = point(x2, y2);
@@ -1075,10 +1075,6 @@ static int tridentfb_set_par(struct fb_info *info)
        /* enable GE for text acceleration */
        write3X4(par, GraphEngReg, 0x80);
 
-#ifdef CONFIG_FB_TRIDENT_ACCEL
-       par->init_accel(par, info->var.xres_virtual, bpp);
-#endif
-
        switch (bpp) {
        case 8:
                tmp = 0x00;
@@ -1173,6 +1169,10 @@ static int tridentfb_set_par(struct fb_info *info)
                set_number_of_lines(par, info->var.yres);
        info->fix.line_length = info->var.xres_virtual * bpp / 8;
        set_lwidth(par, info->fix.line_length / 8);
+#ifdef CONFIG_FB_TRIDENT_ACCEL
+       par->init_accel(par, info->var.xres_virtual, bpp);
+#endif
+
        info->fix.visual = (bpp == 8) ? FB_VISUAL_PSEUDOCOLOR : FB_VISUAL_TRUECOLOR;
        info->cmap.len = (bpp == 8) ? 256 : 16;
        debug("exit\n");