mirror of
https://github.com/u-boot/u-boot.git
synced 2024-11-26 05:34:30 +08:00
lcd: introduce lcd_set_cmap
Reduce the lcd_display_bitmap #ifdef complexity by extracting Atmel-specific code for setting cmap for bitmap images into a new function lcd_set_cmap(). A default version is implemented with the remainder of the code. Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il> Reviewed-by: Simon Glass <sjg@chromium.org> Tested-by: Bo Shen <voice.shen@atmel.com> Tested-by: Josh Wu <josh.wu@atmel.com> Cc: Bo Shen <voice.shen@atmel.com> Cc: Simon Glass <sjg@chromium.org> Cc: Anatolij Gustschin <agust@denx.de>
This commit is contained in:
parent
2306457c45
commit
0b29a8969e
46
common/lcd.c
46
common/lcd.c
@ -613,9 +613,27 @@ __weak void fb_put_word(uchar **fb, uchar **from)
|
||||
}
|
||||
#endif /* CONFIG_BMP_16BPP */
|
||||
|
||||
__weak void lcd_set_cmap(bmp_image_t *bmp, unsigned colors)
|
||||
{
|
||||
int i;
|
||||
bmp_color_table_entry_t cte;
|
||||
ushort *cmap = configuration_get_cmap();
|
||||
|
||||
for (i = 0; i < colors; ++i) {
|
||||
cte = bmp->color_table[i];
|
||||
*cmap = (((cte.red) << 8) & 0xf800) |
|
||||
(((cte.green) << 3) & 0x07e0) |
|
||||
(((cte.blue) >> 3) & 0x001f);
|
||||
#if defined(CONFIG_MPC823)
|
||||
cmap--;
|
||||
#else
|
||||
cmap++;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
int lcd_display_bitmap(ulong bmp_image, int x, int y)
|
||||
{
|
||||
ushort *cmap = NULL;
|
||||
ushort *cmap_base = NULL;
|
||||
ushort i, j;
|
||||
uchar *fb;
|
||||
@ -663,29 +681,8 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
|
||||
debug("Display-bmp: %d x %d with %d colors\n",
|
||||
(int)width, (int)height, (int)colors);
|
||||
|
||||
if (bmp_bpix == 8) {
|
||||
cmap = configuration_get_cmap();
|
||||
cmap_base = cmap;
|
||||
|
||||
/* Set color map */
|
||||
for (i = 0; i < colors; ++i) {
|
||||
bmp_color_table_entry_t cte = bmp->color_table[i];
|
||||
#if !defined(CONFIG_ATMEL_LCD)
|
||||
ushort colreg =
|
||||
( ((cte.red) << 8) & 0xf800) |
|
||||
( ((cte.green) << 3) & 0x07e0) |
|
||||
( ((cte.blue) >> 3) & 0x001f) ;
|
||||
*cmap = colreg;
|
||||
#if defined(CONFIG_MPC823)
|
||||
cmap--;
|
||||
#else
|
||||
cmap++;
|
||||
#endif
|
||||
#else /* CONFIG_ATMEL_LCD */
|
||||
lcd_setcolreg(i, cte.red, cte.green, cte.blue);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
if (bmp_bpix == 8)
|
||||
lcd_set_cmap(bmp, colors);
|
||||
|
||||
padded_width = (width & 0x3 ? (width & ~0x3) + 4 : width);
|
||||
|
||||
@ -706,6 +703,7 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
|
||||
switch (bmp_bpix) {
|
||||
case 1: /* pass through */
|
||||
case 8: {
|
||||
cmap_base = configuration_get_cmap();
|
||||
#ifdef CONFIG_LCD_BMP_RLE8
|
||||
u32 compression = get_unaligned_le32(&bmp->header.compression);
|
||||
if (compression == BMP_BI_RLE8) {
|
||||
|
@ -11,6 +11,7 @@
|
||||
#include <asm/arch/gpio.h>
|
||||
#include <asm/arch/clk.h>
|
||||
#include <lcd.h>
|
||||
#include <bmp_layout.h>
|
||||
#include <atmel_lcdc.h>
|
||||
|
||||
/* configurable parameters */
|
||||
@ -80,6 +81,16 @@ void lcd_setcolreg(ushort regno, ushort red, ushort green, ushort blue)
|
||||
#endif
|
||||
}
|
||||
|
||||
void lcd_set_cmap(bmp_image_t *bmp, unsigned colors)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < colors; ++i) {
|
||||
bmp_color_table_entry_t cte = bmp->color_table[i];
|
||||
lcd_setcolreg(i, cte.red, cte.green, cte.blue);
|
||||
}
|
||||
}
|
||||
|
||||
void lcd_ctrl_init(void *lcdbase)
|
||||
{
|
||||
unsigned long value;
|
||||
|
Loading…
Reference in New Issue
Block a user