]> err.no Git - linux-2.6/blobdiff - drivers/video/atmel_lcdfb.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/x86/linux...
[linux-2.6] / drivers / video / atmel_lcdfb.c
index 6fcf76c12910412f56017ee3c1a5c56b9a8c2cc9..8ffdf35787688084deced4c51cd8704bb92f4c19 100644 (file)
@@ -31,7 +31,8 @@
 #define ATMEL_LCDC_CVAL_DEFAULT                0xc8
 #define ATMEL_LCDC_DMA_BURST_LEN       8
 
-#if defined(CONFIG_ARCH_AT91SAM9263) || defined(CONFIG_ARCH_AT91CAP9)
+#if defined(CONFIG_ARCH_AT91SAM9263) || defined(CONFIG_ARCH_AT91CAP9) || \
+       defined(CONFIG_ARCH_AT91SAM9RL)
 #define ATMEL_LCDC_FIFO_SIZE           2048
 #else
 #define ATMEL_LCDC_FIFO_SIZE           512
@@ -338,19 +339,35 @@ static int atmel_lcdfb_check_var(struct fb_var_screeninfo *var,
                break;
        case 15:
        case 16:
-               var->red.offset = 0;
+               if (sinfo->lcd_wiring_mode == ATMEL_LCDC_WIRING_RGB) {
+                       /* RGB:565 mode */
+                       var->red.offset = 11;
+                       var->blue.offset = 0;
+                       var->green.length = 6;
+               } else {
+                       /* BGR:555 mode */
+                       var->red.offset = 0;
+                       var->blue.offset = 10;
+                       var->green.length = 5;
+               }
                var->green.offset = 5;
-               var->blue.offset = 10;
-               var->red.length = var->green.length = var->blue.length = 5;
+               var->red.length = var->blue.length = 5;
                break;
        case 32:
                var->transp.offset = 24;
                var->transp.length = 8;
                /* fall through */
        case 24:
-               var->red.offset = 0;
+               if (sinfo->lcd_wiring_mode == ATMEL_LCDC_WIRING_RGB) {
+                       /* RGB:888 mode */
+                       var->red.offset = 16;
+                       var->blue.offset = 0;
+               } else {
+                       /* BGR:888 mode */
+                       var->red.offset = 0;
+                       var->blue.offset = 16;
+               }
                var->green.offset = 8;
-               var->blue.offset = 16;
                var->red.length = var->green.length = var->blue.length = 8;
                break;
        default:
@@ -697,6 +714,7 @@ static int __init atmel_lcdfb_probe(struct platform_device *pdev)
                sinfo->atmel_lcdfb_power_control = pdata_sinfo->atmel_lcdfb_power_control;
                sinfo->guard_time = pdata_sinfo->guard_time;
                sinfo->lcdcon_is_backlight = pdata_sinfo->lcdcon_is_backlight;
+               sinfo->lcd_wiring_mode = pdata_sinfo->lcd_wiring_mode;
        } else {
                dev_err(dev, "cannot get default configuration\n");
                goto free_info;