1 /* 2 * Copyright (C) 2013, Boundary Devices <info@boundarydevices.com> 3 * 4 * See file CREDITS for list of people who contributed to this 5 * project. 6 * 7 * This program is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU General Public License as 9 * published by the Free Software Foundation; either version 2 of 10 * the License, or (at your option) any later version. 11 * 12 * This program is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this program; if not, write to the Free Software 19 * Foundation, Inc., http://www.fsf.org/about/contact/ 20 * 21 */ 22 23 #include <common.h> 24 #include <splash.h> 25 #include <lcd.h> 26 27 static struct splash_location default_splash_locations[] = { 28 { 29 .name = "sf", 30 .storage = SPLASH_STORAGE_SF, 31 .flags = SPLASH_STORAGE_RAW, 32 .offset = 0x0, 33 }, 34 { 35 .name = "mmc_fs", 36 .storage = SPLASH_STORAGE_MMC, 37 .flags = SPLASH_STORAGE_FS, 38 .devpart = "0:1", 39 }, 40 { 41 .name = "usb_fs", 42 .storage = SPLASH_STORAGE_USB, 43 .flags = SPLASH_STORAGE_FS, 44 .devpart = "0:1", 45 }, 46 { 47 .name = "sata_fs", 48 .storage = SPLASH_STORAGE_SATA, 49 .flags = SPLASH_STORAGE_FS, 50 .devpart = "0:1", 51 }, 52 }; 53 54 __weak int splash_screen_prepare(void) 55 { 56 return splash_source_load(default_splash_locations, 57 ARRAY_SIZE(default_splash_locations)); 58 } 59 60 #ifdef CONFIG_SPLASH_SCREEN_ALIGN 61 void splash_get_pos(int *x, int *y) 62 { 63 char *s = getenv("splashpos"); 64 65 if (!s) 66 return; 67 68 if (s[0] == 'm') 69 *x = BMP_ALIGN_CENTER; 70 else 71 *x = simple_strtol(s, NULL, 0); 72 73 s = strchr(s + 1, ','); 74 if (s != NULL) { 75 if (s[1] == 'm') 76 *y = BMP_ALIGN_CENTER; 77 else 78 *y = simple_strtol(s + 1, NULL, 0); 79 } 80 } 81 #endif /* CONFIG_SPLASH_SCREEN_ALIGN */ 82 83 #if defined(CONFIG_SPLASH_SCREEN) && defined(CONFIG_LCD) 84 int lcd_splash(ulong addr) 85 { 86 int x = 0, y = 0, ret; 87 88 ret = splash_screen_prepare(); 89 if (ret) 90 return ret; 91 92 splash_get_pos(&x, &y); 93 94 return bmp_display(addr, x, y); 95 } 96 #endif 97