summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--board/compulab/cm_fx6/cm_fx6.c5
-rw-r--r--board/compulab/cm_t35/cm_t35.c5
-rw-r--r--board/compulab/common/Makefile1
-rw-r--r--board/compulab/common/common.h21
-rw-r--r--common/Makefile1
-rw-r--r--common/splash_source.c (renamed from board/compulab/common/splash.c)19
-rw-r--r--doc/README.splashprepare13
-rw-r--r--include/configs/cm_fx6.h1
-rw-r--r--include/configs/cm_t35.h1
-rw-r--r--include/splash.h11
10 files changed, 48 insertions, 30 deletions
diff --git a/board/compulab/cm_fx6/cm_fx6.c b/board/compulab/cm_fx6/cm_fx6.c
index b5c3ea19d3..ae6945ba9c 100644
--- a/board/compulab/cm_fx6/cm_fx6.c
+++ b/board/compulab/cm_fx6/cm_fx6.c
@@ -15,6 +15,7 @@
#include <netdev.h>
#include <fdt_support.h>
#include <sata.h>
+#include <splash.h>
#include <asm/arch/crm_regs.h>
#include <asm/arch/sys_proto.h>
#include <asm/arch/iomux.h>
@@ -42,8 +43,8 @@ static struct splash_location cm_fx6_splash_locations[] = {
int splash_screen_prepare(void)
{
- return cl_splash_screen_prepare(cm_fx6_splash_locations,
- ARRAY_SIZE(cm_fx6_splash_locations));
+ return splash_source_load(cm_fx6_splash_locations,
+ ARRAY_SIZE(cm_fx6_splash_locations));
}
#endif
diff --git a/board/compulab/cm_t35/cm_t35.c b/board/compulab/cm_t35/cm_t35.c
index 8143c05353..c4ea8ea875 100644
--- a/board/compulab/cm_t35/cm_t35.c
+++ b/board/compulab/cm_t35/cm_t35.c
@@ -19,6 +19,7 @@
#include <i2c.h>
#include <usb.h>
#include <mmc.h>
+#include <splash.h>
#include <twl4030.h>
#include <linux/compiler.h>
@@ -69,8 +70,8 @@ struct splash_location splash_locations[] = {
int splash_screen_prepare(void)
{
- return cl_splash_screen_prepare(splash_locations,
- ARRAY_SIZE(splash_locations));
+ return splash_source_load(splash_locations,
+ ARRAY_SIZE(splash_locations));
}
/*
diff --git a/board/compulab/common/Makefile b/board/compulab/common/Makefile
index dbf0009652..286f32731d 100644
--- a/board/compulab/common/Makefile
+++ b/board/compulab/common/Makefile
@@ -9,5 +9,4 @@
obj-y += common.o
obj-$(CONFIG_SYS_I2C) += eeprom.o
obj-$(CONFIG_LCD) += omap3_display.o
-obj-$(CONFIG_SPLASH_SCREEN) += splash.o
obj-$(CONFIG_SMC911X) += omap3_smc911x.o
diff --git a/board/compulab/common/common.h b/board/compulab/common/common.h
index b992965457..8f38b79fb0 100644
--- a/board/compulab/common/common.h
+++ b/board/compulab/common/common.h
@@ -24,27 +24,6 @@ static inline int cl_usb_hub_init(int gpio, const char *label)
static inline void cl_usb_hub_deinit(int gpio) {}
#endif /* CONFIG_CMD_USB */
-enum splash_storage {
- SPLASH_STORAGE_NAND,
- SPLASH_STORAGE_SF,
-};
-
-struct splash_location {
- char *name;
- enum splash_storage storage;
- u32 offset; /* offset from start of storage */
-};
-
-#ifdef CONFIG_SPLASH_SCREEN
-int cl_splash_screen_prepare(struct splash_location *locations, uint size);
-#else /* !CONFIG_SPLASH_SCREEN */
-static inline int cl_splash_screen_prepare(struct splash_location *locations,
- uint size)
-{
- return -ENOSYS;
-}
-#endif /* CONFIG_SPLASH_SCREEN */
-
#ifdef CONFIG_SMC911X
int cl_omap3_smc911x_init(int id, int cs, u32 base_addr,
int (*reset)(int), int rst_gpio);
diff --git a/common/Makefile b/common/Makefile
index 94554f2939..0f1416d1e8 100644
--- a/common/Makefile
+++ b/common/Makefile
@@ -196,6 +196,7 @@ obj-$(CONFIG_CMD_KGDB) += kgdb.o kgdb_stubs.o
obj-$(CONFIG_I2C_EDID) += edid.o
obj-$(CONFIG_KALLSYMS) += kallsyms.o
obj-y += splash.o
+obj-$(CONFIG_SPLASH_SOURCE) += splash_source.o
obj-$(CONFIG_LCD) += lcd.o lcd_console.o
obj-$(CONFIG_LYNXKDI) += lynxkdi.o
obj-$(CONFIG_MENU) += menu.o
diff --git a/board/compulab/common/splash.c b/common/splash_source.c
index 16c315ca5a..d1bb5a4baf 100644
--- a/board/compulab/common/splash.c
+++ b/common/splash_source.c
@@ -9,10 +9,10 @@
#include <common.h>
#include <nand.h>
#include <errno.h>
+#include <splash.h>
#include <spi_flash.h>
#include <spi.h>
#include <bmp_layout.h>
-#include "common.h"
DECLARE_GLOBAL_DATA_PTR;
@@ -98,8 +98,7 @@ static int splash_load_raw(struct splash_location *location, u32 bmp_load_addr)
return splash_storage_read(location, bmp_load_addr, bmp_size);
splash_address_too_high:
- printf("Error: splashimage address too high. Data overwrites U-Boot "
- "and/or placed beyond DRAM boundaries.\n");
+ printf("Error: splashimage address too high. Data overwrites U-Boot and/or placed beyond DRAM boundaries.\n");
return -EFAULT;
}
@@ -141,7 +140,19 @@ static struct splash_location *select_splash_location(
return NULL;
}
-int cl_splash_screen_prepare(struct splash_location *locations, uint size)
+/**
+ * splash_source_load - load splash image from a supported location.
+ *
+ * Select a splash image location based on the value of splashsource environment
+ * variable and the board supported splash source locations, and load a
+ * splashimage to the address pointed to by splashimage environment variable.
+ *
+ * @locations: An array of supported splash locations.
+ * @size: Size of splash_locations array.
+ *
+ * @return: 0 on success, negative value on failure.
+ */
+int splash_source_load(struct splash_location *locations, uint size)
{
struct splash_location *splash_location;
char *env_splashimage_value;
diff --git a/doc/README.splashprepare b/doc/README.splashprepare
index 61b4ec53ec..a0f0f3ca51 100644
--- a/doc/README.splashprepare
+++ b/doc/README.splashprepare
@@ -6,3 +6,16 @@ common/splash.c. It is called as part of the splash screen display
sequence. It gives the board an opportunity to prepare the splash
image data before it is processed and sent to the frame buffer by
U-Boot. Define your own version to use this feature.
+
+CONFIG_SPLASH_SOURCE
+
+Use the splash_source.c library. This library provides facilities to declare
+board specific splash image locations, routines for loading splash image from
+supported locations, and a way of controlling the selected splash location
+using the "splashsource" environment variable.
+
+splashsource works as follows:
+- If splashsource is set to a supported location name as defined by board code,
+ use that splash location.
+- If splashsource is undefined, use the first splash location as default.
+- If splashsource is set to an unsupported value, do not load a splash screen.
diff --git a/include/configs/cm_fx6.h b/include/configs/cm_fx6.h
index b92ba976e9..1f64495055 100644
--- a/include/configs/cm_fx6.h
+++ b/include/configs/cm_fx6.h
@@ -313,6 +313,7 @@
#define CONFIG_VIDEO_SW_CURSOR
#define CONFIG_SPLASH_SCREEN
+#define CONFIG_SPLASH_SOURCE
#define CONFIG_CMD_BMP
#define CONFIG_VIDEO_BMP_RLE8
diff --git a/include/configs/cm_t35.h b/include/configs/cm_t35.h
index 9767512a5c..b2a9f35797 100644
--- a/include/configs/cm_t35.h
+++ b/include/configs/cm_t35.h
@@ -310,6 +310,7 @@
#define CONFIG_LCD
#define CONFIG_SPLASH_SCREEN
+#define CONFIG_SPLASH_SOURCE
#define CONFIG_CMD_BMP
#define CONFIG_BMP_16BPP
#define CONFIG_SCF0403_LCD
diff --git a/include/splash.h b/include/splash.h
index 89ee7b22ec..a60e895423 100644
--- a/include/splash.h
+++ b/include/splash.h
@@ -22,7 +22,18 @@
#ifndef _SPLASH_H_
#define _SPLASH_H_
+enum splash_storage {
+ SPLASH_STORAGE_NAND,
+ SPLASH_STORAGE_SF,
+};
+struct splash_location {
+ char *name;
+ enum splash_storage storage;
+ u32 offset; /* offset from start of storage */
+};
+
+int splash_source_load(struct splash_location *locations, uint size);
int splash_screen_prepare(void);
#ifdef CONFIG_SPLASH_SCREEN_ALIGN
OpenPOWER on IntegriCloud