s3fb: limit 8x16 rectangles when tileblitting is enabled
authorAntonino A. Daplas <adaplas@gmail.com>
Tue, 8 May 2007 07:39:14 +0000 (00:39 -0700)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Tue, 8 May 2007 18:15:31 +0000 (11:15 -0700)
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>
drivers/video/Kconfig
drivers/video/s3fb.c

index 51c4b25dad25ca39973554ce3ce957e2be333f83..863c5983ee607297f97f7fa03d38e8f1bdb9db38 100644 (file)
@@ -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.
 
index f3470bb7d5490c5432140eb28a445d1184a748f1..53f1eb9638aeeae9b2b26638294e48b61832f7cb 100644 (file)
@@ -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;