]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/video/cfbimgblt.c
[PATCH] fbdev: Shift pixel value before entering loop in cfbimageblit
[linux-2.6-omap-h63xx.git] / drivers / video / cfbimgblt.c
index da664cea7ecac216072d5fda2aeaa05178a3e696..7a01742a82af0519181ad69ff5056ca0589e2668 100644 (file)
@@ -80,10 +80,12 @@ static u32 cfb_tab32[] = {
 #define LEFT_POS(bpp)          (32 - bpp)
 #define SHIFT_HIGH(val, bits)  ((val) >> (bits))
 #define SHIFT_LOW(val, bits)   ((val) << (bits))
+#define BIT_NR(b)              (7 - (b))
 #else
 #define LEFT_POS(bpp)          (0)
 #define SHIFT_HIGH(val, bits)  ((val) << (bits))
 #define SHIFT_LOW(val, bits)   ((val) >> (bits))
+#define BIT_NR(b)              (b)
 #endif
 
 static inline void color_imageblit(const struct fb_image *image, 
@@ -160,6 +162,8 @@ static inline void slow_imageblit(const struct fb_image *image, struct fb_info *
        u32 i, j, l;
        
        dst2 = (u32 __iomem *) dst1;
+       fgcolor <<= LEFT_POS(bpp);
+       bgcolor <<= LEFT_POS(bpp);
 
        for (i = image->height; i--; ) {
                shift = val = 0;
@@ -177,8 +181,7 @@ static inline void slow_imageblit(const struct fb_image *image, struct fb_info *
 
                while (j--) {
                        l--;
-                       color = (*s & (1 << l)) ? fgcolor : bgcolor;
-                       color <<= LEFT_POS(bpp);
+                       color = (*s & 1 << (BIT_NR(l))) ? fgcolor : bgcolor;
                        val |= SHIFT_HIGH(color, shift);
                        
                        /* Did the bitshift spill bits to the next long? */