aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video/s3c2410fb.c
diff options
context:
space:
mode:
authorKrzysztof Helt <krzysztof.h1@wp.pl>2007-10-16 04:29:02 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-10-16 12:43:17 -0400
commit93613b9fbea6e636d3af51c71fc1b9b2e7d4fb0c (patch)
treea6ee708b3877b20aade51f06fe30cfa1aedbfe4a /drivers/video/s3c2410fb.c
parent7ee0fe41c3c4670ccea8ea180d178d2de3a46445 (diff)
s3c2410fb: byte ordering fixes
This patch sets correct bits related to the byte ordering of the framebuffer. This was tested on little endian kernel only. The big endian kernel may require different settings. The patch also adds 32 bpp mode which is called 24 bpp by Samsung. One pixel takes 32 bits but only 24 bits are used in this mode. Signed-off-by: Krzysztof Helt <krzysztof.h1@wp.pl> 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>
Diffstat (limited to 'drivers/video/s3c2410fb.c')
-rw-r--r--drivers/video/s3c2410fb.c20
1 files changed, 15 insertions, 5 deletions
diff --git a/drivers/video/s3c2410fb.c b/drivers/video/s3c2410fb.c
index 108d49e6884e..2ecf7717491f 100644
--- a/drivers/video/s3c2410fb.c
+++ b/drivers/video/s3c2410fb.c
@@ -265,8 +265,8 @@ static int s3c2410fb_check_var(struct fb_var_screeninfo *var,
265 var->blue.length = 5; 265 var->blue.length = 5;
266 } 266 }
267 break; 267 break;
268 case 24: 268 case 32:
269 /* 24 bpp 888 */ 269 /* 24 bpp 888 and 8 dummy */
270 var->red.length = 8; 270 var->red.length = 8;
271 var->red.offset = 16; 271 var->red.offset = 16;
272 var->green.length = 8; 272 var->green.length = 8;
@@ -274,8 +274,6 @@ static int s3c2410fb_check_var(struct fb_var_screeninfo *var,
274 var->blue.length = 8; 274 var->blue.length = 8;
275 var->blue.offset = 0; 275 var->blue.offset = 0;
276 break; 276 break;
277
278
279 } 277 }
280 return 0; 278 return 0;
281} 279}
@@ -374,11 +372,21 @@ static void s3c2410fb_calculate_tft_lcd_regs(const struct fb_info *info,
374 break; 372 break;
375 case 8: 373 case 8:
376 regs->lcdcon1 |= S3C2410_LCDCON1_TFT8BPP; 374 regs->lcdcon1 |= S3C2410_LCDCON1_TFT8BPP;
375 regs->lcdcon5 |= S3C2410_LCDCON5_BSWP |
376 S3C2410_LCDCON5_FRM565;
377 regs->lcdcon5 &= ~S3C2410_LCDCON5_HWSWP;
377 break; 378 break;
378 case 16: 379 case 16:
379 regs->lcdcon1 |= S3C2410_LCDCON1_TFT16BPP; 380 regs->lcdcon1 |= S3C2410_LCDCON1_TFT16BPP;
381 regs->lcdcon5 &= ~S3C2410_LCDCON5_BSWP;
382 regs->lcdcon5 |= S3C2410_LCDCON5_HWSWP;
383 break;
384 case 32:
385 regs->lcdcon1 |= S3C2410_LCDCON1_TFT24BPP;
386 regs->lcdcon5 &= ~(S3C2410_LCDCON5_BSWP |
387 S3C2410_LCDCON5_HWSWP |
388 S3C2410_LCDCON5_BPP24BL);
380 break; 389 break;
381
382 default: 390 default:
383 /* invalid pixel depth */ 391 /* invalid pixel depth */
384 dev_err(fbi->dev, "invalid bpp %d\n", 392 dev_err(fbi->dev, "invalid bpp %d\n",
@@ -475,7 +483,9 @@ static int s3c2410fb_set_par(struct fb_info *info)
475 struct fb_var_screeninfo *var = &info->var; 483 struct fb_var_screeninfo *var = &info->var;
476 484
477 switch (var->bits_per_pixel) { 485 switch (var->bits_per_pixel) {
486 case 32:
478 case 16: 487 case 16:
488 case 12:
479 info->fix.visual = FB_VISUAL_TRUECOLOR; 489 info->fix.visual = FB_VISUAL_TRUECOLOR;
480 break; 490 break;
481 case 1: 491 case 1: