[PATCH] ARM: Fix AMBA CLCD fb driver for 32bpp
authorRussell King <rmk@dyn-67.arm.linux.org.uk>
Thu, 28 Apr 2005 09:43:52 +0000 (10:43 +0100)
committerRussell King <rmk@dyn-67.arm.linux.org.uk>
Thu, 28 Apr 2005 09:43:52 +0000 (10:43 +0100)
We were supporting 24bpp.  However, the pixel organisation in
memory was 0RGB, so it was 24bpp in 32bit words.  This means
we're actually supporting 32bpp and not 24bpp.

Also, add a check to ensure that we don't exceed the available
framebuffer when changing display resolutions.

Signed-off-by: Russell King <rmk@arm.linux.org.uk>
drivers/video/amba-clcd.c
include/asm-arm/hardware/amba_clcd.h

index 075d3961a119e8f27294cd77193f8fee7908a521..3e386fd4c5c6e627699ccd04117b712030f0f3f4 100644 (file)
@@ -146,7 +146,7 @@ clcdfb_set_bitfields(struct clcd_fb *fb, struct fb_var_screeninfo *var)
                        var->blue.offset        = 10;
                }
                break;
-       case 24:
+       case 32:
                if (fb->panel->cntl & CNTL_LCDTFT) {
                        var->red.length         = 8;
                        var->green.length       = 8;
@@ -178,6 +178,12 @@ static int clcdfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
 
        if (fb->board->check)
                ret = fb->board->check(fb, var);
+
+       if (ret == 0 &&
+           var->xres_virtual * var->bits_per_pixel / 8 *
+           var->yres_virtual > fb->fb.fix.smem_len)
+               ret = -EINVAL;
+
        if (ret == 0)
                ret = clcdfb_set_bitfields(fb, var);
 
index 476b6398ae1e816b7a937f79a827077c8a07b651..d6ad33e52ea955d714dca140269a1b43abef1473 100644 (file)
@@ -211,7 +211,7 @@ static inline void clcdfb_decode(struct clcd_fb *fb, struct clcd_regs *regs)
        case 16:
                val |= CNTL_LCDBPP16;
                break;
-       case 24:
+       case 32:
                val |= CNTL_LCDBPP24;
                break;
        }