common: convert compulab splash load code to common code

Move board/compulab/common/splash.c code to
common/splash_source.c to make it available for everybody. This move
renames cl_splash_screen_prepare() to splash_source_load(), and
the compilation of this code is conditional on CONFIG_SPLASH_SOURCE.

splash_source features:
* Provide a standardized way for declaring board specific splash screen
  locations
* Provide existing routines for auto loading the splash image from the
  locations as declared by the board
* Introduce the "splashsource" environment variable, which makes it
  possible to select the splash image source.

cm-t35 and cm-fx6 are updated to use the modified version.

Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il>
Cc: Stefano Babic <sbabic@denx.de>
Cc: Tom Rini <trini@ti.com>
Cc: Igor Grinberg <grinberg@compulab.co.il>
Cc: Anatolij Gustschin <agust@denx.de>
Reviewed-by: Tom Rini <trini@ti.com>
Acked-by: Igor Grinberg <grinberg@compulab.co.il>
This commit is contained in:
Nikita Kiryanov 2015-01-14 10:42:54 +02:00 committed by Stefano Babic
parent 3a236a3563
commit f82eb2fa5d
10 changed files with 48 additions and 30 deletions

View File

@ -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

View File

@ -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));
}
/*

View File

@ -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

View File

@ -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);

View File

@ -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

View File

@ -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;

View File

@ -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.

View File

@ -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

View File

@ -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

View File

@ -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