[U-Boot] [RESEND, RFC 1/1] 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 --- common/lcd.c | 10 +++------- common/splash.c | 16 ++++++++++++++-- common/stdio.c | 4 ++++ include/splash.h | 6 +++--- 4 files changed, 24 insertions(+), 12 deletions(-)
diff --git a/common/lcd.c b/common/lcd.c index 95526b1e17..a55f1620a1 100644 --- a/common/lcd.c +++ b/common/lcd.c @@ -222,14 +222,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 d251b3b654..f026390393 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) +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 ee22c1fd58..22de7aa491 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 */ +#ifdef CONFIG_SPLASH_SCREEN + splash_display(); +#endif /* CONFIG_SPLASH_SCREEN */ #else # if defined(CONFIG_LCD) drv_lcd_init (); diff --git a/include/splash.h b/include/splash.h index 228aff441b..4ed8d60325 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); +#ifdef CONFIG_SPLASH_SCREEN +int splash_display(void); #else -static inline int lcd_splash(ulong addr) +static inline int splash_display(void) { return -ENOSYS; }

On Tue, 28 May 2019 15:19:37 +0000 Igor Opaniuk igor.opaniuk@toradex.com wrote: ...
diff --git a/common/splash.c b/common/splash.c index d251b3b654..f026390393 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)
splash_display() also depends on code in cmd/bmp.c so please use #if defined(CONFIG_SPLASH_SCREEN) && defined(CONFIG_CMD_BMP) here to prevent link errors.
...
diff --git a/common/stdio.c b/common/stdio.c index ee22c1fd58..22de7aa491 100644 --- a/common/stdio.c +++ b/common/stdio.c
...
@@ -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 */ +#ifdef CONFIG_SPLASH_SCREEN
#if defined(CONFIG_SPLASH_SCREEN) && defined(CONFIG_CMD_BMP)
- splash_display();
+#endif /* CONFIG_SPLASH_SCREEN */ #else # if defined(CONFIG_LCD) drv_lcd_init ();
-- Anatolij
participants (2)
-
Anatolij Gustschin
-
Igor Opaniuk