diff options
author | Nikita Kiryanov <nikita@compulab.co.il> | 2015-10-29 11:54:42 +0200 |
---|---|---|
committer | Stefano Babic <sbabic@denx.de> | 2015-11-16 12:01:35 +0100 |
commit | 9bb4e9474281806986bc1c07f5f4b0ecc33d1bae (patch) | |
tree | 3dc5f17d93244acda43237519f81f5c23f334116 /common/splash_source.c | |
parent | 870dd3095facaada8b671d55affc2d060355725f (diff) | |
download | u-boot-9bb4e9474281806986bc1c07f5f4b0ecc33d1bae.tar.gz |
splash_source: add support for filesystem formatted usb
Add support for loading splash image from USB drive formatted with a
filesystem.
Cc: Igor Grinberg <grinberg@compulab.co.il>
Cc: Tom Rini <trini@konsulko.com>
Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il>
Diffstat (limited to 'common/splash_source.c')
-rw-r--r-- | common/splash_source.c | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/common/splash_source.c b/common/splash_source.c index 7de8695375..cf475699f0 100644 --- a/common/splash_source.c +++ b/common/splash_source.c @@ -12,6 +12,7 @@ #include <splash.h> #include <spi_flash.h> #include <spi.h> +#include <usb.h> #include <bmp_layout.h> #include <fs.h> @@ -112,6 +113,9 @@ static int splash_select_fs_dev(struct splash_location *location) case SPLASH_STORAGE_MMC: res = fs_set_blk_dev("mmc", location->devpart, FS_TYPE_ANY); break; + case SPLASH_STORAGE_USB: + res = fs_set_blk_dev("usb", location->devpart, FS_TYPE_ANY); + break; default: printf("Error: unsupported location storage.\n"); return -ENODEV; @@ -123,11 +127,30 @@ static int splash_select_fs_dev(struct splash_location *location) return res; } +#ifdef CONFIG_USB_STORAGE +static int splash_init_usb(void) +{ + int err; + + err = usb_init(); + if (err) + return err; + + return usb_stor_scan(1) < 0 ? -ENODEV : 0; +} +#else +static inline int splash_init_usb(void) +{ + printf("Cannot load splash image: no USB support\n"); + return -ENOSYS; +} +#endif + #define SPLASH_SOURCE_DEFAULT_FILE_NAME "splash.bmp" static int splash_load_fs(struct splash_location *location, u32 bmp_load_addr) { - int res; + int res = 0; loff_t bmp_size; char *splash_file; @@ -135,6 +158,12 @@ static int splash_load_fs(struct splash_location *location, u32 bmp_load_addr) if (!splash_file) splash_file = SPLASH_SOURCE_DEFAULT_FILE_NAME; + if (location->storage == SPLASH_STORAGE_USB) + res = splash_init_usb(); + + if (res) + return res; + res = splash_select_fs_dev(location); if (res) return res; |