diff options
Diffstat (limited to 'drivers/cfb_console.c')
| -rw-r--r-- | drivers/cfb_console.c | 66 | 
1 files changed, 60 insertions, 6 deletions
| diff --git a/drivers/cfb_console.c b/drivers/cfb_console.c index 1eaac4771..9727aebbc 100644 --- a/drivers/cfb_console.c +++ b/drivers/cfb_console.c @@ -131,6 +131,16 @@ CONFIG_VIDEO_HW_CURSOR:	     - Uses the hardware cursor capability of the  #endif  /*****************************************************************************/ +/* Defines for the SED13806 driver					     */ +/*****************************************************************************/ +#ifdef CONFIG_VIDEO_SM501 + +#ifdef CONFIG_HH405 +#define VIDEO_FB_LITTLE_ENDIAN +#endif +#endif + +/*****************************************************************************/  /* Include video_fb.h after definitions of VIDEO_HW_RECTFILL etc	     */  /*****************************************************************************/  #include <video_fb.h> @@ -372,6 +382,8 @@ static const int video_font_draw_table32[16][4] = {  	    { 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff } }; +int gunzip(void *, int, unsigned char *, unsigned long *); +  /******************************************************************************/  static void video_drawchars (int xx, int yy, unsigned char *s, int count) @@ -489,7 +501,7 @@ static void video_drawchars (int xx, int yy, unsigned char *s, int count)  static inline void video_drawstring (int xx, int yy, unsigned char *s)  { -	video_drawchars (xx, yy, s, strlen (s)); +	video_drawchars (xx, yy, s, strlen ((char *)s));  }  /*****************************************************************************/ @@ -536,12 +548,12 @@ void console_cursor (int state)  		sprintf (info, " %02d:%02d:%02d ", tm.tm_hour, tm.tm_min,  			 tm.tm_sec);  		video_drawstring (VIDEO_VISIBLE_COLS - 10 * VIDEO_FONT_WIDTH, -				  VIDEO_INFO_Y, info); +				  VIDEO_INFO_Y, (uchar *)info);  		sprintf (info, "%02d.%02d.%04d", tm.tm_mday, tm.tm_mon,  			 tm.tm_year);  		video_drawstring (VIDEO_VISIBLE_COLS - 10 * VIDEO_FONT_WIDTH, -				  VIDEO_INFO_Y + 1 * VIDEO_FONT_HEIGHT, info); +				  VIDEO_INFO_Y + 1 * VIDEO_FONT_HEIGHT, (uchar *)info);  	}  #endif @@ -751,13 +763,49 @@ int video_display_bitmap (ulong bmp_image, int x, int y)  	unsigned colors;  	unsigned long compression;  	bmp_color_table_entry_t cte; +#ifdef CONFIG_VIDEO_BMP_GZIP +	unsigned char *dst = NULL; +	ulong len; +#endif  	WATCHDOG_RESET ();  	if (!((bmp->header.signature[0] == 'B') &&  	      (bmp->header.signature[1] == 'M'))) { + +#ifdef CONFIG_VIDEO_BMP_GZIP +		/* +		 * Could be a gzipped bmp image, try to decrompress... +		 */ +		len = CFG_VIDEO_LOGO_MAX_SIZE; +		dst = malloc(CFG_VIDEO_LOGO_MAX_SIZE); +		if (dst == NULL) { +			printf("Error: malloc in gunzip failed!\n"); +			return(1); +		} +		if (gunzip(dst, CFG_VIDEO_LOGO_MAX_SIZE, (uchar *)bmp_image, &len) != 0) { +			printf ("Error: no valid bmp or bmp.gz image at %lx\n", bmp_image); +			free(dst); +			return 1; +		} +		if (len == CFG_VIDEO_LOGO_MAX_SIZE) { +			printf("Image could be truncated (increase CFG_VIDEO_LOGO_MAX_SIZE)!\n"); +		} + +		/* +		 * Set addr to decompressed image +		 */ +		bmp = (bmp_image_t *)dst; + +		if (!((bmp->header.signature[0] == 'B') && +		      (bmp->header.signature[1] == 'M'))) { +			printf ("Error: no valid bmp.gz image at %lx\n", bmp_image); +			return 1; +		} +#else  		printf ("Error: no valid bmp image at %lx\n", bmp_image);  		return 1; +#endif /* CONFIG_VIDEO_BMP_GZIP */  	}  	width = le32_to_cpu (bmp->header.width); @@ -947,6 +995,13 @@ int video_display_bitmap (ulong bmp_image, int x, int y)  			le16_to_cpu (bmp->header.bit_count));  		break;  	} + +#ifdef CONFIG_VIDEO_BMP_GZIP +	if (dst) { +		free(dst); +	} +#endif +  	return (0);  }  #endif /* (CONFIG_COMMANDS & CFG_CMD_BMP) || CONFIG_SPLASH_SCREEN */ @@ -1061,11 +1116,10 @@ static void *video_logo (void)  	}  #endif /* CONFIG_SPLASH_SCREEN */ -  	logo_plot (video_fb_address, VIDEO_COLS, 0, 0);  	sprintf (info, " %s", &version_string); -	video_drawstring (VIDEO_INFO_X, VIDEO_INFO_Y, info); +	video_drawstring (VIDEO_INFO_X, VIDEO_INFO_Y, (uchar *)info);  #ifdef CONFIG_CONSOLE_EXTRA_INFO  	{ @@ -1076,7 +1130,7 @@ static void *video_logo (void)  			if (*info)  				video_drawstring (VIDEO_INFO_X,  						  VIDEO_INFO_Y + i * VIDEO_FONT_HEIGHT, -						  info); +						  (uchar *)info);  		}  	}  #endif |