common lcd: simplify core functions
authorNikita Kiryanov <nikita@compulab.co.il>
Thu, 9 Aug 2012 00:14:52 +0000 (00:14 +0000)
committerAnatolij Gustschin <agust@denx.de>
Wed, 5 Sep 2012 08:28:15 +0000 (10:28 +0200)
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>
common/lcd.c

index 4a5c8d58de4a7c5f038ca9aa1d58e637403d1d3d..0f93eae9df1c54683c4ff2a07bcd49475987172b 100644 (file)
@@ -498,23 +498,37 @@ static int lcd_getbgcolor(void)
 /************************************************************************/
 /* ** 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
 void bitmap_plot(int x, int y)
 {
 #ifdef CONFIG_ATMEL_LCD
-       uint *cmap;
+       uint *cmap = (uint *)bmp_logo_palette;
 #else
-       ushort *cmap;
+       ushort *cmap = (ushort *)bmp_logo_palette;
 #endif
        ushort i, j;
        uchar *bmap;
        uchar *fb;
        ushort *fb16;
-#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);
+#if defined(CONFIG_MPC823)
+       immap_t *immr = (immap_t *) CONFIG_SYS_IMMR;
+       cpm8xx_t *cp = &(immr->im_cpm);
 #endif
 
        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);
 
        if (NBITS(panel_info.vl_bpix) < 12) {
-               /* Leave room for default color map */
-#if defined(CONFIG_CPU_PXA)
-               cmap = (ushort *) fbi->palette;
-#elif defined(CONFIG_MPC823)
+               /* Leave room for default color map
+                * default case: generic system with no cmap (most likely 16bpp)
+                * cmap was set to the source palette, so no change is done.
+                * This avoids even more ifdefs in the next stanza
+                */
+#if defined(CONFIG_MPC823)
                cmap = (ushort *) &(cp->lcd_cmap[BMP_LOGO_OFFSET * sizeof(ushort)]);
 #elif defined(CONFIG_ATMEL_LCD)
-               cmap = (uint *) (panel_info.mmio + ATMEL_LCDC_LUT(0));
+               cmap = (uint *)configuration_get_cmap();
 #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;
+               cmap = configuration_get_cmap();
 #endif
 
                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 pwidth = panel_info.vl_col;
        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') &&
                (bmp->header.signature[1] == 'M'))) {
@@ -682,14 +687,7 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
 #if !defined(CONFIG_MCC200)
        /* MCC200 LCD doesn't need CMAP, supports 1bpp b&w only */
        if (bmp_bpix == 8) {
-#if defined(CONFIG_CPU_PXA)
-               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 = configuration_get_cmap();
                cmap_base = cmap;
 
                /* Set color map */