From mboxrd@z Thu Jan 1 00:00:00 1970 From: Nikita Kiryanov Date: Sun, 01 Feb 2015 15:59:41 +0200 Subject: [U-Boot] [PATCH 13/13] lcd: split splash code into its own function In-Reply-To: References: <1422530505-19054-1-git-send-email-nikita@compulab.co.il> <1422530505-19054-14-git-send-email-nikita@compulab.co.il> Message-ID: <54CE314D.2010001@compulab.co.il> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hi Simon, On 01/31/2015 02:25 AM, Simon Glass wrote: > Hi Nikita, > > On 29 January 2015 at 04:21, Nikita Kiryanov wrote: >> 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: Nikita Kiryanov >> Cc: Bo Shen >> Cc: Simon Glass >> Cc: Anatolij Gustschin >> --- >> common/lcd.c | 52 ++++++++++++++++++++++------------------------------ >> common/splash.c | 16 ++++++++++++++++ >> include/splash.h | 11 ++++++++++- >> 3 files changed, 48 insertions(+), 31 deletions(-) >> >> diff --git a/common/lcd.c b/common/lcd.c >> index d0c0aff..f33942c 100644 >> --- a/common/lcd.c >> +++ b/common/lcd.c >> @@ -46,7 +46,7 @@ >> DECLARE_GLOBAL_DATA_PTR; >> >> 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_setbgcolor(int color); >> >> @@ -169,6 +169,9 @@ void lcd_clear(void) >> { >> short console_rows, console_cols; >> int bg_color; >> + char *s; >> + ulong addr; >> + static int do_splash = 1; >> #if LCD_BPP == LCD_COLOR8 >> /* Setting the palette */ >> lcd_setcolreg(CONSOLE_COLOR_BLACK, 0, 0, 0); >> @@ -218,7 +221,23 @@ void lcd_clear(void) >> #endif >> console_cols = panel_info.vl_col / VIDEO_FONT_WIDTH; >> 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); > > I'm just a bit unsure about this - before this function was always > called. I have some idea but can you explain why it is now in an > #ifidef? The only time when the base address of the console is defined as anything other than lcd_base, is when we get to the very end of the original lcd_logo() and the above #defines apply. In all other cases, the address of lcd_base is used, and that is set as default at the start of lcd_clear(). -- Regards, Nikita Kiryanov