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

View File

@ -80,11 +80,23 @@ void splash_get_pos(int *x, int *y)
} }
#endif /* CONFIG_SPLASH_SCREEN_ALIGN */ #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; int x = 0, y = 0, ret;
s = env_get("splashimage");
if (!s)
return -EINVAL;
addr = simple_strtoul(s, NULL, 16);
ret = splash_screen_prepare(); ret = splash_screen_prepare();
if (ret) if (ret)
return ret; return ret;

View File

@ -16,6 +16,7 @@
#include <malloc.h> #include <malloc.h>
#include <stdio_dev.h> #include <stdio_dev.h>
#include <serial.h> #include <serial.h>
#include <splash.h>
#if defined(CONFIG_SYS_I2C) #if defined(CONFIG_SYS_I2C)
#include <i2c.h> #include <i2c.h>
@ -366,6 +367,9 @@ int stdio_add_devices(void)
if (ret) if (ret)
printf("%s: Video device failed (ret=%d)\n", __func__, ret); printf("%s: Video device failed (ret=%d)\n", __func__, ret);
#endif /* !CONFIG_SYS_CONSOLE_IS_IN_ENV */ #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 #else
# if defined(CONFIG_LCD) # if defined(CONFIG_LCD)
drv_lcd_init (); 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) { } static inline void splash_get_pos(int *x, int *y) { }
#endif #endif
#if defined(CONFIG_SPLASH_SCREEN) && defined(CONFIG_LCD) #if defined(CONFIG_SPLASH_SCREEN) && defined(CONFIG_CMD_BMP)
int lcd_splash(ulong addr); int splash_display(void);
#else #else
static inline int lcd_splash(ulong addr) static inline int splash_display(void)
{ {
return -ENOSYS; return -ENOSYS;
} }