aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Opaniuk2019-05-29 09:01:43 +0000
committerAnatolij Gustschin2019-06-04 23:20:43 +0200
commit5eb83c0ac114bf193de207f46118075a6c1621c5 (patch)
tree0b010a86e83eaaaa9c041bea399f92502b648d47
parent38c2a8a00132b4dcc6a0bb5baf5146b9eb9eb2d2 (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.c13
-rw-r--r--common/splash.c16
-rw-r--r--common/stdio.c4
-rw-r--r--include/splash.h6
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;
}