tree ee0930bbbe84729fad902c3d30054c1f1dcb5faf
parent 6cb54819d7b1867053e2dfd8c0ca3a8dc65a7eff
author Antonino A. Daplas <[EMAIL PROTECTED]> Mon, 01 Aug 2005 23:46:44 +0800
committer Linus Torvalds <[EMAIL PROTECTED]> Tue, 02 Aug 2005 00:07:13 -0700

[PATCH] tridentfb: Fix scrolling artifacts if acceleration is enabled

Reported by: Jochen Hein (Bugzilla Bug 4386)

booting leaves the end of long lines in the last line on screen when
scrolling.  When X is running, scrolling puts garbage on the screen
(looks like X data) Console switch fixes the screen.  Behaviour seems to
be identical with noaccel and without on the video=tridentfb parameter
in lilo.conf.

This bug was explained by: Knut_Petersen

Acceleration is broken for all BLADE 3D chips for all versions of kernel
2.6 except for 32bit modes.  Most important reason is that the u32 col
parameter of the graphics engine needs the color value replicated to all
u8 of the u32 (8bit modes) and to both u16 of the u32.

Fix color value passed to graphics engine, verified by the reporter.

Signed-off-by: Antonino Daplas <[EMAIL PROTECTED]>
Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>

 drivers/video/tridentfb.c |   26 ++++++++++++++++----------
 1 files changed, 16 insertions(+), 10 deletions(-)

diff --git a/drivers/video/tridentfb.c b/drivers/video/tridentfb.c
--- a/drivers/video/tridentfb.c
+++ b/drivers/video/tridentfb.c
@@ -454,13 +454,16 @@ static struct accel_switch accel_image =
 static void tridentfb_fillrect(struct fb_info * info, const struct fb_fillrect 
*fr)
 {
        int bpp = info->var.bits_per_pixel;
-       int col;
+       int col = 0;
        
        switch (bpp) {
                default:
-               case 8: col = fr->color;
+               case 8: col |= fr->color;
+                       col |= col << 8;
+                       col |= col << 16;
                        break;
                case 16: col = ((u32 *)(info->pseudo_palette))[fr->color];
+                       
                         break;
                case 32: col = ((u32 *)(info->pseudo_palette))[fr->color];
                         break;
@@ -882,8 +885,9 @@ static int tridentfb_set_par(struct fb_i
 
        write3X4(GraphEngReg, 0x80);    //enable GE for text acceleration
 
-//     if (info->var.accel_flags & FB_ACCELF_TEXT)
-//FIXME                acc->init_accel(info->var.xres,bpp);
+#ifdef CONFIG_FB_TRIDENT_ACCEL 
+       acc->init_accel(info->var.xres,bpp);
+#endif
        
        switch (bpp) {
                case 8:  tmp = 0x00; break;
@@ -981,12 +985,14 @@ static int tridentfb_setcolreg(unsigned 
                t_outb(green>>10,0x3C9);
                t_outb(blue>>10,0x3C9);
 
-       } else
-       if (bpp == 16)                  /* RGB 565 */
-                       ((u32*)info->pseudo_palette)[regno] = (red & 0xF800) |
-                       ((green & 0xFC00) >> 5) | ((blue & 0xF800) >> 11);
-       else
-       if (bpp == 32)          /* ARGB 8888 */
+       } else if (bpp == 16) { /* RGB 565 */
+               u32 col;
+
+               col = (red & 0xF800) | ((green & 0xFC00) >> 5) |
+                       ((blue & 0xF800) >> 11);
+               col |= col << 16;       
+               ((u32 *)(info->pseudo_palette))[regno] = col;
+       } else if (bpp == 32)           /* ARGB 8888 */
                ((u32*)info->pseudo_palette)[regno] =
                        ((transp & 0xFF00) <<16)        |
                        ((red & 0xFF00) << 8)           |
-
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