From: Alessandro Rubini <rub...@unipv.it> Signed-off-by: Alessandro Rubini <rub...@unipv.it> Acked-by: Andrea Gallo <andrea.ga...@stericsson.com> --- common/lcd.c | 26 ++++++++++++++++++++------ 1 files changed, 20 insertions(+), 6 deletions(-)
diff --git a/common/lcd.c b/common/lcd.c index 4e31618..d05c025 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 @@ -244,10 +244,12 @@ 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) { - *d++ = (bits & 0x80) ? - lcd_color_fg : lcd_color_bg; - bits <<= 1; + { + u16 *d = (u16 *)dest; + for (c=0; c<8; ++c) { + *d++ = (bits & 0x80) ? 0xffff : 0; + bits <<= 1; + } } #endif } @@ -529,6 +531,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(); @@ -567,10 +576,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; -- 1.6.0.2 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot