@ -66,7 +66,11 @@
* CONFIG_CONSOLE_TIME - display time / date in upper right
* corner , needs CONFIG_CMD_DATE and
* CONFIG_CONSOLE_CURSOR
* CONFIG_VIDEO_LOGO - display Linux Logo in upper left corner
* CONFIG_VIDEO_LOGO - display Linux Logo in upper left corner .
* Use CONFIG_SPLASH_SCREEN_ALIGN with
* environment variable " splashpos " to place
* the logo on other position . In this case
* no CONSOLE_EXTRA_INFO is possible .
* CONFIG_VIDEO_BMP_LOGO - use bmp_logo instead of linux_logo
* CONFIG_CONSOLE_EXTRA_INFO - display additional board information
* strings that normaly goes to serial
@ -1480,6 +1484,9 @@ int video_display_bitmap(ulong bmp_image, int x, int y)
# ifdef CONFIG_VIDEO_LOGO
static int video_logo_xpos ;
static int video_logo_ypos ;
void logo_plot ( void * screen , int width , int x , int y )
{
@ -1488,8 +1495,21 @@ void logo_plot(void *screen, int width, int x, int y)
int ycount = video_logo_height ;
unsigned char r , g , b , * logo_red , * logo_blue , * logo_green ;
unsigned char * source ;
unsigned char * dest = ( unsigned char * ) screen +
( ( y * width * VIDEO_PIXEL_SIZE ) + x * VIDEO_PIXEL_SIZE ) ;
unsigned char * dest ;
# ifdef CONFIG_SPLASH_SCREEN_ALIGN
if ( x = = BMP_ALIGN_CENTER )
x = max ( 0 , ( VIDEO_VISIBLE_COLS - VIDEO_LOGO_WIDTH ) / 2 ) ;
else if ( x < 0 )
x = max ( 0 , VIDEO_VISIBLE_COLS - VIDEO_LOGO_WIDTH + x + 1 ) ;
if ( y = = BMP_ALIGN_CENTER )
y = max ( 0 , ( VIDEO_VISIBLE_ROWS - VIDEO_LOGO_HEIGHT ) / 2 ) ;
else if ( y < 0 )
y = max ( 0 , VIDEO_VISIBLE_ROWS - VIDEO_LOGO_HEIGHT + y + 1 ) ;
# endif /* CONFIG_SPLASH_SCREEN_ALIGN */
dest = ( unsigned char * ) screen + ( y * width + x ) * VIDEO_PIXEL_SIZE ;
# ifdef CONFIG_VIDEO_BMP_LOGO
source = bmp_logo_bitmap ;
@ -1592,42 +1612,66 @@ static void *video_logo(void)
char info [ 128 ] ;
int space , len ;
__maybe_unused int y_off = 0 ;
__maybe_unused ulong addr ;
__maybe_unused char * s ;
# ifdef CONFIG_SPLASH_SCREEN
char * s ;
ulong addr ;
s = getenv ( " splashimage " ) ;
# ifdef CONFIG_SPLASH_SCREEN_ALIGN
s = getenv ( " splashpos " ) ;
if ( s ! = NULL ) {
int x = 0 , y = 0 ;
if ( s [ 0 ] = = ' m ' )
video_logo_xpos = BMP_ALIGN_CENTER ;
else
video_logo_xpos = simple_strtol ( s , NULL , 0 ) ;
addr = simple_strtoul ( s , NULL , 16 ) ;
# ifdef CONFIG_SPLASH_SCREEN_ALIGN
s = getenv ( " splashpos " ) ;
s = strchr ( s + 1 , ' , ' ) ;
if ( s ! = NULL ) {
if ( s [ 0 ] = = ' m ' )
x = BMP_ALIGN_CENTER ;
if ( s [ 1 ] = = ' m ' )
video_logo_ypos = BMP_ALIGN_CENTER ;
else
x = simple_strtol ( s , NULL , 0 ) ;
s = strchr ( s + 1 , ' , ' ) ;
if ( s ! = NULL ) {
if ( s [ 1 ] = = ' m ' )
y = BMP_ALIGN_CENTER ;
else
y = simple_strtol ( s + 1 , NULL , 0 ) ;
}
video_logo_ypos = simple_strtol ( s + 1 , NULL , 0 ) ;
}
}
# endif /* CONFIG_SPLASH_SCREEN_ALIGN */
if ( video_display_bitmap ( addr , x , y ) = = 0 ) {
# ifdef CONFIG_SPLASH_SCREEN
s = getenv ( " splashimage " ) ;
if ( s ! = NULL ) {
addr = simple_strtoul ( s , NULL , 16 ) ;
if ( video_display_bitmap ( addr ,
video_logo_xpos ,
video_logo_ypos ) = = 0 ) {
video_logo_height = 0 ;
return ( ( void * ) ( video_fb_address ) ) ;
}
}
# endif /* CONFIG_SPLASH_SCREEN */
logo_plot ( video_fb_address , VIDEO_COLS , 0 , 0 ) ;
logo_plot ( video_fb_address , VIDEO_COLS ,
video_logo_xpos , video_logo_ypos ) ;
# ifdef CONFIG_SPLASH_SCREEN_ALIGN
/*
* when using splashpos for video_logo , skip any info
* output on video console if the logo is not at 0 , 0
*/
if ( video_logo_xpos | | video_logo_ypos ) {
/*
* video_logo_height is used in text and cursor offset
* calculations . Since the console is below the logo ,
* we need to adjust the logo height
*/
if ( video_logo_ypos = = BMP_ALIGN_CENTER )
video_logo_height + = max ( 0 , ( VIDEO_VISIBLE_ROWS - \
VIDEO_LOGO_HEIGHT ) / 2 ) ;
else if ( video_logo_ypos > 0 )
video_logo_height + = video_logo_ypos ;
return video_fb_address + video_logo_height * VIDEO_LINE_LEN ;
}
# endif
sprintf ( info , " %s " , version_string ) ;