Skip to content
Snippets Groups Projects
Commit 7bf71d1f authored by Nikita Kiryanov's avatar Nikita Kiryanov Committed by Anatolij Gustschin
Browse files

lcd: split splash code into its own function


lcd_logo() currently performs tasks well beyond just displaying the logo.
It has code which displays splash image, it has logic which determines
when the different display features are displayed, and it is coupled with
the lcd console because it holds the responsibility of returning the
lcd console base address.

Make lcd_logo() just about the logo by:
* Moving splash image display code into a dedicated function
* Moving the logic regarding when various features are displayed to
  lcd_clear() (which is arguably not the correct name for housing such
  code either, but it is currently the most fitting location code wise)
* Move the responsibility of setting the console base address to
  lcd_clear() too.

Signed-off-by: default avatarNikita Kiryanov <nikita@compulab.co.il>
Reviewed-by: default avatarSimon Glass <sjg@chromium.org>
Tested-by: default avatarBo Shen <voice.shen@atmel.com>
Tested-by: default avatarJosh Wu <josh.wu@atmel.com>
Cc: Bo Shen <voice.shen@atmel.com>
Cc: Simon Glass <sjg@chromium.org>
Cc: Anatolij Gustschin <agust@denx.de>
parent 033167c4
No related branches found
No related tags found
No related merge requests found
...@@ -46,7 +46,7 @@ ...@@ -46,7 +46,7 @@
DECLARE_GLOBAL_DATA_PTR; DECLARE_GLOBAL_DATA_PTR;
static int lcd_init(void *lcdbase); static int lcd_init(void *lcdbase);
static void *lcd_logo(void); static void lcd_logo(void);
static void lcd_setfgcolor(int color); static void lcd_setfgcolor(int color);
static void lcd_setbgcolor(int color); static void lcd_setbgcolor(int color);
...@@ -169,6 +169,9 @@ void lcd_clear(void) ...@@ -169,6 +169,9 @@ void lcd_clear(void)
{ {
short console_rows, console_cols; short console_rows, console_cols;
int bg_color; int bg_color;
char *s;
ulong addr;
static int do_splash = 1;
#if LCD_BPP == LCD_COLOR8 #if LCD_BPP == LCD_COLOR8
/* Setting the palette */ /* Setting the palette */
lcd_setcolreg(CONSOLE_COLOR_BLACK, 0, 0, 0); lcd_setcolreg(CONSOLE_COLOR_BLACK, 0, 0, 0);
...@@ -218,7 +221,23 @@ void lcd_clear(void) ...@@ -218,7 +221,23 @@ void lcd_clear(void)
#endif #endif
console_cols = panel_info.vl_col / VIDEO_FONT_WIDTH; console_cols = panel_info.vl_col / VIDEO_FONT_WIDTH;
lcd_init_console(lcd_base, console_rows, console_cols); lcd_init_console(lcd_base, console_rows, console_cols);
lcd_init_console(lcd_logo(), console_rows, console_cols); if (do_splash) {
s = getenv("splashimage");
if (s) {
do_splash = 0;
addr = simple_strtoul(s, NULL, 16);
if (lcd_splash(addr) == 0) {
lcd_sync();
return;
}
}
}
lcd_logo();
#if defined(CONFIG_LCD_LOGO) && !defined(CONFIG_LCD_INFO_BELOW_LOGO)
addr = (ulong)lcd_base + BMP_LOGO_HEIGHT * lcd_line_length;
lcd_init_console((void *)addr, console_rows, console_cols);
#endif
lcd_sync(); lcd_sync();
} }
...@@ -701,29 +720,8 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y) ...@@ -701,29 +720,8 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
} }
#endif #endif
static void *lcd_logo(void) static void lcd_logo(void)
{ {
#ifdef CONFIG_SPLASH_SCREEN
char *s;
ulong addr;
static int do_splash = 1;
if (do_splash && (s = getenv("splashimage")) != NULL) {
int x = 0, y = 0;
do_splash = 0;
if (splash_screen_prepare())
return (void *)lcd_base;
addr = simple_strtoul (s, NULL, 16);
splash_get_pos(&x, &y);
if (bmp_display(addr, x, y) == 0)
return (void *)lcd_base;
}
#endif /* CONFIG_SPLASH_SCREEN */
lcd_logo_plot(0, 0); lcd_logo_plot(0, 0);
#ifdef CONFIG_LCD_INFO #ifdef CONFIG_LCD_INFO
...@@ -731,12 +729,6 @@ static void *lcd_logo(void) ...@@ -731,12 +729,6 @@ static void *lcd_logo(void)
lcd_set_row(LCD_INFO_Y / VIDEO_FONT_HEIGHT); lcd_set_row(LCD_INFO_Y / VIDEO_FONT_HEIGHT);
lcd_show_board_info(); lcd_show_board_info();
#endif /* CONFIG_LCD_INFO */ #endif /* CONFIG_LCD_INFO */
#if defined(CONFIG_LCD_LOGO) && !defined(CONFIG_LCD_INFO_BELOW_LOGO)
return (void *)((ulong)lcd_base + BMP_LOGO_HEIGHT * lcd_line_length);
#else
return (void *)lcd_base;
#endif /* CONFIG_LCD_LOGO && !defined(CONFIG_LCD_INFO_BELOW_LOGO) */
} }
#ifdef CONFIG_SPLASHIMAGE_GUARD #ifdef CONFIG_SPLASHIMAGE_GUARD
......
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
#include <common.h> #include <common.h>
#include <splash.h> #include <splash.h>
#include <lcd.h>
__weak int splash_screen_prepare(void) __weak int splash_screen_prepare(void)
{ {
...@@ -50,3 +51,18 @@ void splash_get_pos(int *x, int *y) ...@@ -50,3 +51,18 @@ void splash_get_pos(int *x, int *y)
} }
} }
#endif /* CONFIG_SPLASH_SCREEN_ALIGN */ #endif /* CONFIG_SPLASH_SCREEN_ALIGN */
#if defined(CONFIG_SPLASH_SCREEN) && defined(CONFIG_LCD)
int lcd_splash(ulong addr)
{
int x = 0, y = 0, ret;
ret = splash_screen_prepare();
if (ret)
return ret;
splash_get_pos(&x, &y);
return bmp_display(addr, x, y);
}
#endif
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
#ifndef _SPLASH_H_ #ifndef _SPLASH_H_
#define _SPLASH_H_ #define _SPLASH_H_
#include <errno.h>
int splash_screen_prepare(void); int splash_screen_prepare(void);
...@@ -31,6 +31,15 @@ void splash_get_pos(int *x, int *y); ...@@ -31,6 +31,15 @@ void splash_get_pos(int *x, int *y);
static inline void splash_get_pos(int *x, int *y) { } static inline void splash_get_pos(int *x, int *y) { }
#endif #endif
#if defined(CONFIG_SPLASH_SCREEN) && defined(CONFIG_LCD)
int lcd_splash(ulong addr);
#else
static inline int lcd_splash(ulong addr)
{
return -ENOSYS;
}
#endif
#define BMP_ALIGN_CENTER 0x7FFF #define BMP_ALIGN_CENTER 0x7FFF
#endif #endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment