]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - common/lcd.c
Fix unused function in cmd_bdinfo.c
[karo-tx-uboot.git] / common / lcd.c
index db799db6b2aaafffd064de76de6fb7d4f5517aa0..6313ec05bb952dadd7ac6eac2e10e637254734f9 100644 (file)
@@ -41,7 +41,7 @@
 #include <lcd.h>
 #include <watchdog.h>
 
-#if defined(CONFIG_PXA250)
+#if defined CONFIG_PXA250 || defined CONFIG_PXA27X || defined CONFIG_CPU_MONAHANS
 #include <asm/byteorder.h>
 #endif
 
 /* ** FONT DATA                                                                */
 /************************************************************************/
 #include <video_font.h>                /* Get font data, width and height      */
+#include <video_font_data.h>
 
 /************************************************************************/
 /* ** LOGO DATA                                                                */
 /************************************************************************/
 #ifdef CONFIG_LCD_LOGO
 # include <bmp_logo.h>         /* Get logo data, width and height      */
-# if (CONSOLE_COLOR_WHITE >= BMP_LOGO_OFFSET)
+# include <bmp_logo_data.h>
+# if (CONSOLE_COLOR_WHITE >= BMP_LOGO_OFFSET) && (LCD_BPP != LCD_COLOR16)
 #  error Default Color Map overlaps with Logo Color Map
 # endif
 #endif
@@ -78,7 +80,6 @@ static inline void lcd_putc_xy (ushort x, ushort y, uchar  c);
 
 static int lcd_init (void *lcdbase);
 
-static int lcd_clear (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[]);
 static void *lcd_logo (void);
 
 static int lcd_getbgcolor (void);
@@ -211,15 +212,22 @@ void lcd_printf(const char *fmt, ...)
 static void lcd_drawchars (ushort x, ushort y, uchar *str, int count)
 {
        uchar *dest;
-       ushort off, row;
+       ushort row;
+
+#if LCD_BPP == LCD_MONOCHROME
+       ushort off  = x * (1 << LCD_BPP) % 8;
+#endif
 
        dest = (uchar *)(lcd_base + y * lcd_line_length + x * (1 << LCD_BPP) / 8);
-       off  = x * (1 << LCD_BPP) % 8;
 
        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 +252,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;
@@ -346,7 +354,14 @@ int drv_lcd_init (void)
 }
 
 /*----------------------------------------------------------------------*/
-static int lcd_clear (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
+static
+int do_lcd_clear(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
+{
+       lcd_clear();
+       return 0;
+}
+
+void lcd_clear(void)
 {
 #if LCD_BPP == LCD_MONOCHROME
        /* Setting the palette */
@@ -387,12 +402,10 @@ static int lcd_clear (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
 
        console_col = 0;
        console_row = 0;
-
-       return (0);
 }
 
 U_BOOT_CMD(
-       cls,    1,      1,      lcd_clear,
+       cls,    1,      1,      do_lcd_clear,
        "clear screen",
        ""
 );
@@ -406,7 +419,7 @@ static int lcd_init (void *lcdbase)
 
        lcd_ctrl_init (lcdbase);
        lcd_is_enabled = 1;
-       lcd_clear (NULL, 1, 1, NULL);   /* dummy args */
+       lcd_clear();
        lcd_enable ();
 
        /* Initialize the console */
@@ -499,7 +512,7 @@ void bitmap_plot (int x, int y)
        uchar *bmap;
        uchar *fb;
        ushort *fb16;
-#if defined(CONFIG_PXA250)
+#if defined CONFIG_PXA250 || defined CONFIG_PXA27X || defined CONFIG_CPU_MONAHANS
        struct pxafb_info *fbi = &panel_info.pxa;
 #elif defined(CONFIG_MPC823)
        volatile immap_t *immr = (immap_t *) CONFIG_SYS_IMMR;
@@ -515,12 +528,19 @@ void bitmap_plot (int x, int y)
 
        if (NBITS(panel_info.vl_bpix) < 12) {
                /* Leave room for default color map */
-#if defined(CONFIG_PXA250)
+#if defined CONFIG_PXA250 || defined CONFIG_PXA27X || defined CONFIG_CPU_MONAHANS
                cmap = (ushort *)fbi->palette;
 #elif 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));
+#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 +579,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;
@@ -598,8 +623,7 @@ 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;
-       unsigned long compression;
-#if defined(CONFIG_PXA250)
+#if defined CONFIG_PXA250 || defined CONFIG_PXA27X || defined CONFIG_CPU_MONAHANS
        struct pxafb_info *fbi = &panel_info.pxa;
 #elif defined(CONFIG_MPC823)
        volatile immap_t *immr = (immap_t *) CONFIG_SYS_IMMR;
@@ -616,7 +640,6 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
        height = le32_to_cpu (bmp->header.height);
        bmp_bpix = le16_to_cpu(bmp->header.bit_count);
        colors = 1 << bmp_bpix;
-       compression = le32_to_cpu (bmp->header.compression);
 
        bpix = NBITS(panel_info.vl_bpix);
 
@@ -640,7 +663,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_PXA250)
+#if defined CONFIG_PXA250 || defined CONFIG_PXA27X || defined CONFIG_CPU_MONAHANS
                cmap = (ushort *)fbi->palette;
 #elif defined(CONFIG_MPC823)
                cmap = (ushort *)&(cp->lcd_cmap[255*sizeof(ushort)]);
@@ -715,7 +738,7 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
 
        bmap = (uchar *)bmp + le32_to_cpu (bmp->header.data_offset);
        fb   = (uchar *) (lcd_base +
-               (y + height - 1) * lcd_line_length + x);
+               (y + height - 1) * lcd_line_length + x * bpix / 8);
 
        switch (bmp_bpix) {
        case 1: /* pass through */
@@ -729,7 +752,7 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
                        WATCHDOG_RESET();
                        for (j = 0; j < width; j++) {
                                if (bpix != 16) {
-#if defined(CONFIG_PXA250) || defined(CONFIG_ATMEL_LCD)
+#if defined CONFIG_PXA250 || defined CONFIG_PXA27X || defined CONFIG_CPU_MONAHANS || defined(CONFIG_ATMEL_LCD)
                                        *(fb++) = *(bmap++);
 #elif defined(CONFIG_MPC823) || defined(CONFIG_MCC200)
                                        *(fb++) = 255 - *(bmap++);