]> git.sur5r.net Git - u-boot/blobdiff - board/esd/common/lcd.c
Merge /home/roy/CVS/7448/Open_Source/u-boot.git.dev
[u-boot] / board / esd / common / lcd.c
index 22b49ce25684ed7962bcc83c93f3d4ffca477813..196171ce5aa9dab779def53adb4952fa47352765 100644 (file)
@@ -81,7 +81,7 @@ void lcd_bmp(uchar *logo_bmp)
        uchar *ptr;
        ushort *ptr2;
        ushort val;
-       unsigned char *dst;
+       unsigned char *dst = NULL;
        int x, y;
        int width, height, bpp, colors, line_size;
        int header_size;
@@ -89,7 +89,6 @@ void lcd_bmp(uchar *logo_bmp)
        unsigned char r, g, b;
        BITMAPINFOHEADER *bm_info;
        ulong len;
-       int do_free = 0;
 
        /*
         * Check for bmp mark 'BM'
@@ -100,11 +99,17 @@ void lcd_bmp(uchar *logo_bmp)
                 * Decompress bmp image
                 */
                len = CFG_VIDEO_LOGO_MAX_SIZE;
-               dst = malloc(CFG_LCD_LOGO_MAX_SIZE);
-               do_free = 1;
-               if (gunzip(dst, CFG_LCD_LOGO_MAX_SIZE, (uchar *)logo_bmp, &len) != 0) {
+               dst = malloc(CFG_VIDEO_LOGO_MAX_SIZE);
+               if (dst == NULL) {
+                       printf("Error: malloc in gunzip failed!\n");
                        return;
                }
+               if (gunzip(dst, CFG_VIDEO_LOGO_MAX_SIZE, (uchar *)logo_bmp, &len) != 0) {
+                       return;
+               }
+               if (len == CFG_VIDEO_LOGO_MAX_SIZE) {
+                       printf("Image could be truncated (increase CFG_VIDEO_LOGO_MAX_SIZE)!\n");
+               }
 
                /*
                 * Check for bmp mark 'BM'
@@ -147,7 +152,9 @@ void lcd_bmp(uchar *logo_bmp)
                break;
        default:
                printf("LCD: Unknown bpp (%d) im image!\n", bpp);
-               free(dst);
+               if ((dst != NULL) && (dst != (uchar *)logo_bmp)) {
+                       free(dst);
+               }
                return;
        }
        printf(" (%d*%d, %dbpp)\n", width, height, bpp);
@@ -205,7 +212,7 @@ void lcd_bmp(uchar *logo_bmp)
                }
        }
 
-       if (do_free) {
+       if ((dst != NULL) && (dst != (uchar *)logo_bmp)) {
                free(dst);
        }
 }
@@ -222,6 +229,9 @@ void lcd_init(uchar *lcd_reg, uchar *lcd_mem, S1D_REGS *regs, int reg_count,
        /*
         * Detect epson
         */
+       lcd_reg[0] = 0x00;
+       lcd_reg[1] = 0x00;
+
        if (lcd_reg[0] == 0x1c) {
                /*
                 * Big epson detected
@@ -291,7 +301,7 @@ void lcd_init(uchar *lcd_reg, uchar *lcd_mem, S1D_REGS *regs, int reg_count,
        lcd_bmp(logo_bmp);
 }
 
-
+#ifdef CONFIG_VIDEO_SM501
 int do_esdbmp(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 {
        ulong addr;
@@ -324,3 +334,4 @@ U_BOOT_CMD(
        "esdbmp   - display BMP image\n",
        "<imageAddr> - display image\n"
 );
+#endif