splash: display splash in DM_VIDEO configurations
authorIgor Opaniuk <igor.opaniuk@toradex.com>
Wed, 29 May 2019 09:01:43 +0000 (09:01 +0000)
committerAnatolij Gustschin <agust@denx.de>
Tue, 4 Jun 2019 21:20:43 +0000 (23:20 +0200)
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
common/splash.c
common/stdio.c
include/splash.h

index 95526b1e17e8f00e64722830274633206838ff0d..b34754fe518ca07208ed7bd8d3d107303dc8d934 100644 (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;
                }
        }
 
index d251b3b6547018f75faca2da742e89edd53af319..79d50577ee16c5d9e37cfd637923d43aa685053c 100644 (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;
index ee22c1fd58523aa407bb7d1e63a9262e1a342306..54ecc9b53db9c2354d3b2f30c2517c58c7c77891 100644 (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 ();
index 228aff441b87f46c3747d5376773b559898ebea5..7fd2de8fea1dd582f5b6f9e936d86b764bde6ec4 100644 (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;
 }