common lcd: simplify core functions

Move highly platform dependant code into its own function to reduce the
number of #ifdefs in the bigger functions

Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il>
Signed-off-by: Igor Grinberg <grinberg@compulab.co.il>
This commit is contained in:
Nikita Kiryanov 2012-08-09 00:14:52 +00:00 committed by Anatolij Gustschin
parent 7c7e280aa6
commit 203c37b8c5
1 changed files with 30 additions and 32 deletions

View File

@ -498,23 +498,37 @@ static int lcd_getbgcolor(void)
/************************************************************************/ /************************************************************************/
/* ** Chipset depending Bitmap / Logo stuff... */ /* ** Chipset depending Bitmap / Logo stuff... */
/************************************************************************/ /************************************************************************/
static inline ushort *configuration_get_cmap(void)
{
#if defined CONFIG_CPU_PXA
struct pxafb_info *fbi = &panel_info.pxa;
return (ushort *)fbi->palette;
#elif defined(CONFIG_MPC823)
immap_t *immr = (immap_t *) CONFIG_SYS_IMMR;
cpm8xx_t *cp = &(immr->im_cpm);
return (ushort *)&(cp->lcd_cmap[255 * sizeof(ushort)]);
#elif defined(CONFIG_ATMEL_LCD)
return (ushort *)(panel_info.mmio + ATMEL_LCDC_LUT(0));
#else
return (ushort *)panel_info.cmap;
#endif
}
#ifdef CONFIG_LCD_LOGO #ifdef CONFIG_LCD_LOGO
void bitmap_plot(int x, int y) void bitmap_plot(int x, int y)
{ {
#ifdef CONFIG_ATMEL_LCD #ifdef CONFIG_ATMEL_LCD
uint *cmap; uint *cmap = (uint *)bmp_logo_palette;
#else #else
ushort *cmap; ushort *cmap = (ushort *)bmp_logo_palette;
#endif #endif
ushort i, j; ushort i, j;
uchar *bmap; uchar *bmap;
uchar *fb; uchar *fb;
ushort *fb16; ushort *fb16;
#if defined(CONFIG_CPU_PXA) #if defined(CONFIG_MPC823)
struct pxafb_info *fbi = &panel_info.pxa; immap_t *immr = (immap_t *) CONFIG_SYS_IMMR;
#elif defined(CONFIG_MPC823) cpm8xx_t *cp = &(immr->im_cpm);
volatile immap_t *immr = (immap_t *) CONFIG_SYS_IMMR;
volatile cpm8xx_t *cp = &(immr->im_cpm);
#endif #endif
debug("Logo: width %d height %d colors %d cmap %d\n", debug("Logo: width %d height %d colors %d cmap %d\n",
@ -525,20 +539,17 @@ void bitmap_plot(int x, int y)
fb = (uchar *)(lcd_base + y * lcd_line_length + x); fb = (uchar *)(lcd_base + y * lcd_line_length + x);
if (NBITS(panel_info.vl_bpix) < 12) { if (NBITS(panel_info.vl_bpix) < 12) {
/* Leave room for default color map */ /* Leave room for default color map
#if defined(CONFIG_CPU_PXA) * default case: generic system with no cmap (most likely 16bpp)
cmap = (ushort *) fbi->palette; * cmap was set to the source palette, so no change is done.
#elif defined(CONFIG_MPC823) * This avoids even more ifdefs in the next stanza
*/
#if defined(CONFIG_MPC823)
cmap = (ushort *) &(cp->lcd_cmap[BMP_LOGO_OFFSET * sizeof(ushort)]); cmap = (ushort *) &(cp->lcd_cmap[BMP_LOGO_OFFSET * sizeof(ushort)]);
#elif defined(CONFIG_ATMEL_LCD) #elif defined(CONFIG_ATMEL_LCD)
cmap = (uint *) (panel_info.mmio + ATMEL_LCDC_LUT(0)); cmap = (uint *)configuration_get_cmap();
#else #else
/* cmap = configuration_get_cmap();
* 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 #endif
WATCHDOG_RESET(); WATCHDOG_RESET();
@ -639,12 +650,6 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
unsigned long width, height, byte_width; unsigned long width, height, byte_width;
unsigned long pwidth = panel_info.vl_col; unsigned long pwidth = panel_info.vl_col;
unsigned colors, bpix, bmp_bpix; unsigned colors, bpix, bmp_bpix;
#if defined(CONFIG_CPU_PXA)
struct pxafb_info *fbi = &panel_info.pxa;
#elif defined(CONFIG_MPC823)
volatile immap_t *immr = (immap_t *) CONFIG_SYS_IMMR;
volatile cpm8xx_t *cp = &(immr->im_cpm);
#endif
if (!((bmp->header.signature[0] == 'B') && if (!((bmp->header.signature[0] == 'B') &&
(bmp->header.signature[1] == 'M'))) { (bmp->header.signature[1] == 'M'))) {
@ -682,14 +687,7 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
#if !defined(CONFIG_MCC200) #if !defined(CONFIG_MCC200)
/* MCC200 LCD doesn't need CMAP, supports 1bpp b&w only */ /* MCC200 LCD doesn't need CMAP, supports 1bpp b&w only */
if (bmp_bpix == 8) { if (bmp_bpix == 8) {
#if defined(CONFIG_CPU_PXA) cmap = configuration_get_cmap();
cmap = (ushort *)fbi->palette;
#elif defined(CONFIG_MPC823)
cmap = (ushort *)&(cp->lcd_cmap[255*sizeof(ushort)]);
#elif !defined(CONFIG_ATMEL_LCD) && !defined(CONFIG_EXYNOS_FB)
cmap = panel_info.cmap;
#endif
cmap_base = cmap; cmap_base = cmap;
/* Set color map */ /* Set color map */