diff options
Diffstat (limited to 'common')
-rw-r--r-- | common/cmd_mmc.c | 2 | ||||
-rw-r--r-- | common/cmd_sata.c | 24 | ||||
-rw-r--r-- | common/lcd.c | 39 |
3 files changed, 50 insertions, 15 deletions
diff --git a/common/cmd_mmc.c b/common/cmd_mmc.c index 32fe49b..0e3393b 100644 --- a/common/cmd_mmc.c +++ b/common/cmd_mmc.c @@ -26,7 +26,7 @@ #include <mmc.h> #ifndef CONFIG_GENERIC_MMC -int curr_device = -1; +static int curr_device = -1; int do_mmc (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) { diff --git a/common/cmd_sata.c b/common/cmd_sata.c index a8147e0..1693a7e 100644 --- a/common/cmd_sata.c +++ b/common/cmd_sata.c @@ -28,7 +28,7 @@ #include <part.h> #include <sata.h> -int curr_device = -1; +int sata_curr_device = -1; block_dev_desc_t sata_dev_desc[CONFIG_SYS_SATA_MAX_DEVICE]; int __sata_initialize(void) @@ -52,7 +52,7 @@ int __sata_initialize(void) if ((sata_dev_desc[i].lba > 0) && (sata_dev_desc[i].blksz > 0)) init_part(&sata_dev_desc[i]); } - curr_device = 0; + sata_curr_device = 0; return rc; } int sata_initialize(void) __attribute__((weak,alias("__sata_initialize"))); @@ -70,7 +70,7 @@ int do_sata(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) return sata_initialize(); /* If the user has not yet run `sata init`, do it now */ - if (curr_device == -1) + if (sata_curr_device == -1) if (sata_initialize()) return 1; @@ -91,12 +91,12 @@ int do_sata(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) } return 0; } else if (strncmp(argv[1],"dev", 3) == 0) { - if ((curr_device < 0) || (curr_device >= CONFIG_SYS_SATA_MAX_DEVICE)) { + if ((sata_curr_device < 0) || (sata_curr_device >= CONFIG_SYS_SATA_MAX_DEVICE)) { puts("\nno SATA devices available\n"); return 1; } - printf("\nSATA device %d: ", curr_device); - dev_print(&sata_dev_desc[curr_device]); + printf("\nSATA device %d: ", sata_curr_device); + dev_print(&sata_dev_desc[sata_curr_device]); return 0; } else if (strncmp(argv[1],"part",4) == 0) { int dev, ok; @@ -131,7 +131,7 @@ int do_sata(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) if (sata_dev_desc[dev].type == DEV_TYPE_UNKNOWN) return 1; - curr_device = dev; + sata_curr_device = dev; puts("... is now current device\n"); @@ -158,12 +158,12 @@ int do_sata(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) lbaint_t blk = simple_strtoul(argv[3], NULL, 16); printf("\nSATA read: device %d block # %ld, count %ld ... ", - curr_device, blk, cnt); + sata_curr_device, blk, cnt); - n = sata_read(curr_device, blk, cnt, (u32 *)addr); + n = sata_read(sata_curr_device, blk, cnt, (u32 *)addr); /* flush cache after read */ - flush_cache(addr, cnt * sata_dev_desc[curr_device].blksz); + flush_cache(addr, cnt * sata_dev_desc[sata_curr_device].blksz); printf("%ld blocks read: %s\n", n, (n==cnt) ? "OK" : "ERROR"); @@ -176,9 +176,9 @@ int do_sata(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) lbaint_t blk = simple_strtoul(argv[3], NULL, 16); printf("\nSATA write: device %d block # %ld, count %ld ... ", - curr_device, blk, cnt); + sata_curr_device, blk, cnt); - n = sata_write(curr_device, blk, cnt, (u32 *)addr); + n = sata_write(sata_curr_device, blk, cnt, (u32 *)addr); printf("%ld blocks written: %s\n", n, (n == cnt) ? "OK" : "ERROR"); diff --git a/common/lcd.c b/common/lcd.c index 74a5c77..b9a698d 100644 --- a/common/lcd.c +++ b/common/lcd.c @@ -620,6 +620,11 @@ void bitmap_plot (int x, int y) * Display the BMP file located at address bmp_image. * Only uncompressed. */ + +#ifdef CONFIG_SPLASH_SCREEN_ALIGN +#define BMP_ALIGN_CENTER 0x7FFF +#endif + int lcd_display_bitmap(ulong bmp_image, int x, int y) { #if !defined(CONFIG_MCC200) @@ -731,6 +736,19 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y) #endif padded_line = (width&0x3) ? ((width&~0x3)+4) : (width); + +#ifdef CONFIG_SPLASH_SCREEN_ALIGN + if (x == BMP_ALIGN_CENTER) + x = max(0, (pwidth - width) / 2); + else if (x < 0) + x = max(0, pwidth - width + x + 1); + + if (y == BMP_ALIGN_CENTER) + y = max(0, (panel_info.vl_row - height) / 2); + else if (y < 0) + y = max(0, panel_info.vl_row - height + y + 1); +#endif /* CONFIG_SPLASH_SCREEN_ALIGN */ + if ((x + width)>pwidth) width = pwidth - x; if ((y + height)>panel_info.vl_row) @@ -809,9 +827,26 @@ static void *lcd_logo (void) static int do_splash = 1; if (do_splash && (s = getenv("splashimage")) != NULL) { - addr = simple_strtoul(s, NULL, 16); + int x = 0, y = 0; do_splash = 0; + addr = simple_strtoul (s, NULL, 16); +#ifdef CONFIG_SPLASH_SCREEN_ALIGN + if ((s = getenv ("splashpos")) != NULL) { + if (s[0] == 'm') + x = BMP_ALIGN_CENTER; + else + x = simple_strtol (s, NULL, 0); + + if ((s = strchr (s + 1, ',')) != NULL) { + if (s[1] == 'm') + y = BMP_ALIGN_CENTER; + else + y = simple_strtol (s + 1, NULL, 0); + } + } +#endif /* CONFIG_SPLASH_SCREEN_ALIGN */ + #ifdef CONFIG_VIDEO_BMP_GZIP bmp_image_t *bmp = (bmp_image_t *)addr; unsigned long len; @@ -822,7 +857,7 @@ static void *lcd_logo (void) } #endif - if (lcd_display_bitmap (addr, 0, 0) == 0) { + if (lcd_display_bitmap (addr, x, y) == 0) { return ((void *)lcd_base); } } |