diff options
Diffstat (limited to 'common/lcd.c')
| -rw-r--r-- | common/lcd.c | 24 | 
1 files changed, 20 insertions, 4 deletions
| diff --git a/common/lcd.c b/common/lcd.c index db799db6b..64fb1c640 100644 --- a/common/lcd.c +++ b/common/lcd.c @@ -63,7 +63,7 @@  /************************************************************************/  #ifdef CONFIG_LCD_LOGO  # include <bmp_logo.h>		/* Get logo data, width and height	*/ -# if (CONSOLE_COLOR_WHITE >= BMP_LOGO_OFFSET) +# if (CONSOLE_COLOR_WHITE >= BMP_LOGO_OFFSET) && (LCD_BPP != LCD_COLOR16)  #  error Default Color Map overlaps with Logo Color Map  # endif  #endif @@ -218,8 +218,12 @@ static void lcd_drawchars (ushort x, ushort y, uchar *str, int count)  	for (row=0;  row < VIDEO_FONT_HEIGHT;  ++row, dest += lcd_line_length)  {  		uchar *s = str; -		uchar *d = dest;  		int i; +#if LCD_BPP == LCD_COLOR16 +		ushort *d = (ushort *)dest; +#else +		uchar *d = dest; +#endif  #if LCD_BPP == LCD_MONOCHROME  		uchar rest = *d & -(1 << (8-off)); @@ -244,7 +248,7 @@ static void lcd_drawchars (ushort x, ushort y, uchar *str, int count)  				bits <<= 1;  			}  #elif LCD_BPP == LCD_COLOR16 -			for (c=0; c<16; ++c) { +			for (c=0; c<8; ++c) {  				*d++ = (bits & 0x80) ?  						lcd_color_fg : lcd_color_bg;  				bits <<= 1; @@ -521,6 +525,13 @@ void bitmap_plot (int x, int y)  		cmap = (ushort *)&(cp->lcd_cmap[BMP_LOGO_OFFSET*sizeof(ushort)]);  #elif defined(CONFIG_ATMEL_LCD)  		cmap = (uint *) (panel_info.mmio + ATMEL_LCDC_LUT(0)); +#else +		/* +		 * default case: generic system with no cmap (most likely 16bpp) +		 * We set cmap to the source palette, so no change is done. +		 * This avoids even more ifdef in the next stanza +		 */ +		cmap = bmp_logo_palette;  #endif  		WATCHDOG_RESET(); @@ -559,10 +570,15 @@ void bitmap_plot (int x, int y)  		}  	}  	else { /* true color mode */ +		u16 col16;  		fb16 = (ushort *)(lcd_base + y * lcd_line_length + x);  		for (i=0; i<BMP_LOGO_HEIGHT; ++i) {  			for (j=0; j<BMP_LOGO_WIDTH; j++) { -				fb16[j] = bmp_logo_palette[(bmap[j])]; +				col16 = bmp_logo_palette[(bmap[j]-16)]; +				fb16[j] = +					((col16 & 0x000F) << 1) | +					((col16 & 0x00F0) << 3) | +					((col16 & 0x0F00) << 4);  				}  			bmap += BMP_LOGO_WIDTH;  			fb16 += panel_info.vl_col; |