diff options
author | Antonino A. Daplas <adaplas@gmail.com> | 2005-11-09 00:39:17 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-11-09 10:56:36 -0500 |
commit | 81d3e147ec9ffc6ef04b5f05afa4bef22487b32b (patch) | |
tree | 68f3e0779b1bc45aa639d977ce0c36db4228fa4c /drivers/video/cfbimgblt.c | |
parent | 120ddb41f18c2d41702af561f4acfbcbd8d6fb46 (diff) |
[PATCH] fbdev: Possible endian fix in cfbimageblit
Fix possible endian bug(?) when bit testing in slow_imageblit(). This
function is rarely called (only if (width * bpp) % 32 != 0) thus the bug is
not triggered.
However, if the console is rotated at 90 or 270 degrees, the height becomes
the width, and a variety of fonts have heights that will force a call to
slow_imageblit().
Signed-off-by: Antonino Daplas <adaplas@pol.net>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/video/cfbimgblt.c')
-rw-r--r-- | drivers/video/cfbimgblt.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/video/cfbimgblt.c b/drivers/video/cfbimgblt.c index da664cea7eca..a7770c4f17d0 100644 --- a/drivers/video/cfbimgblt.c +++ b/drivers/video/cfbimgblt.c | |||
@@ -80,10 +80,12 @@ static u32 cfb_tab32[] = { | |||
80 | #define LEFT_POS(bpp) (32 - bpp) | 80 | #define LEFT_POS(bpp) (32 - bpp) |
81 | #define SHIFT_HIGH(val, bits) ((val) >> (bits)) | 81 | #define SHIFT_HIGH(val, bits) ((val) >> (bits)) |
82 | #define SHIFT_LOW(val, bits) ((val) << (bits)) | 82 | #define SHIFT_LOW(val, bits) ((val) << (bits)) |
83 | #define BIT_NR(b) (7 - (b)) | ||
83 | #else | 84 | #else |
84 | #define LEFT_POS(bpp) (0) | 85 | #define LEFT_POS(bpp) (0) |
85 | #define SHIFT_HIGH(val, bits) ((val) << (bits)) | 86 | #define SHIFT_HIGH(val, bits) ((val) << (bits)) |
86 | #define SHIFT_LOW(val, bits) ((val) >> (bits)) | 87 | #define SHIFT_LOW(val, bits) ((val) >> (bits)) |
88 | #define BIT_NR(b) (b) | ||
87 | #endif | 89 | #endif |
88 | 90 | ||
89 | static inline void color_imageblit(const struct fb_image *image, | 91 | static inline void color_imageblit(const struct fb_image *image, |
@@ -177,7 +179,7 @@ static inline void slow_imageblit(const struct fb_image *image, struct fb_info * | |||
177 | 179 | ||
178 | while (j--) { | 180 | while (j--) { |
179 | l--; | 181 | l--; |
180 | color = (*s & (1 << l)) ? fgcolor : bgcolor; | 182 | color = (*s & 1 << (BIT_NR(l))) ? fgcolor : bgcolor; |
181 | color <<= LEFT_POS(bpp); | 183 | color <<= LEFT_POS(bpp); |
182 | val |= SHIFT_HIGH(color, shift); | 184 | val |= SHIFT_HIGH(color, shift); |
183 | 185 | ||