summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntonino A. Daplas <adaplas@gmail.com>2007-05-08 07:39:14 (GMT)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-05-08 18:15:31 (GMT)
commit8db51668f5ef6ae31ed4e4f0c6e2976a190dfa11 (patch)
tree172c273f795530fffdea6f5f8f2cc8d9158a54bd
parentd60d2d8a423be91c5ad1a745c4e9dda9cea1b3c5 (diff)
downloadlinux-8db51668f5ef6ae31ed4e4f0c6e2976a190dfa11.tar.xz
s3fb: limit 8x16 rectangles when tileblitting is enabled
If tileblitting is enabled (text mode), the hardware can only accept 8x16 bitmaps. Advertise this to the upper layer. And to ensure that an appropriate font is always available, select an 8x16 font in Kconfig. Signed-off-by: Antonino Daplas <adaplas@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--drivers/video/Kconfig1
-rw-r--r--drivers/video/s3fb.c6
2 files changed, 7 insertions, 0 deletions
diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig
index 51c4b25..863c598 100644
--- a/drivers/video/Kconfig
+++ b/drivers/video/Kconfig
@@ -1194,6 +1194,7 @@ config FB_S3
select FB_TILEBLITTING
select FB_SVGALIB
select VGASTATE
+ select FONT_8x16 if FRAMEBUFFER_CONSOLE
---help---
Driver for graphics boards with S3 Trio / S3 Virge chip.
diff --git a/drivers/video/s3fb.c b/drivers/video/s3fb.c
index f3470bb..53f1eb9 100644
--- a/drivers/video/s3fb.c
+++ b/drivers/video/s3fb.c
@@ -449,6 +449,9 @@ static int s3fb_set_par(struct fb_info *info)
info->flags &= ~FBINFO_MISC_TILEBLITTING;
info->tileops = NULL;
+ /* supports blit rectangles of any dimension */
+ info->pixmap.blit_x = ~(u32)0;
+ info->pixmap.blit_y = ~(u32)0;
offset_value = (info->var.xres_virtual * bpp) / 64;
screen_size = info->var.yres_virtual * info->fix.line_length;
} else {
@@ -457,6 +460,9 @@ static int s3fb_set_par(struct fb_info *info)
info->flags |= FBINFO_MISC_TILEBLITTING;
info->tileops = fasttext ? &s3fb_fast_tile_ops : &s3fb_tile_ops;
+ /* supports 8x16 tiles only */
+ info->pixmap.blit_x = 1 << (8 - 1);
+ info->pixmap.blit_y = 1 << (16 - 1);
offset_value = info->var.xres_virtual / 16;
screen_size = (info->var.xres_virtual * info->var.yres_virtual) / 64;