mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-06-06 14:51:35 +00: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
2 changed files with 33 additions and 24 deletions
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 */
|
#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)
|
int lcd_display_bitmap(ulong bmp_image, int x, int y)
|
||||||
{
|
{
|
||||||
ushort *cmap = NULL;
|
|
||||||
ushort *cmap_base = NULL;
|
ushort *cmap_base = NULL;
|
||||||
ushort i, j;
|
ushort i, j;
|
||||||
uchar *fb;
|
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",
|
debug("Display-bmp: %d x %d with %d colors\n",
|
||||||
(int)width, (int)height, (int)colors);
|
(int)width, (int)height, (int)colors);
|
||||||
|
|
||||||
if (bmp_bpix == 8) {
|
if (bmp_bpix == 8)
|
||||||
cmap = configuration_get_cmap();
|
lcd_set_cmap(bmp, colors);
|
||||||
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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
padded_width = (width & 0x3 ? (width & ~0x3) + 4 : width);
|
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) {
|
switch (bmp_bpix) {
|
||||||
case 1: /* pass through */
|
case 1: /* pass through */
|
||||||
case 8: {
|
case 8: {
|
||||||
|
cmap_base = configuration_get_cmap();
|
||||||
#ifdef CONFIG_LCD_BMP_RLE8
|
#ifdef CONFIG_LCD_BMP_RLE8
|
||||||
u32 compression = get_unaligned_le32(&bmp->header.compression);
|
u32 compression = get_unaligned_le32(&bmp->header.compression);
|
||||||
if (compression == BMP_BI_RLE8) {
|
if (compression == BMP_BI_RLE8) {
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
#include <asm/arch/gpio.h>
|
#include <asm/arch/gpio.h>
|
||||||
#include <asm/arch/clk.h>
|
#include <asm/arch/clk.h>
|
||||||
#include <lcd.h>
|
#include <lcd.h>
|
||||||
|
#include <bmp_layout.h>
|
||||||
#include <atmel_lcdc.h>
|
#include <atmel_lcdc.h>
|
||||||
|
|
||||||
/* configurable parameters */
|
/* configurable parameters */
|
||||||
|
@ -80,6 +81,16 @@ void lcd_setcolreg(ushort regno, ushort red, ushort green, ushort blue)
|
||||||
#endif
|
#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)
|
void lcd_ctrl_init(void *lcdbase)
|
||||||
{
|
{
|
||||||
unsigned long value;
|
unsigned long value;
|
||||||
|
|
Loading…
Add table
Reference in a new issue