video: cfb_console: logo can be positioned via the splashpos variable

Extend the driver for placing the video/bmp logo as specified
by "splashpos" environment variable.

Signed-off-by: Bastian Ruppert <Bastian.Ruppert@Sewerin.de>
Signed-off-by: Anatolij Gustschin <agust@denx.de>
CC: Stefano Babic <sbabic@denx.de>
Signed-off-by: Tom Rini <trini@ti.com>
master
Bastian Ruppert 12 years ago committed by Tom Rini
parent 39e133d196
commit 1e681f9ad8
  1. 94
      drivers/video/cfb_console.c

@ -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);

Loading…
Cancel
Save