imxfb: calculate bpix value from bits_per_pixel
authorSascha Hauer <s.hauer@pengutronix.de>
Wed, 18 Mar 2009 10:29:31 +0000 (11:29 +0100)
committerSascha Hauer <s.hauer@pengutronix.de>
Fri, 7 Aug 2009 10:10:56 +0000 (12:10 +0200)
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
arch/arm/plat-mxc/include/mach/imxfb.h
drivers/video/imxfb.c

index 9f01011..66259f6 100644 (file)
@@ -13,7 +13,8 @@
 #define PCR_BPIX_4     (2 << 25)
 #define PCR_BPIX_8     (3 << 25)
 #define PCR_BPIX_12    (4 << 25)
-#define PCR_BPIX_16    (4 << 25)
+#define PCR_BPIX_16    (5 << 25)
+#define PCR_BPIX_18    (6 << 25)
 #define PCR_PIXPOL     (1 << 24)
 #define PCR_FLMPOL     (1 << 23)
 #define PCR_LPPOL      (1 << 22)
index 15a0ee6..a8c41cb 100644 (file)
@@ -33,6 +33,7 @@
 #include <linux/math64.h>
 
 #include <mach/imxfb.h>
+#include <mach/hardware.h>
 
 /*
  * Complain if VAR is out of range.
@@ -530,8 +531,24 @@ static int imxfb_activate_var(struct fb_var_screeninfo *var, struct fb_info *inf
                                lcd_clk / pcr);
        }
 
+       switch (var->bits_per_pixel) {
+       case 32:
+               pcr |= PCR_BPIX_18;
+               break;
+       case 16:
+       default:
+               if (cpu_is_mx1())
+                       pcr |= PCR_BPIX_12;
+               else
+                       pcr |= PCR_BPIX_16;
+               break;
+       case 8:
+               pcr |= PCR_BPIX_8;
+               break;
+       }
+
        /* add sync polarities */
-       pcr |= fbi->pcr & ~0x3F;
+       pcr |= fbi->pcr & ~(0x3f | (7 << 25));
 
        writel(pcr, fbi->regs + LCDC_PCR);
        writel(fbi->pwmr, fbi->regs + LCDC_PWMR);