lcd: make 16bpp work
Support for 16bpp was supposed to be in the code but was not working. This makes it work and has been tested in the nhk8815 board. Signed-off-by: Alessandro Rubini <rubini@unipv.it> Acked-by: Andrea Gallo <andrea.gallo@stericsson.com> Signed-off-by: Anatolij Gustschin <agust@denx.de>
This commit is contained in:
parent
152dda3d94
commit
acb1386893
24
common/lcd.c
24
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;
|
||||
|
Loading…
Reference in New Issue
Block a user