@ -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 16 bpp )
* 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 ;