diff options
author | Igor Opaniuk | 2019-05-29 09:01:43 +0000 |
---|---|---|
committer | Anatolij Gustschin | 2019-06-04 23:20:43 +0200 |
commit | 5eb83c0ac114bf193de207f46118075a6c1621c5 (patch) | |
tree | 0b010a86e83eaaaa9c041bea399f92502b648d47 | |
parent | 38c2a8a00132b4dcc6a0bb5baf5146b9eb9eb2d2 (diff) |
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>
-rw-r--r-- | common/lcd.c | 13 | ||||
-rw-r--r-- | common/splash.c | 16 | ||||
-rw-r--r-- | common/stdio.c | 4 | ||||
-rw-r--r-- | include/splash.h | 6 |
4 files changed, 25 insertions, 14 deletions
diff --git a/common/lcd.c b/common/lcd.c index 95526b1e17e..b34754fe518 100644 --- a/common/lcd.c +++ b/common/lcd.c @@ -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; } } diff --git a/common/splash.c b/common/splash.c index d251b3b6547..79d50577ee1 100644 --- a/common/splash.c +++ b/common/splash.c @@ -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; diff --git a/common/stdio.c b/common/stdio.c index ee22c1fd585..54ecc9b53db 100644 --- a/common/stdio.c +++ b/common/stdio.c @@ -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 (); diff --git a/include/splash.h b/include/splash.h index 228aff441b8..7fd2de8fea1 100644 --- a/include/splash.h +++ b/include/splash.h @@ -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; } |