imxfb: fast read flag and nonstandard field configurable
authorPavel Pisa <pisa@cmp.felk.cvut.cz>
Tue, 16 Oct 2007 08:29:44 +0000 (01:29 -0700)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Tue, 16 Oct 2007 16:43:21 +0000 (09:43 -0700)
The i.MX frame-buffer read operation should be faster for all configurations
then drawing each individual character again in response to scroll events.

The nonstandard fields allows to configure frame-buffer special options flags
for different display configurations by board specific initialization code.

One of such specific options is reversed order of pixels in each individual
byte.  i.MX frame-buffer seems to be designed for big-endian use first.  The
byte order is correctly configured for little-endian ordering, but if 1, 2 or
4 bits per pixel are used, pixels ordering is incompatible to Linux generic
frame-buffer drawing functions.

The patch "Allow generic BitBLT functions to work with swapped pixel order in
bytes" introduces required functionality into FBDEV core.  The pixels ordering
selection has to be enabled at compile time CONFIG_FB_CFB_REV_PIXELS_IN_BYTE
and for each display configuration which requires it by flag
FB_NONSTD_REV_PIX_IN_B in "nonstd" field of info structure.

This patch provides way for board specific code to select this option.

Signed-off-by: Pavel Pisa <pisa@cmp.felk.cvut.cz>
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/imxfb.c
include/asm-arm/arch-imx/imxfb.h

index 986ffa6c70a322202d50c7bad6c87440755f75d2..11609552a387301bc00515ca75b3af0c37d21b56 100644 (file)
@@ -466,7 +466,7 @@ static int __init imxfb_init_fbinfo(struct device *dev)
        info->var.vmode = FB_VMODE_NONINTERLACED;
 
        info->fbops                     = &imxfb_ops;
-       info->flags                     = FBINFO_FLAG_DEFAULT;
+       info->flags                     = FBINFO_FLAG_DEFAULT | FBINFO_READS_FAST;
 
        fbi->rgb[RGB_16]                = &def_rgb_16;
        fbi->rgb[RGB_8]                 = &def_rgb_8;
@@ -479,6 +479,7 @@ static int __init imxfb_init_fbinfo(struct device *dev)
        info->var.yres_virtual          = inf->yres;
        fbi->max_bpp                    = inf->bpp;
        info->var.bits_per_pixel        = inf->bpp;
+       info->var.nonstd                = inf->nonstd;
        info->var.pixclock              = inf->pixclock;
        info->var.hsync_len             = inf->hsync_len;
        info->var.left_margin           = inf->left_margin;
index 7dbc7bbba65d781c7b92de91268aa342824436f7..3ed9ec8b9f008cb4c7fcdcc354e77bd40391ab99 100644 (file)
@@ -7,6 +7,7 @@ struct imxfb_mach_info {
        u_short         xres;
        u_short         yres;
 
+       u_int           nonstd;
        u_char          bpp;
        u_char          hsync_len;
        u_char          left_margin;