]> Pileus Git - ~andy/linux/blobdiff - drivers/video/da8xx-fb.c
Merge branch 'at91-fixes' of git://github.com/at91linux/linux-at91 into fixes
[~andy/linux] / drivers / video / da8xx-fb.c
index 8f7e05143708e9a5a63264641d03261fbbb0e025..47118c75a4c07fc2190601db42d9942ad7030053 100644 (file)
@@ -239,6 +239,20 @@ static struct da8xx_panel known_lcd_panels[] = {
                .pxl_clk = 7833600,
                .invert_pxl_clk = 0,
        },
+       [2] = {
+               /* Hitachi SP10Q010 */
+               .name = "SP10Q010",
+               .width = 320,
+               .height = 240,
+               .hfp = 10,
+               .hbp = 10,
+               .hsw = 10,
+               .vfp = 10,
+               .vbp = 10,
+               .vsw = 10,
+               .pxl_clk = 7833600,
+               .invert_pxl_clk = 0,
+       },
 };
 
 /* Enable the Raster Engine of the LCD Controller */
@@ -547,7 +561,26 @@ static int fb_setcolreg(unsigned regno, unsigned red, unsigned green,
        if (info->fix.visual == FB_VISUAL_DIRECTCOLOR)
                return 1;
 
-       if (info->var.bits_per_pixel == 8) {
+       if (info->var.bits_per_pixel == 4) {
+               if (regno > 15)
+                       return 1;
+
+               if (info->var.grayscale) {
+                       pal = regno;
+               } else {
+                       red >>= 4;
+                       green >>= 8;
+                       blue >>= 12;
+
+                       pal = (red & 0x0f00);
+                       pal |= (green & 0x00f0);
+                       pal |= (blue & 0x000f);
+               }
+               if (regno == 0)
+                       pal |= 0x2000;
+               palette[regno] = pal;
+
+       } else if (info->var.bits_per_pixel == 8) {
                red >>= 4;
                green >>= 8;
                blue >>= 12;
@@ -802,6 +835,7 @@ static int fb_check_var(struct fb_var_screeninfo *var,
                var->blue.length = 8;
                var->transp.offset = 0;
                var->transp.length = 0;
+               var->nonstd = 0;
                break;
        case 4:
                var->red.offset = 0;
@@ -812,6 +846,7 @@ static int fb_check_var(struct fb_var_screeninfo *var,
                var->blue.length = 4;
                var->transp.offset = 0;
                var->transp.length = 0;
+               var->nonstd = FB_NONSTD_REV_PIX_IN_B;
                break;
        case 16:                /* RGB 565 */
                var->red.offset = 11;
@@ -822,6 +857,7 @@ static int fb_check_var(struct fb_var_screeninfo *var,
                var->blue.length = 5;
                var->transp.offset = 0;
                var->transp.length = 0;
+               var->nonstd = 0;
                break;
        default:
                err = -EINVAL;