diff options
Diffstat (limited to 'drivers/video/atmel_lcdfb.c')
| -rw-r--r-- | drivers/video/atmel_lcdfb.c | 22 | 
1 files changed, 15 insertions, 7 deletions
diff --git a/drivers/video/atmel_lcdfb.c b/drivers/video/atmel_lcdfb.c index 12cf5f31ee8..025428e04c3 100644 --- a/drivers/video/atmel_lcdfb.c +++ b/drivers/video/atmel_lcdfb.c @@ -422,17 +422,22 @@ static int atmel_lcdfb_check_var(struct fb_var_screeninfo *var,  			= var->bits_per_pixel;  		break;  	case 16: +		/* Older SOCs use IBGR:555 rather than BGR:565. */ +		if (sinfo->have_intensity_bit) +			var->green.length = 5; +		else +			var->green.length = 6; +  		if (sinfo->lcd_wiring_mode == ATMEL_LCDC_WIRING_RGB) { -			/* RGB:565 mode */ -			var->red.offset = 11; +			/* RGB:5X5 mode */ +			var->red.offset = var->green.length + 5;  			var->blue.offset = 0;  		} else { -			/* BGR:565 mode */ +			/* BGR:5X5 mode */  			var->red.offset = 0; -			var->blue.offset = 11; +			var->blue.offset = var->green.length + 5;  		}  		var->green.offset = 5; -		var->green.length = 6;  		var->red.length = var->blue.length = 5;  		break;  	case 32: @@ -679,8 +684,7 @@ static int atmel_lcdfb_setcolreg(unsigned int regno, unsigned int red,  	case FB_VISUAL_PSEUDOCOLOR:  		if (regno < 256) { -			if (cpu_is_at91sam9261() || cpu_is_at91sam9263() -			    || cpu_is_at91sam9rl()) { +			if (sinfo->have_intensity_bit) {  				/* old style I+BGR:555 */  				val  = ((red   >> 11) & 0x001f);  				val |= ((green >>  6) & 0x03e0); @@ -870,6 +874,10 @@ static int __init atmel_lcdfb_probe(struct platform_device *pdev)  	}  	sinfo->info = info;  	sinfo->pdev = pdev; +	if (cpu_is_at91sam9261() || cpu_is_at91sam9263() || +							cpu_is_at91sam9rl()) { +		sinfo->have_intensity_bit = true; +	}  	strcpy(info->fix.id, sinfo->pdev->name);  	info->flags = ATMEL_LCDFB_FBINFO_DEFAULT;  |