splash: display splash in DM_VIDEO configurations

Currently for CONFIG_DM_VIDEO=y setting splashimage env variable doesn't
have any effect. Introduce a common function for both dm-video/lcd stacks,
that checks env("splashimage") and invokes bmp_display() accordingly.
For additional details please check discussion [1].

[1] https://lists.denx.de/pipermail/u-boot/2019-May/371002.html

Signed-off-by: Igor Opaniuk <igor.opaniuk@toradex.com>
This commit is contained in:
Igor Opaniuk 2019-05-29 09:01:43 +00:00 committed by Anatolij Gustschin
parent 38c2a8a001
commit 5eb83c0ac1
4 changed files with 25 additions and 14 deletions

View File

@ -171,8 +171,7 @@ int drv_lcd_init(void)
void lcd_clear(void)
{
int bg_color;
char *s;
ulong addr;
__maybe_unused ulong addr;
static int do_splash = 1;
#if LCD_BPP == LCD_COLOR8
/* Setting the palette */
@ -222,14 +221,10 @@ void lcd_clear(void)
/* Paint the logo and retrieve LCD base address */
debug("[LCD] Drawing the logo...\n");
if (do_splash) {
s = env_get("splashimage");
if (s) {
if (splash_display() == 0) {
do_splash = 0;
addr = simple_strtoul(s, NULL, 16);
if (lcd_splash(addr) == 0) {
lcd_sync();
return;
}
lcd_sync();
return;
}
}

View File

@ -80,11 +80,23 @@ void splash_get_pos(int *x, int *y)
}
#endif /* CONFIG_SPLASH_SCREEN_ALIGN */
#if defined(CONFIG_SPLASH_SCREEN) && defined(CONFIG_LCD)
int lcd_splash(ulong addr)
/*
* Common function to show a splash image if env("splashimage") is set.
* Is used for both dm_video and lcd video stacks. For additional
* details please refer to doc/README.splashprepare.
*/
#if defined(CONFIG_SPLASH_SCREEN) && defined(CONFIG_CMD_BMP)
int splash_display(void)
{
ulong addr;
char *s;
int x = 0, y = 0, ret;
s = env_get("splashimage");
if (!s)
return -EINVAL;
addr = simple_strtoul(s, NULL, 16);
ret = splash_screen_prepare();
if (ret)
return ret;

View File

@ -16,6 +16,7 @@
#include <malloc.h>
#include <stdio_dev.h>
#include <serial.h>
#include <splash.h>
#if defined(CONFIG_SYS_I2C)
#include <i2c.h>
@ -366,6 +367,9 @@ int stdio_add_devices(void)
if (ret)
printf("%s: Video device failed (ret=%d)\n", __func__, ret);
#endif /* !CONFIG_SYS_CONSOLE_IS_IN_ENV */
#if defined(CONFIG_SPLASH_SCREEN) && defined(CONFIG_CMD_BMP)
splash_display();
#endif /* CONFIG_SPLASH_SCREEN && CONFIG_CMD_BMP */
#else
# if defined(CONFIG_LCD)
drv_lcd_init ();

View File

@ -66,10 +66,10 @@ void splash_get_pos(int *x, int *y);
static inline void splash_get_pos(int *x, int *y) { }
#endif
#if defined(CONFIG_SPLASH_SCREEN) && defined(CONFIG_LCD)
int lcd_splash(ulong addr);
#if defined(CONFIG_SPLASH_SCREEN) && defined(CONFIG_CMD_BMP)
int splash_display(void);
#else
static inline int lcd_splash(ulong addr)
static inline int splash_display(void)
{
return -ENOSYS;
}