All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH 00/13] common lcd refactor
@ 2015-01-29 11:21 Nikita Kiryanov
  2015-01-29 11:21 ` [U-Boot] [PATCH 01/13] lcd: move platform specific structs to their own headers Nikita Kiryanov
                   ` (12 more replies)
  0 siblings, 13 replies; 34+ messages in thread
From: Nikita Kiryanov @ 2015-01-29 11:21 UTC (permalink / raw)
  To: u-boot

This series is part of my ongoing efforts to cleanup common/lcd code (and at
some point merge it with the CONFIG_VIDEO code).
This series focuses on eliminating platform specific #defines from lcd.c code,
and then adds a few platform independent code refactors and cleanups on top of
that. A few notes on the series:

- The patch "lcd: split splash code into its own function" depends on Bo Shen's
patch "lcd: fix console address is not initialized"
(https://patchwork.ozlabs.org/patch/433746/).

- The patch "lcd: split configuration_get_cmap" turned out to be a little
problematic: the goal was to move all platform specific code to the appropriate
lcd/fb drivers, and keep the generic case in lcd.c as a weak function.
This was not possible to do for configuration_get_cmap(), because the weak
version still has to compile even if it is overridden, and unfortunately the
generic case references panel_info, which is a struct that varies depending on
the configuration, and does not always have a cmap field. This demonstrated that
the visibility of panel_info should be reviewed, and that there might be a need
for some kind of lcd_generic driver.
Since this may warrant a series of its own, I opted to tentatively implement
the generic configuration_get_cmap() function in lcd.h as static inline, and
plan to revisit it in the next series.

The end result was compile tested on arm and powerpc, and tested on cm_t35
(splash screen feature).

Cc: Bo Shen <voice.shen@atmel.com>
Cc: Simon Glass <sjg@chromium.org>
Cc: Anatolij Gustschin <agust@denx.de>

Nikita Kiryanov (13):
  lcd: move platform specific structs to their own headers
  lcd: split configuration_get_cmap
  lcd: atmel: move atmel specific fb_put_word to atmel_lcdfb
  lcd: mpc8xx: move mpc823 specific fb_put_byte to mpc8xx_lcd.c
  lcd: atmel: introduce lcd_logo_set_cmap
  lcd: mpc823: move mpc823 specific lcd_logo_set_cmap code to
    mpc8xx_lcd.c
  lcd: logo: move generic cmap setting to lcd_logo_set_cmap()
  lcd: introduce lcd_set_cmap
  lcd: remove unused includes
  lcd: various cleanups
  lcd: rename bitmap_plot to better represent its functionality
  lcd: dt: extract simplefb support
  lcd: split splash code into its own function

 board/raspberrypi/rpi/rpi.c  |   1 +
 common/Makefile              |   1 +
 common/lcd.c                 | 358 ++++++++++---------------------------------
 common/lcd_simplefb.c        |  59 +++++++
 common/splash.c              |  16 ++
 drivers/video/atmel_hlcdfb.c |  13 ++
 drivers/video/atmel_lcdfb.c  |  51 ++++++
 drivers/video/exynos_fb.c    |   9 ++
 drivers/video/mpc8xx_lcd.c   |  29 ++++
 drivers/video/pxa_lcd.c      |   6 +
 include/atmel_lcd.h          |  38 +++++
 include/exynos_lcd.h         |  81 ++++++++++
 include/fdt_simplefb.h       |  14 ++
 include/lcd.h                | 313 ++++++-------------------------------
 include/mpc823_lcd.h         |  43 ++++++
 include/pxa_lcd.h            |  80 ++++++++++
 include/splash.h             |  11 +-
 17 files changed, 576 insertions(+), 547 deletions(-)
 create mode 100644 common/lcd_simplefb.c
 create mode 100644 include/atmel_lcd.h
 create mode 100644 include/exynos_lcd.h
 create mode 100644 include/fdt_simplefb.h
 create mode 100644 include/mpc823_lcd.h
 create mode 100644 include/pxa_lcd.h

-- 
1.9.1

^ permalink raw reply	[flat|nested] 34+ messages in thread

* [U-Boot] [PATCH 01/13] lcd: move platform specific structs to their own headers
  2015-01-29 11:21 [U-Boot] [PATCH 00/13] common lcd refactor Nikita Kiryanov
@ 2015-01-29 11:21 ` Nikita Kiryanov
  2015-01-31  0:24   ` Simon Glass
  2015-01-29 11:21 ` [U-Boot] [PATCH 02/13] lcd: split configuration_get_cmap Nikita Kiryanov
                   ` (11 subsequent siblings)
  12 siblings, 1 reply; 34+ messages in thread
From: Nikita Kiryanov @ 2015-01-29 11:21 UTC (permalink / raw)
  To: u-boot

common/lcd code is full of platform specific code and definitions, which
ideally should reside with the respective driver code. Take a step towards that
goal by moving platform specific structs from lcd.h to their own header files.

The structs for the generic case (the #else for all the platform specific
cases) is retained in lcd.h as the default case.

Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il>
Cc: Bo Shen <voice.shen@atmel.com>
Cc: Simon Glass <sjg@chromium.org>
Cc: Anatolij Gustschin <agust@denx.de>
---
 include/atmel_lcd.h  |  38 ++++++++++
 include/exynos_lcd.h |  81 +++++++++++++++++++++
 include/lcd.h        | 201 ++-------------------------------------------------
 include/mpc823_lcd.h |  43 +++++++++++
 include/pxa_lcd.h    |  80 ++++++++++++++++++++
 5 files changed, 247 insertions(+), 196 deletions(-)
 create mode 100644 include/atmel_lcd.h
 create mode 100644 include/exynos_lcd.h
 create mode 100644 include/mpc823_lcd.h
 create mode 100644 include/pxa_lcd.h

diff --git a/include/atmel_lcd.h b/include/atmel_lcd.h
new file mode 100644
index 0000000..fa8aa29
--- /dev/null
+++ b/include/atmel_lcd.h
@@ -0,0 +1,38 @@
+/*
+ * atmel_lcd.h - Atmel LCD Controller structures
+ *
+ * (C) Copyright 2001
+ * Wolfgang Denk, DENX Software Engineering, wd at denx.de.
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#ifndef _ATMEL_LCD_H_
+#define _ATMEL_LCD_H_
+
+typedef struct vidinfo {
+	ushort vl_col;		/* Number of columns (i.e. 640) */
+	ushort vl_row;		/* Number of rows (i.e. 480) */
+	u_long vl_clk;	/* pixel clock in ps    */
+
+	/* LCD configuration register */
+	u_long vl_sync;		/* Horizontal / vertical sync */
+	u_long vl_bpix;	/* Bits per pixel, 0 = 1, 1 = 2, 2 = 4, 3 = 8, 4 = 16 */
+	u_long vl_tft;		/* 0 = passive, 1 = TFT */
+	u_long vl_cont_pol_low;	/* contrast polarity is low */
+	u_long vl_clk_pol;	/* clock polarity */
+
+	/* Horizontal control register. */
+	u_long vl_hsync_len;	/* Length of horizontal sync */
+	u_long vl_left_margin;	/* Time from sync to picture */
+	u_long vl_right_margin;	/* Time from picture to sync */
+
+	/* Vertical control register. */
+	u_long vl_vsync_len;	/* Length of vertical sync */
+	u_long vl_upper_margin;	/* Time from sync to picture */
+	u_long vl_lower_margin;	/* Time from picture to sync */
+
+	u_long	mmio;		/* Memory mapped registers */
+} vidinfo_t;
+
+#endif
diff --git a/include/exynos_lcd.h b/include/exynos_lcd.h
new file mode 100644
index 0000000..cf389da
--- /dev/null
+++ b/include/exynos_lcd.h
@@ -0,0 +1,81 @@
+/*
+ * exynos_lcd.h - Exynos LCD Controller structures
+ *
+ * (C) Copyright 2001
+ * Wolfgang Denk, DENX Software Engineering, wd at denx.de.
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#ifndef _EXYNOS_LCD_H_
+#define _EXYNOS_LCD_H_
+
+enum {
+	FIMD_RGB_INTERFACE = 1,
+	FIMD_CPU_INTERFACE = 2,
+};
+
+enum exynos_fb_rgb_mode_t {
+	MODE_RGB_P = 0,
+	MODE_BGR_P = 1,
+	MODE_RGB_S = 2,
+	MODE_BGR_S = 3,
+};
+
+typedef struct vidinfo {
+	ushort vl_col;		/* Number of columns (i.e. 640) */
+	ushort vl_row;		/* Number of rows (i.e. 480) */
+	ushort vl_width;	/* Width of display area in millimeters */
+	ushort vl_height;	/* Height of display area in millimeters */
+
+	/* LCD configuration register */
+	u_char vl_freq;		/* Frequency */
+	u_char vl_clkp;		/* Clock polarity */
+	u_char vl_oep;		/* Output Enable polarity */
+	u_char vl_hsp;		/* Horizontal Sync polarity */
+	u_char vl_vsp;		/* Vertical Sync polarity */
+	u_char vl_dp;		/* Data polarity */
+	u_char vl_bpix;		/* Bits per pixel */
+
+	/* Horizontal control register. Timing from data sheet */
+	u_char vl_hspw;		/* Horz sync pulse width */
+	u_char vl_hfpd;		/* Wait before of line */
+	u_char vl_hbpd;		/* Wait end of line */
+
+	/* Vertical control register. */
+	u_char	vl_vspw;	/* Vertical sync pulse width */
+	u_char	vl_vfpd;	/* Wait before of frame */
+	u_char	vl_vbpd;	/* Wait end of frame */
+	u_char  vl_cmd_allow_len; /* Wait end of frame */
+
+	unsigned int win_id;
+	unsigned int init_delay;
+	unsigned int power_on_delay;
+	unsigned int reset_delay;
+	unsigned int interface_mode;
+	unsigned int mipi_enabled;
+	unsigned int dp_enabled;
+	unsigned int cs_setup;
+	unsigned int wr_setup;
+	unsigned int wr_act;
+	unsigned int wr_hold;
+	unsigned int logo_on;
+	unsigned int logo_width;
+	unsigned int logo_height;
+	int logo_x_offset;
+	int logo_y_offset;
+	unsigned long logo_addr;
+	unsigned int rgb_mode;
+	unsigned int resolution;
+
+	/* parent clock name(MPLL, EPLL or VPLL) */
+	unsigned int pclk_name;
+	/* ratio value for source clock from parent clock. */
+	unsigned int sclk_div;
+
+	unsigned int dual_lcd_enabled;
+} vidinfo_t;
+
+void init_panel_info(vidinfo_t *vid);
+
+#endif
diff --git a/include/lcd.h b/include/lcd.h
index 160f940..fbba6a2 100644
--- a/include/lcd.h
+++ b/include/lcd.h
@@ -41,205 +41,15 @@ int bmp_display(ulong addr, int x, int y);
 void lcd_set_flush_dcache(int flush);
 
 #if defined CONFIG_MPC823
-/*
- * LCD controller stucture for MPC823 CPU
- */
-typedef struct vidinfo {
-	ushort	vl_col;		/* Number of columns (i.e. 640) */
-	ushort	vl_row;		/* Number of rows (i.e. 480) */
-	ushort	vl_width;	/* Width of display area in millimeters */
-	ushort	vl_height;	/* Height of display area in millimeters */
-
-	/* LCD configuration register */
-	u_char	vl_clkp;	/* Clock polarity */
-	u_char	vl_oep;		/* Output Enable polarity */
-	u_char	vl_hsp;		/* Horizontal Sync polarity */
-	u_char	vl_vsp;		/* Vertical Sync polarity */
-	u_char	vl_dp;		/* Data polarity */
-	u_char	vl_bpix;	/* Bits per pixel, 0 = 1, 1 = 2, 2 = 4, 3 = 8 */
-	u_char	vl_lbw;		/* LCD Bus width, 0 = 4, 1 = 8 */
-	u_char	vl_splt;	/* Split display, 0 = single-scan, 1 = dual-scan */
-	u_char	vl_clor;	/* Color, 0 = mono, 1 = color */
-	u_char	vl_tft;		/* 0 = passive, 1 = TFT */
-
-	/* Horizontal control register. Timing from data sheet */
-	ushort	vl_wbl;		/* Wait between lines */
-
-	/* Vertical control register */
-	u_char	vl_vpw;		/* Vertical sync pulse width */
-	u_char	vl_lcdac;	/* LCD AC timing */
-	u_char	vl_wbf;		/* Wait between frames */
-} vidinfo_t;
-
+#include <mpc823_lcd.h>
 #elif defined(CONFIG_CPU_PXA25X) || defined(CONFIG_CPU_PXA27X) || \
 	defined CONFIG_CPU_MONAHANS
-/*
- * PXA LCD DMA descriptor
- */
-struct pxafb_dma_descriptor {
-	u_long	fdadr;		/* Frame descriptor address register */
-	u_long	fsadr;		/* Frame source address register */
-	u_long	fidr;		/* Frame ID register */
-	u_long	ldcmd;		/* Command register */
-};
-
-/*
- * PXA LCD info
- */
-struct pxafb_info {
-
-	/* Misc registers */
-	u_long	reg_lccr3;
-	u_long	reg_lccr2;
-	u_long	reg_lccr1;
-	u_long	reg_lccr0;
-	u_long	fdadr0;
-	u_long	fdadr1;
-
-	/* DMA descriptors */
-	struct	pxafb_dma_descriptor *	dmadesc_fblow;
-	struct	pxafb_dma_descriptor *	dmadesc_fbhigh;
-	struct	pxafb_dma_descriptor *	dmadesc_palette;
-
-	u_long	screen;		/* physical address of frame buffer */
-	u_long	palette;	/* physical address of palette memory */
-	u_int	palette_size;
-};
-
-/*
- * LCD controller stucture for PXA CPU
- */
-typedef struct vidinfo {
-	ushort	vl_col;		/* Number of columns (i.e. 640) */
-	ushort	vl_row;		/* Number of rows (i.e. 480) */
-	ushort	vl_width;	/* Width of display area in millimeters */
-	ushort	vl_height;	/* Height of display area in millimeters */
-
-	/* LCD configuration register */
-	u_char	vl_clkp;	/* Clock polarity */
-	u_char	vl_oep;		/* Output Enable polarity */
-	u_char	vl_hsp;		/* Horizontal Sync polarity */
-	u_char	vl_vsp;		/* Vertical Sync polarity */
-	u_char	vl_dp;		/* Data polarity */
-	u_char	vl_bpix;	/* Bits per pixel, 0 = 1, 1 = 2, 2 = 4, 3 = 8, 4 = 16 */
-	u_char	vl_lbw;		/* LCD Bus width, 0 = 4, 1 = 8 */
-	u_char	vl_splt;	/* Split display, 0 = single-scan, 1 = dual-scan */
-	u_char	vl_clor;	/* Color, 0 = mono, 1 = color */
-	u_char	vl_tft;		/* 0 = passive, 1 = TFT */
-
-	/* Horizontal control register. Timing from data sheet */
-	ushort	vl_hpw;		/* Horz sync pulse width */
-	u_char	vl_blw;		/* Wait before of line */
-	u_char	vl_elw;		/* Wait end of line */
-
-	/* Vertical control register. */
-	u_char	vl_vpw;		/* Vertical sync pulse width */
-	u_char	vl_bfw;		/* Wait before of frame */
-	u_char	vl_efw;		/* Wait end of frame */
-
-	/* PXA LCD controller params */
-	struct	pxafb_info pxa;
-} vidinfo_t;
-
+#include <pxa_lcd.h>
 #elif defined(CONFIG_ATMEL_LCD) || defined(CONFIG_ATMEL_HLCD)
-
-typedef struct vidinfo {
-	ushort vl_col;		/* Number of columns (i.e. 640) */
-	ushort vl_row;		/* Number of rows (i.e. 480) */
-	u_long vl_clk;	/* pixel clock in ps    */
-
-	/* LCD configuration register */
-	u_long vl_sync;		/* Horizontal / vertical sync */
-	u_long vl_bpix;		/* Bits per pixel, 0 = 1, 1 = 2, 2 = 4, 3 = 8, 4 = 16 */
-	u_long vl_tft;		/* 0 = passive, 1 = TFT */
-	u_long vl_cont_pol_low;	/* contrast polarity is low */
-	u_long vl_clk_pol;	/* clock polarity */
-
-	/* Horizontal control register. */
-	u_long vl_hsync_len;	/* Length of horizontal sync */
-	u_long vl_left_margin;	/* Time from sync to picture */
-	u_long vl_right_margin;	/* Time from picture to sync */
-
-	/* Vertical control register. */
-	u_long vl_vsync_len;	/* Length of vertical sync */
-	u_long vl_upper_margin;	/* Time from sync to picture */
-	u_long vl_lower_margin;	/* Time from picture to sync */
-
-	u_long	mmio;		/* Memory mapped registers */
-} vidinfo_t;
-
+#include <atmel_lcd.h>
 #elif defined(CONFIG_EXYNOS_FB)
-
-enum {
-	FIMD_RGB_INTERFACE = 1,
-	FIMD_CPU_INTERFACE = 2,
-};
-
-enum exynos_fb_rgb_mode_t {
-	MODE_RGB_P = 0,
-	MODE_BGR_P = 1,
-	MODE_RGB_S = 2,
-	MODE_BGR_S = 3,
-};
-
-typedef struct vidinfo {
-	ushort vl_col;		/* Number of columns (i.e. 640) */
-	ushort vl_row;		/* Number of rows (i.e. 480) */
-	ushort vl_width;	/* Width of display area in millimeters */
-	ushort vl_height;	/* Height of display area in millimeters */
-
-	/* LCD configuration register */
-	u_char vl_freq;		/* Frequency */
-	u_char vl_clkp;		/* Clock polarity */
-	u_char vl_oep;		/* Output Enable polarity */
-	u_char vl_hsp;		/* Horizontal Sync polarity */
-	u_char vl_vsp;		/* Vertical Sync polarity */
-	u_char vl_dp;		/* Data polarity */
-	u_char vl_bpix;		/* Bits per pixel */
-
-	/* Horizontal control register. Timing from data sheet */
-	u_char vl_hspw;		/* Horz sync pulse width */
-	u_char vl_hfpd;		/* Wait before of line */
-	u_char vl_hbpd;		/* Wait end of line */
-
-	/* Vertical control register. */
-	u_char	vl_vspw;	/* Vertical sync pulse width */
-	u_char	vl_vfpd;	/* Wait before of frame */
-	u_char	vl_vbpd;	/* Wait end of frame */
-	u_char  vl_cmd_allow_len; /* Wait end of frame */
-
-	unsigned int win_id;
-	unsigned int init_delay;
-	unsigned int power_on_delay;
-	unsigned int reset_delay;
-	unsigned int interface_mode;
-	unsigned int mipi_enabled;
-	unsigned int dp_enabled;
-	unsigned int cs_setup;
-	unsigned int wr_setup;
-	unsigned int wr_act;
-	unsigned int wr_hold;
-	unsigned int logo_on;
-	unsigned int logo_width;
-	unsigned int logo_height;
-	int logo_x_offset;
-	int logo_y_offset;
-	unsigned long logo_addr;
-	unsigned int rgb_mode;
-	unsigned int resolution;
-
-	/* parent clock name(MPLL, EPLL or VPLL) */
-	unsigned int pclk_name;
-	/* ratio value for source clock from parent clock. */
-	unsigned int sclk_div;
-
-	unsigned int dual_lcd_enabled;
-} vidinfo_t;
-
-void init_panel_info(vidinfo_t *vid);
-
+#include <exynos_lcd.h>
 #else
-
 typedef struct vidinfo {
 	ushort	vl_col;		/* Number of columns (i.e. 160) */
 	ushort	vl_row;		/* Number of rows (i.e. 100) */
@@ -250,8 +60,7 @@ typedef struct vidinfo {
 
 	void	*priv;		/* Pointer to driver-specific data */
 } vidinfo_t;
-
-#endif /* CONFIG_MPC823, CONFIG_CPU_PXA25X, CONFIG_ATMEL_LCD */
+#endif
 
 extern vidinfo_t panel_info;
 
diff --git a/include/mpc823_lcd.h b/include/mpc823_lcd.h
new file mode 100644
index 0000000..7e210e3
--- /dev/null
+++ b/include/mpc823_lcd.h
@@ -0,0 +1,43 @@
+/*
+ * mpc823_lcd.h - MPC823 LCD Controller structures
+ *
+ * (C) Copyright 2001
+ * Wolfgang Denk, DENX Software Engineering, wd at denx.de.
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#ifndef _MPC823_LCD_H_
+#define _MPC823_LCD_H_
+
+/*
+ * LCD controller stucture for MPC823 CPU
+ */
+typedef struct vidinfo {
+	ushort	vl_col;		/* Number of columns (i.e. 640) */
+	ushort	vl_row;		/* Number of rows (i.e. 480) */
+	ushort	vl_width;	/* Width of display area in millimeters */
+	ushort	vl_height;	/* Height of display area in millimeters */
+
+	/* LCD configuration register */
+	u_char	vl_clkp;	/* Clock polarity */
+	u_char	vl_oep;		/* Output Enable polarity */
+	u_char	vl_hsp;		/* Horizontal Sync polarity */
+	u_char	vl_vsp;		/* Vertical Sync polarity */
+	u_char	vl_dp;		/* Data polarity */
+	u_char	vl_bpix;	/* Bits per pixel, 0 = 1, 1 = 2, 2 = 4, 3 = 8 */
+	u_char	vl_lbw;		/* LCD Bus width, 0 = 4, 1 = 8 */
+	u_char	vl_splt; /* Split display, 0 = single-scan, 1 = dual-scan */
+	u_char	vl_clor;	/* Color, 0 = mono, 1 = color */
+	u_char	vl_tft;		/* 0 = passive, 1 = TFT */
+
+	/* Horizontal control register. Timing from data sheet */
+	ushort	vl_wbl;		/* Wait between lines */
+
+	/* Vertical control register */
+	u_char	vl_vpw;		/* Vertical sync pulse width */
+	u_char	vl_lcdac;	/* LCD AC timing */
+	u_char	vl_wbf;		/* Wait between frames */
+} vidinfo_t;
+
+#endif
diff --git a/include/pxa_lcd.h b/include/pxa_lcd.h
new file mode 100644
index 0000000..723f6ab
--- /dev/null
+++ b/include/pxa_lcd.h
@@ -0,0 +1,80 @@
+/*
+ * pxa_lcd.h - PXA LCD Controller structures
+ *
+ * (C) Copyright 2001
+ * Wolfgang Denk, DENX Software Engineering, wd at denx.de.
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#ifndef _PXA_LCD_H_
+#define _PXA_LCD_H_
+
+/*
+ * PXA LCD DMA descriptor
+ */
+struct pxafb_dma_descriptor {
+	u_long	fdadr;		/* Frame descriptor address register */
+	u_long	fsadr;		/* Frame source address register */
+	u_long	fidr;		/* Frame ID register */
+	u_long	ldcmd;		/* Command register */
+};
+
+/*
+ * PXA LCD info
+ */
+struct pxafb_info {
+	/* Misc registers */
+	u_long	reg_lccr3;
+	u_long	reg_lccr2;
+	u_long	reg_lccr1;
+	u_long	reg_lccr0;
+	u_long	fdadr0;
+	u_long	fdadr1;
+
+	/* DMA descriptors */
+	struct	pxafb_dma_descriptor *dmadesc_fblow;
+	struct	pxafb_dma_descriptor *dmadesc_fbhigh;
+	struct	pxafb_dma_descriptor *dmadesc_palette;
+
+	u_long	screen;		/* physical address of frame buffer */
+	u_long	palette;	/* physical address of palette memory */
+	u_int	palette_size;
+};
+
+/*
+ * LCD controller stucture for PXA CPU
+ */
+typedef struct vidinfo {
+	ushort	vl_col;		/* Number of columns (i.e. 640) */
+	ushort	vl_row;		/* Number of rows (i.e. 480) */
+	ushort	vl_width;	/* Width of display area in millimeters */
+	ushort	vl_height;	/* Height of display area in millimeters */
+
+	/* LCD configuration register */
+	u_char	vl_clkp;	/* Clock polarity */
+	u_char	vl_oep;		/* Output Enable polarity */
+	u_char	vl_hsp;		/* Horizontal Sync polarity */
+	u_char	vl_vsp;		/* Vertical Sync polarity */
+	u_char	vl_dp;		/* Data polarity */
+	u_char	vl_bpix;/* Bits per pixel, 0 = 1, 1 = 2, 2 = 4, 3 = 8, 4 = 16 */
+	u_char	vl_lbw;		/* LCD Bus width, 0 = 4, 1 = 8 */
+	u_char	vl_splt;/* Split display, 0 = single-scan, 1 = dual-scan */
+	u_char	vl_clor;	/* Color, 0 = mono, 1 = color */
+	u_char	vl_tft;		/* 0 = passive, 1 = TFT */
+
+	/* Horizontal control register. Timing from data sheet */
+	ushort	vl_hpw;		/* Horz sync pulse width */
+	u_char	vl_blw;		/* Wait before of line */
+	u_char	vl_elw;		/* Wait end of line */
+
+	/* Vertical control register. */
+	u_char	vl_vpw;		/* Vertical sync pulse width */
+	u_char	vl_bfw;		/* Wait before of frame */
+	u_char	vl_efw;		/* Wait end of frame */
+
+	/* PXA LCD controller params */
+	struct	pxafb_info pxa;
+} vidinfo_t;
+
+#endif
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [U-Boot] [PATCH 02/13] lcd: split configuration_get_cmap
  2015-01-29 11:21 [U-Boot] [PATCH 00/13] common lcd refactor Nikita Kiryanov
  2015-01-29 11:21 ` [U-Boot] [PATCH 01/13] lcd: move platform specific structs to their own headers Nikita Kiryanov
@ 2015-01-29 11:21 ` Nikita Kiryanov
  2015-01-31  0:24   ` Simon Glass
  2015-01-29 11:21 ` [U-Boot] [PATCH 03/13] lcd: atmel: move atmel specific fb_put_word to atmel_lcdfb Nikita Kiryanov
                   ` (10 subsequent siblings)
  12 siblings, 1 reply; 34+ messages in thread
From: Nikita Kiryanov @ 2015-01-29 11:21 UTC (permalink / raw)
  To: u-boot

configuration_get_cmap() is multiple platform specific functions stuffed into
one function. Split it into multiple versions, and move each version to the
appropriate driver to reduce the #ifdef complexity.

Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il>
Cc: Bo Shen <voice.shen@atmel.com>
Cc: Simon Glass <sjg@chromium.org>
Cc: Anatolij Gustschin <agust@denx.de>
---
 common/lcd.c                 | 19 -------------------
 drivers/video/atmel_hlcdfb.c | 13 +++++++++++++
 drivers/video/atmel_lcdfb.c  |  5 +++++
 drivers/video/exynos_fb.c    |  9 +++++++++
 drivers/video/mpc8xx_lcd.c   |  7 +++++++
 drivers/video/pxa_lcd.c      |  6 ++++++
 include/lcd.h                |  9 +++++++++
 7 files changed, 49 insertions(+), 19 deletions(-)

diff --git a/common/lcd.c b/common/lcd.c
index 1195a54..0f6c2e4 100644
--- a/common/lcd.c
+++ b/common/lcd.c
@@ -383,25 +383,6 @@ int lcd_getbgcolor(void)
 /************************************************************************/
 /* ** Chipset depending Bitmap / Logo stuff...                          */
 /************************************************************************/
-static inline ushort *configuration_get_cmap(void)
-{
-#if defined CONFIG_CPU_PXA
-	struct pxafb_info *fbi = &panel_info.pxa;
-	return (ushort *)fbi->palette;
-#elif defined(CONFIG_MPC823)
-	immap_t *immr = (immap_t *) CONFIG_SYS_IMMR;
-	cpm8xx_t *cp = &(immr->im_cpm);
-	return (ushort *)&(cp->lcd_cmap[255 * sizeof(ushort)]);
-#elif defined(CONFIG_ATMEL_LCD)
-	return (ushort *)(panel_info.mmio + ATMEL_LCDC_LUT(0));
-#elif !defined(CONFIG_ATMEL_HLCD) && !defined(CONFIG_EXYNOS_FB)
-	return panel_info.cmap;
-#elif defined(CONFIG_LCD_LOGO)
-	return bmp_logo_palette;
-#else
-	return NULL;
-#endif
-}
 
 #ifdef CONFIG_LCD_LOGO
 void bitmap_plot(int x, int y)
diff --git a/drivers/video/atmel_hlcdfb.c b/drivers/video/atmel_hlcdfb.c
index 935ae42..0ce2370 100644
--- a/drivers/video/atmel_hlcdfb.c
+++ b/drivers/video/atmel_hlcdfb.c
@@ -13,6 +13,10 @@
 #include <lcd.h>
 #include <atmel_hlcdc.h>
 
+#if defined(CONFIG_LCD_LOGO)
+#include <bmp_logo.h>
+#endif
+
 /* configurable parameters */
 #define ATMEL_LCDC_CVAL_DEFAULT		0xc8
 #define ATMEL_LCDC_DMA_BURST_LEN	8
@@ -37,6 +41,15 @@ void lcd_setcolreg(ushort regno, ushort red, ushort green, ushort blue)
 		panel_info.mmio + ATMEL_LCDC_LUT(regno));
 }
 
+ushort *configuration_get_cmap(void)
+{
+#if defined(CONFIG_LCD_LOGO)
+	return bmp_logo_palette;
+#else
+	return NULL;
+#endif
+}
+
 void lcd_ctrl_init(void *lcdbase)
 {
 	unsigned long value;
diff --git a/drivers/video/atmel_lcdfb.c b/drivers/video/atmel_lcdfb.c
index 3cf008c..fa6a82c 100644
--- a/drivers/video/atmel_lcdfb.c
+++ b/drivers/video/atmel_lcdfb.c
@@ -29,6 +29,11 @@
 #define lcdc_readl(mmio, reg)		__raw_readl((mmio)+(reg))
 #define lcdc_writel(mmio, reg, val)	__raw_writel((val), (mmio)+(reg))
 
+ushort *configuration_get_cmap(void)
+{
+	return (ushort *)(panel_info.mmio + ATMEL_LCDC_LUT(0));
+}
+
 void lcd_setcolreg(ushort regno, ushort red, ushort green, ushort blue)
 {
 #if defined(CONFIG_ATMEL_LCD_BGR555)
diff --git a/drivers/video/exynos_fb.c b/drivers/video/exynos_fb.c
index be35b98..c5d7330 100644
--- a/drivers/video/exynos_fb.c
+++ b/drivers/video/exynos_fb.c
@@ -37,6 +37,15 @@ vidinfo_t panel_info  = {
 };
 #endif
 
+ushort *configuration_get_cmap(void)
+{
+#if defined(CONFIG_LCD_LOGO)
+	return bmp_logo_palette;
+#else
+	return NULL;
+#endif
+}
+
 static void exynos_lcd_init_mem(void *lcdbase, vidinfo_t *vid)
 {
 	unsigned long palette_size;
diff --git a/drivers/video/mpc8xx_lcd.c b/drivers/video/mpc8xx_lcd.c
index add7215..9d2e5ed 100644
--- a/drivers/video/mpc8xx_lcd.c
+++ b/drivers/video/mpc8xx_lcd.c
@@ -357,6 +357,13 @@ lcd_setcolreg (ushort regno, ushort red, ushort green, ushort blue)
 
 /*----------------------------------------------------------------------*/
 
+ushort *configuration_get_cmap(void)
+{
+	immap_t *immr = (immap_t *)CONFIG_SYS_IMMR;
+	cpm8xx_t *cp = &(immr->im_cpm);
+	return (ushort *)&(cp->lcd_cmap[255 * sizeof(ushort)]);
+}
+
 void lcd_enable (void)
 {
 	volatile immap_t *immr = (immap_t *) CONFIG_SYS_IMMR;
diff --git a/drivers/video/pxa_lcd.c b/drivers/video/pxa_lcd.c
index f66f615..04105d4 100644
--- a/drivers/video/pxa_lcd.c
+++ b/drivers/video/pxa_lcd.c
@@ -342,6 +342,12 @@ static int pxafb_init (vidinfo_t *vid);
 /* ---------------  PXA chipset specific functions  ------------------- */
 /************************************************************************/
 
+ushort *configuration_get_cmap(void)
+{
+	struct pxafb_info *fbi = &panel_info.pxa;
+	return (ushort *)fbi->palette;
+}
+
 void lcd_ctrl_init (void *lcdbase)
 {
 	pxafb_init_mem(lcdbase, &panel_info);
diff --git a/include/lcd.h b/include/lcd.h
index fbba6a2..838f645 100644
--- a/include/lcd.h
+++ b/include/lcd.h
@@ -42,13 +42,17 @@ void lcd_set_flush_dcache(int flush);
 
 #if defined CONFIG_MPC823
 #include <mpc823_lcd.h>
+ushort *configuration_get_cmap(void);
 #elif defined(CONFIG_CPU_PXA25X) || defined(CONFIG_CPU_PXA27X) || \
 	defined CONFIG_CPU_MONAHANS
 #include <pxa_lcd.h>
+ushort *configuration_get_cmap(void);
 #elif defined(CONFIG_ATMEL_LCD) || defined(CONFIG_ATMEL_HLCD)
 #include <atmel_lcd.h>
+ushort *configuration_get_cmap(void);
 #elif defined(CONFIG_EXYNOS_FB)
 #include <exynos_lcd.h>
+ushort *configuration_get_cmap(void);
 #else
 typedef struct vidinfo {
 	ushort	vl_col;		/* Number of columns (i.e. 160) */
@@ -60,6 +64,11 @@ typedef struct vidinfo {
 
 	void	*priv;		/* Pointer to driver-specific data */
 } vidinfo_t;
+
+static inline ushort *configuration_get_cmap(void)
+{
+	return panel_info.cmap;
+}
 #endif
 
 extern vidinfo_t panel_info;
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [U-Boot] [PATCH 03/13] lcd: atmel: move atmel specific fb_put_word to atmel_lcdfb
  2015-01-29 11:21 [U-Boot] [PATCH 00/13] common lcd refactor Nikita Kiryanov
  2015-01-29 11:21 ` [U-Boot] [PATCH 01/13] lcd: move platform specific structs to their own headers Nikita Kiryanov
  2015-01-29 11:21 ` [U-Boot] [PATCH 02/13] lcd: split configuration_get_cmap Nikita Kiryanov
@ 2015-01-29 11:21 ` Nikita Kiryanov
  2015-01-31  0:24   ` Simon Glass
  2015-01-29 11:21 ` [U-Boot] [PATCH 04/13] lcd: mpc8xx: move mpc823 specific fb_put_byte to mpc8xx_lcd.c Nikita Kiryanov
                   ` (9 subsequent siblings)
  12 siblings, 1 reply; 34+ messages in thread
From: Nikita Kiryanov @ 2015-01-29 11:21 UTC (permalink / raw)
  To: u-boot

Reduce the amount of platform dependant code in common/lcd.c by moving Atmel
specific implementation of fb_put_word() to atmel_lcdfb.c. Since we must also
have a default implementation for everybody else, make the remainder of the
code into a weak function.

Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il>
Cc: Bo Shen <voice.shen@atmel.com>
Cc: Simon Glass <sjg@chromium.org>
Cc: Anatolij Gustschin <agust@denx.de>
---
 common/lcd.c                | 11 +----------
 drivers/video/atmel_lcdfb.c |  9 +++++++++
 2 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/common/lcd.c b/common/lcd.c
index 0f6c2e4..f17b35b 100644
--- a/common/lcd.c
+++ b/common/lcd.c
@@ -642,20 +642,11 @@ static void lcd_display_rle8_bitmap(bmp_image_t *bmp, ushort *cmap, uchar *fb,
 #endif
 
 #if defined(CONFIG_BMP_16BPP)
-#if defined(CONFIG_ATMEL_LCD_BGR555)
-static inline void fb_put_word(uchar **fb, uchar **from)
-{
-	*(*fb)++ = (((*from)[0] & 0x1f) << 2) | ((*from)[1] & 0x03);
-	*(*fb)++ = ((*from)[0] & 0xe0) | (((*from)[1] & 0x7c) >> 2);
-	*from += 2;
-}
-#else
-static inline void fb_put_word(uchar **fb, uchar **from)
+__weak void fb_put_word(uchar **fb, uchar **from)
 {
 	*(*fb)++ = *(*from)++;
 	*(*fb)++ = *(*from)++;
 }
-#endif
 #endif /* CONFIG_BMP_16BPP */
 
 int lcd_display_bitmap(ulong bmp_image, int x, int y)
diff --git a/drivers/video/atmel_lcdfb.c b/drivers/video/atmel_lcdfb.c
index fa6a82c..c7991cd 100644
--- a/drivers/video/atmel_lcdfb.c
+++ b/drivers/video/atmel_lcdfb.c
@@ -34,6 +34,15 @@ ushort *configuration_get_cmap(void)
 	return (ushort *)(panel_info.mmio + ATMEL_LCDC_LUT(0));
 }
 
+#if defined(CONFIG_BMP_16BPP) && defined(CONFIG_ATMEL_LCD_BGR555)
+void fb_put_word(uchar **fb, uchar **from)
+{
+	*(*fb)++ = (((*from)[0] & 0x1f) << 2) | ((*from)[1] & 0x03);
+	*(*fb)++ = ((*from)[0] & 0xe0) | (((*from)[1] & 0x7c) >> 2);
+	*from += 2;
+}
+#endif
+
 void lcd_setcolreg(ushort regno, ushort red, ushort green, ushort blue)
 {
 #if defined(CONFIG_ATMEL_LCD_BGR555)
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [U-Boot] [PATCH 04/13] lcd: mpc8xx: move mpc823 specific fb_put_byte to mpc8xx_lcd.c
  2015-01-29 11:21 [U-Boot] [PATCH 00/13] common lcd refactor Nikita Kiryanov
                   ` (2 preceding siblings ...)
  2015-01-29 11:21 ` [U-Boot] [PATCH 03/13] lcd: atmel: move atmel specific fb_put_word to atmel_lcdfb Nikita Kiryanov
@ 2015-01-29 11:21 ` Nikita Kiryanov
  2015-01-31  0:24   ` Simon Glass
  2015-01-29 11:21 ` [U-Boot] [PATCH 05/13] lcd: atmel: introduce lcd_logo_set_cmap Nikita Kiryanov
                   ` (8 subsequent siblings)
  12 siblings, 1 reply; 34+ messages in thread
From: Nikita Kiryanov @ 2015-01-29 11:21 UTC (permalink / raw)
  To: u-boot

Reduce the amount of platform dependant code in common/lcd.c by moving MPC823
specific implementation of fb_put_byte() to mpc8xx_lcd.c. Since we must also
have a default implementation for everybody else, make the remainder of the
code into a weak function.

Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il>
Cc: Simon Glass <sjg@chromium.org>
Cc: Anatolij Gustschin <agust@denx.de>
---
 common/lcd.c               | 11 +++++------
 drivers/video/mpc8xx_lcd.c |  7 +++++++
 2 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/common/lcd.c b/common/lcd.c
index f17b35b..efd9a87 100644
--- a/common/lcd.c
+++ b/common/lcd.c
@@ -635,11 +635,10 @@ static void lcd_display_rle8_bitmap(bmp_image_t *bmp, ushort *cmap, uchar *fb,
 }
 #endif
 
-#if defined(CONFIG_MPC823)
-#define FB_PUT_BYTE(fb, from) *(fb)++ = (255 - *(from)++)
-#else
-#define FB_PUT_BYTE(fb, from) *(fb)++ = *(from)++
-#endif
+__weak void fb_put_byte(uchar **fb, uchar **from)
+{
+	*(*fb)++ = *(*from)++;
+}
 
 #if defined(CONFIG_BMP_16BPP)
 __weak void fb_put_word(uchar **fb, uchar **from)
@@ -764,7 +763,7 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
 			WATCHDOG_RESET();
 			for (j = 0; j < width; j++) {
 				if (bpix != 16) {
-					FB_PUT_BYTE(fb, bmap);
+					fb_put_byte(&fb, &bmap);
 				} else {
 					*(uint16_t *)fb = cmap_base[*(bmap++)];
 					fb += sizeof(uint16_t) / sizeof(*fb);
diff --git a/drivers/video/mpc8xx_lcd.c b/drivers/video/mpc8xx_lcd.c
index 9d2e5ed..190c05a 100644
--- a/drivers/video/mpc8xx_lcd.c
+++ b/drivers/video/mpc8xx_lcd.c
@@ -364,6 +364,13 @@ ushort *configuration_get_cmap(void)
 	return (ushort *)&(cp->lcd_cmap[255 * sizeof(ushort)]);
 }
 
+#if defined(CONFIG_MPC823)
+void fb_put_byte(uchar **fb, uchar **from)
+{
+	*(*fb)++ = (255 - *(*from)++);
+}
+#endif
+
 void lcd_enable (void)
 {
 	volatile immap_t *immr = (immap_t *) CONFIG_SYS_IMMR;
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [U-Boot] [PATCH 05/13] lcd: atmel: introduce lcd_logo_set_cmap
  2015-01-29 11:21 [U-Boot] [PATCH 00/13] common lcd refactor Nikita Kiryanov
                   ` (3 preceding siblings ...)
  2015-01-29 11:21 ` [U-Boot] [PATCH 04/13] lcd: mpc8xx: move mpc823 specific fb_put_byte to mpc8xx_lcd.c Nikita Kiryanov
@ 2015-01-29 11:21 ` Nikita Kiryanov
  2015-01-31  0:24   ` Simon Glass
  2015-01-29 11:21 ` [U-Boot] [PATCH 06/13] lcd: mpc823: move mpc823 specific lcd_logo_set_cmap code to mpc8xx_lcd.c Nikita Kiryanov
                   ` (7 subsequent siblings)
  12 siblings, 1 reply; 34+ messages in thread
From: Nikita Kiryanov @ 2015-01-29 11:21 UTC (permalink / raw)
  To: u-boot

Reduce the bitmap_plot #ifdef complexity by extracting Atmel specific code for
setting cmap into a new function lcd_logo_set_cmap(), which is implemented in
atmel_lcdfb driver and defined as part of common/lcd.c api with a weak dummy
version. In the Atmel implementation, ARRAY_SIZE(bmp_logo_palette) is
switched for BMP_LOGO_COLORS to avoid having to include bmp_logo_data.h, which
would cause a compilation error because the logo data and palette arrays would
be defined twice.

This is a step towards cleaning bitmap_plot() of platform specific code.

Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il>
Cc: Bo Shen <voice.shen@atmel.com>
Cc: Simon Glass <sjg@chromium.org>
Cc: Anatolij Gustschin <agust@denx.de>
---
 common/lcd.c                | 29 ++++++++---------------------
 drivers/video/atmel_lcdfb.c | 26 ++++++++++++++++++++++++++
 2 files changed, 34 insertions(+), 21 deletions(-)

diff --git a/common/lcd.c b/common/lcd.c
index efd9a87..7fcac1d 100644
--- a/common/lcd.c
+++ b/common/lcd.c
@@ -385,13 +385,13 @@ int lcd_getbgcolor(void)
 /************************************************************************/
 
 #ifdef CONFIG_LCD_LOGO
+__weak void lcd_logo_set_cmap(void)
+{
+}
+
 void bitmap_plot(int x, int y)
 {
-#ifdef CONFIG_ATMEL_LCD
-	uint *cmap = (uint *)bmp_logo_palette;
-#else
 	ushort *cmap = (ushort *)bmp_logo_palette;
-#endif
 	ushort i, j;
 	uchar *bmap;
 	uchar *fb;
@@ -417,8 +417,6 @@ void bitmap_plot(int x, int y)
 		 */
 #if defined(CONFIG_MPC823)
 		cmap = (ushort *) &(cp->lcd_cmap[BMP_LOGO_OFFSET * sizeof(ushort)]);
-#elif defined(CONFIG_ATMEL_LCD)
-		cmap = (uint *)configuration_get_cmap();
 #else
 		cmap = configuration_get_cmap();
 #endif
@@ -426,25 +424,14 @@ void bitmap_plot(int x, int y)
 		WATCHDOG_RESET();
 
 		/* Set color map */
+#ifdef CONFIG_ATMEL_LCD
+		lcd_logo_set_cmap();
+#else
 		for (i = 0; i < ARRAY_SIZE(bmp_logo_palette); ++i) {
 			ushort colreg = bmp_logo_palette[i];
-#ifdef CONFIG_ATMEL_LCD
-			uint lut_entry;
-#ifdef CONFIG_ATMEL_LCD_BGR555
-			lut_entry = ((colreg & 0x000F) << 11) |
-					((colreg & 0x00F0) <<  2) |
-					((colreg & 0x0F00) >>  7);
-#else /* CONFIG_ATMEL_LCD_RGB565 */
-			lut_entry = ((colreg & 0x000F) << 1) |
-					((colreg & 0x00F0) << 3) |
-					((colreg & 0x0F00) << 4);
-#endif
-			*(cmap + BMP_LOGO_OFFSET) = lut_entry;
-			cmap++;
-#else /* !CONFIG_ATMEL_LCD */
 			*cmap++ = colreg;
-#endif /* CONFIG_ATMEL_LCD */
 		}
+#endif
 
 		WATCHDOG_RESET();
 
diff --git a/drivers/video/atmel_lcdfb.c b/drivers/video/atmel_lcdfb.c
index c7991cd..2a71eba 100644
--- a/drivers/video/atmel_lcdfb.c
+++ b/drivers/video/atmel_lcdfb.c
@@ -43,6 +43,32 @@ void fb_put_word(uchar **fb, uchar **from)
 }
 #endif
 
+#ifdef CONFIG_LCD_LOGO
+#include <bmp_logo.h>
+void lcd_logo_set_cmap(void)
+{
+	int i;
+	uint lut_entry;
+	ushort colreg;
+	uint *cmap = (uint *)configuration_get_cmap();
+
+	for (i = 0; i < BMP_LOGO_COLORS; ++i) {
+		colreg = bmp_logo_palette[i];
+#ifdef CONFIG_ATMEL_LCD_BGR555
+		lut_entry = ((colreg & 0x000F) << 11) |
+				((colreg & 0x00F0) <<  2) |
+				((colreg & 0x0F00) >>  7);
+#else
+		lut_entry = ((colreg & 0x000F) << 1) |
+				((colreg & 0x00F0) << 3) |
+				((colreg & 0x0F00) << 4);
+#endif
+		*(cmap + BMP_LOGO_OFFSET) = lut_entry;
+		cmap++;
+	}
+}
+#endif
+
 void lcd_setcolreg(ushort regno, ushort red, ushort green, ushort blue)
 {
 #if defined(CONFIG_ATMEL_LCD_BGR555)
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [U-Boot] [PATCH 06/13] lcd: mpc823: move mpc823 specific lcd_logo_set_cmap code to mpc8xx_lcd.c
  2015-01-29 11:21 [U-Boot] [PATCH 00/13] common lcd refactor Nikita Kiryanov
                   ` (4 preceding siblings ...)
  2015-01-29 11:21 ` [U-Boot] [PATCH 05/13] lcd: atmel: introduce lcd_logo_set_cmap Nikita Kiryanov
@ 2015-01-29 11:21 ` Nikita Kiryanov
  2015-01-31  0:24   ` Simon Glass
  2015-01-29 11:21 ` [U-Boot] [PATCH 07/13] lcd: logo: move generic cmap setting to lcd_logo_set_cmap() Nikita Kiryanov
                   ` (6 subsequent siblings)
  12 siblings, 1 reply; 34+ messages in thread
From: Nikita Kiryanov @ 2015-01-29 11:21 UTC (permalink / raw)
  To: u-boot

Reduce the bitmap_plot #ifdef complexity by extracting MPC823 specific code for
setting cmap into its own implementation of lcd_logo_set_cmap(), implemented in
mpc8xx_lcd.c. In the MPC823 implementation, ARRAY_SIZE(bmp_logo_palette) is
switched for BMP_LOGO_COLORS to avoid having to include bmp_logo_data.h, which
would cause a compilation error because the logo data and palette arrays would
be defined twice.

Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il>
Cc: Simon Glass <sjg@chromium.org>
Cc: Anatolij Gustschin <agust@denx.de>
---
 common/lcd.c               | 10 +---------
 drivers/video/mpc8xx_lcd.c | 15 +++++++++++++++
 2 files changed, 16 insertions(+), 9 deletions(-)

diff --git a/common/lcd.c b/common/lcd.c
index 7fcac1d..355c144 100644
--- a/common/lcd.c
+++ b/common/lcd.c
@@ -396,10 +396,6 @@ void bitmap_plot(int x, int y)
 	uchar *bmap;
 	uchar *fb;
 	ushort *fb16;
-#if defined(CONFIG_MPC823)
-	immap_t *immr = (immap_t *) CONFIG_SYS_IMMR;
-	cpm8xx_t *cp = &(immr->im_cpm);
-#endif
 	unsigned bpix = NBITS(panel_info.vl_bpix);
 
 	debug("Logo: width %d  height %d  colors %d  cmap %d\n",
@@ -415,16 +411,12 @@ void bitmap_plot(int x, int y)
 		 * cmap was set to the source palette, so no change is done.
 		 * This avoids even more ifdefs in the next stanza
 		 */
-#if defined(CONFIG_MPC823)
-		cmap = (ushort *) &(cp->lcd_cmap[BMP_LOGO_OFFSET * sizeof(ushort)]);
-#else
 		cmap = configuration_get_cmap();
-#endif
 
 		WATCHDOG_RESET();
 
 		/* Set color map */
-#ifdef CONFIG_ATMEL_LCD
+#if defined(CONFIG_ATMEL_LCD) || defined(CONFIG_MPC823)
 		lcd_logo_set_cmap();
 #else
 		for (i = 0; i < ARRAY_SIZE(bmp_logo_palette); ++i) {
diff --git a/drivers/video/mpc8xx_lcd.c b/drivers/video/mpc8xx_lcd.c
index 190c05a..faa58c0 100644
--- a/drivers/video/mpc8xx_lcd.c
+++ b/drivers/video/mpc8xx_lcd.c
@@ -371,6 +371,21 @@ void fb_put_byte(uchar **fb, uchar **from)
 }
 #endif
 
+#ifdef CONFIG_LCD_LOGO
+#include <bmp_logo.h>
+void lcd_logo_set_cmap(void)
+{
+	int i;
+	ushort *cmap;
+	immap_t *immr = (immap_t *)CONFIG_SYS_IMMR;
+	cpm8xx_t *cp = &(immr->im_cpm);
+	cmap = (ushort *)&(cp->lcd_cmap[BMP_LOGO_OFFSET * sizeof(ushort)]);
+
+	for (i = 0; i < BMP_LOGO_COLORS; ++i)
+		*cmap++ = bmp_logo_palette[i];
+}
+#endif
+
 void lcd_enable (void)
 {
 	volatile immap_t *immr = (immap_t *) CONFIG_SYS_IMMR;
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [U-Boot] [PATCH 07/13] lcd: logo: move generic cmap setting to lcd_logo_set_cmap()
  2015-01-29 11:21 [U-Boot] [PATCH 00/13] common lcd refactor Nikita Kiryanov
                   ` (5 preceding siblings ...)
  2015-01-29 11:21 ` [U-Boot] [PATCH 06/13] lcd: mpc823: move mpc823 specific lcd_logo_set_cmap code to mpc8xx_lcd.c Nikita Kiryanov
@ 2015-01-29 11:21 ` Nikita Kiryanov
  2015-01-31  0:24   ` Simon Glass
  2015-01-29 11:21 ` [U-Boot] [PATCH 08/13] lcd: introduce lcd_set_cmap Nikita Kiryanov
                   ` (5 subsequent siblings)
  12 siblings, 1 reply; 34+ messages in thread
From: Nikita Kiryanov @ 2015-01-29 11:21 UTC (permalink / raw)
  To: u-boot

Get rid of platform specific #ifdefs in bitmap_plot() by moving the generic
case of setting cmap into the weak lcd_logo_set_cmap().

Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il>
Cc: Bo Shen <voice.shen@atmel.com>
Cc: Simon Glass <sjg@chromium.org>
Cc: Anatolij Gustschin <agust@denx.de>
---
 common/lcd.c | 28 +++++++---------------------
 1 file changed, 7 insertions(+), 21 deletions(-)

diff --git a/common/lcd.c b/common/lcd.c
index 355c144..dcee3c0 100644
--- a/common/lcd.c
+++ b/common/lcd.c
@@ -387,44 +387,30 @@ int lcd_getbgcolor(void)
 #ifdef CONFIG_LCD_LOGO
 __weak void lcd_logo_set_cmap(void)
 {
+	int i;
+	ushort *cmap = configuration_get_cmap();
+
+	for (i = 0; i < ARRAY_SIZE(bmp_logo_palette); ++i)
+		*cmap++ = bmp_logo_palette[i];
 }
 
 void bitmap_plot(int x, int y)
 {
-	ushort *cmap = (ushort *)bmp_logo_palette;
 	ushort i, j;
 	uchar *bmap;
 	uchar *fb;
 	ushort *fb16;
 	unsigned bpix = NBITS(panel_info.vl_bpix);
 
-	debug("Logo: width %d  height %d  colors %d  cmap %d\n",
-		BMP_LOGO_WIDTH, BMP_LOGO_HEIGHT, BMP_LOGO_COLORS,
-		ARRAY_SIZE(bmp_logo_palette));
+	debug("Logo: width %d  height %d  colors %d\n",
+	      BMP_LOGO_WIDTH, BMP_LOGO_HEIGHT, BMP_LOGO_COLORS);
 
 	bmap = &bmp_logo_bitmap[0];
 	fb   = (uchar *)(lcd_base + y * lcd_line_length + x * bpix / 8);
 
 	if (bpix < 12) {
-		/* Leave room for default color map
-		 * default case: generic system with no cmap (most likely 16bpp)
-		 * cmap was set to the source palette, so no change is done.
-		 * This avoids even more ifdefs in the next stanza
-		 */
-		cmap = configuration_get_cmap();
-
 		WATCHDOG_RESET();
-
-		/* Set color map */
-#if defined(CONFIG_ATMEL_LCD) || defined(CONFIG_MPC823)
 		lcd_logo_set_cmap();
-#else
-		for (i = 0; i < ARRAY_SIZE(bmp_logo_palette); ++i) {
-			ushort colreg = bmp_logo_palette[i];
-			*cmap++ = colreg;
-		}
-#endif
-
 		WATCHDOG_RESET();
 
 		for (i = 0; i < BMP_LOGO_HEIGHT; ++i) {
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [U-Boot] [PATCH 08/13] lcd: introduce lcd_set_cmap
  2015-01-29 11:21 [U-Boot] [PATCH 00/13] common lcd refactor Nikita Kiryanov
                   ` (6 preceding siblings ...)
  2015-01-29 11:21 ` [U-Boot] [PATCH 07/13] lcd: logo: move generic cmap setting to lcd_logo_set_cmap() Nikita Kiryanov
@ 2015-01-29 11:21 ` Nikita Kiryanov
  2015-01-31  0:24   ` Simon Glass
  2015-01-29 11:21 ` [U-Boot] [PATCH 09/13] lcd: remove unused includes Nikita Kiryanov
                   ` (4 subsequent siblings)
  12 siblings, 1 reply; 34+ messages in thread
From: Nikita Kiryanov @ 2015-01-29 11:21 UTC (permalink / raw)
  To: u-boot

Reduce the lcd_display_bitmap #ifdef complexity by extracting Atmel specific
code for setting cmap for bitmap images into a new function lcd_set_cmap().
A default version is implemented with the remainder of the code.

Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il>
Cc: Bo Shen <voice.shen@atmel.com>
Cc: Simon Glass <sjg@chromium.org>
Cc: Anatolij Gustschin <agust@denx.de>
---
 common/lcd.c                | 46 ++++++++++++++++++++++-----------------------
 drivers/video/atmel_lcdfb.c | 11 +++++++++++
 2 files changed, 33 insertions(+), 24 deletions(-)

diff --git a/common/lcd.c b/common/lcd.c
index dcee3c0..8a8d6c3 100644
--- a/common/lcd.c
+++ b/common/lcd.c
@@ -613,9 +613,27 @@ __weak void fb_put_word(uchar **fb, uchar **from)
 }
 #endif /* CONFIG_BMP_16BPP */
 
+__weak void lcd_set_cmap(bmp_image_t *bmp, unsigned colors)
+{
+	int i;
+	bmp_color_table_entry_t cte;
+	ushort *cmap = configuration_get_cmap();
+
+	for (i = 0; i < colors; ++i) {
+		cte = bmp->color_table[i];
+		*cmap = (((cte.red)   << 8) & 0xf800) |
+			(((cte.green) << 3) & 0x07e0) |
+			(((cte.blue)  >> 3) & 0x001f);
+#if defined(CONFIG_MPC823)
+		cmap--;
+#else
+		cmap++;
+#endif
+	}
+}
+
 int lcd_display_bitmap(ulong bmp_image, int x, int y)
 {
-	ushort *cmap = NULL;
 	ushort *cmap_base = NULL;
 	ushort i, j;
 	uchar *fb;
@@ -663,29 +681,8 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
 	debug("Display-bmp: %d x %d  with %d colors\n",
 		(int)width, (int)height, (int)colors);
 
-	if (bmp_bpix == 8) {
-		cmap = configuration_get_cmap();
-		cmap_base = cmap;
-
-		/* Set color map */
-		for (i = 0; i < colors; ++i) {
-			bmp_color_table_entry_t cte = bmp->color_table[i];
-#if !defined(CONFIG_ATMEL_LCD)
-			ushort colreg =
-				( ((cte.red)   << 8) & 0xf800) |
-				( ((cte.green) << 3) & 0x07e0) |
-				( ((cte.blue)  >> 3) & 0x001f) ;
-			*cmap = colreg;
-#if defined(CONFIG_MPC823)
-			cmap--;
-#else
-			cmap++;
-#endif
-#else /* CONFIG_ATMEL_LCD */
-			lcd_setcolreg(i, cte.red, cte.green, cte.blue);
-#endif
-		}
-	}
+	if (bmp_bpix == 8)
+		lcd_set_cmap(bmp, colors);
 
 	padded_width = (width & 0x3 ? (width & ~0x3) + 4 : width);
 
@@ -706,6 +703,7 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
 	switch (bmp_bpix) {
 	case 1: /* pass through */
 	case 8: {
+		cmap_base = configuration_get_cmap();
 #ifdef CONFIG_LCD_BMP_RLE8
 		u32 compression = get_unaligned_le32(&bmp->header.compression);
 		if (compression == BMP_BI_RLE8) {
diff --git a/drivers/video/atmel_lcdfb.c b/drivers/video/atmel_lcdfb.c
index 2a71eba..5add136 100644
--- a/drivers/video/atmel_lcdfb.c
+++ b/drivers/video/atmel_lcdfb.c
@@ -11,6 +11,7 @@
 #include <asm/arch/gpio.h>
 #include <asm/arch/clk.h>
 #include <lcd.h>
+#include <bmp_layout.h>
 #include <atmel_lcdc.h>
 
 /* configurable parameters */
@@ -80,6 +81,16 @@ void lcd_setcolreg(ushort regno, ushort red, ushort green, ushort blue)
 #endif
 }
 
+void lcd_set_cmap(bmp_image_t *bmp, unsigned colors)
+{
+	int i;
+
+	for (i = 0; i < colors; ++i) {
+		bmp_color_table_entry_t cte = bmp->color_table[i];
+		lcd_setcolreg(i, cte.red, cte.green, cte.blue);
+	}
+}
+
 void lcd_ctrl_init(void *lcdbase)
 {
 	unsigned long value;
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [U-Boot] [PATCH 09/13] lcd: remove unused includes
  2015-01-29 11:21 [U-Boot] [PATCH 00/13] common lcd refactor Nikita Kiryanov
                   ` (7 preceding siblings ...)
  2015-01-29 11:21 ` [U-Boot] [PATCH 08/13] lcd: introduce lcd_set_cmap Nikita Kiryanov
@ 2015-01-29 11:21 ` Nikita Kiryanov
  2015-01-31  0:24   ` Simon Glass
  2015-01-29 11:21 ` [U-Boot] [PATCH 10/13] lcd: various cleanups Nikita Kiryanov
                   ` (3 subsequent siblings)
  12 siblings, 1 reply; 34+ messages in thread
From: Nikita Kiryanov @ 2015-01-29 11:21 UTC (permalink / raw)
  To: u-boot

Remove unused includes.

Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il>
Cc: Bo Shen <voice.shen@atmel.com>
Cc: Simon Glass <sjg@chromium.org>
Cc: Anatolij Gustschin <agust@denx.de>
---
 common/lcd.c | 18 ------------------
 1 file changed, 18 deletions(-)

diff --git a/common/lcd.c b/common/lcd.c
index 8a8d6c3..7a51923 100644
--- a/common/lcd.c
+++ b/common/lcd.c
@@ -16,14 +16,9 @@
 #include <config.h>
 #include <common.h>
 #include <command.h>
-#include <stdarg.h>
-#include <search.h>
 #include <env_callback.h>
 #include <linux/types.h>
 #include <stdio_dev.h>
-#if defined(CONFIG_POST)
-#include <post.h>
-#endif
 #include <lcd.h>
 #include <watchdog.h>
 #include <asm/unaligned.h>
@@ -32,19 +27,6 @@
 #include <asm/unaligned.h>
 #include <fdt_support.h>
 
-#if defined(CONFIG_CPU_PXA25X) || defined(CONFIG_CPU_PXA27X) || \
-	defined(CONFIG_CPU_MONAHANS)
-#include <asm/byteorder.h>
-#endif
-
-#if defined(CONFIG_MPC823)
-#include <lcdvideo.h>
-#endif
-
-#if defined(CONFIG_ATMEL_LCD)
-#include <atmel_lcdc.h>
-#endif
-
 #if defined(CONFIG_LCD_DT_SIMPLEFB)
 #include <libfdt.h>
 #endif
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [U-Boot] [PATCH 10/13] lcd: various cleanups
  2015-01-29 11:21 [U-Boot] [PATCH 00/13] common lcd refactor Nikita Kiryanov
                   ` (8 preceding siblings ...)
  2015-01-29 11:21 ` [U-Boot] [PATCH 09/13] lcd: remove unused includes Nikita Kiryanov
@ 2015-01-29 11:21 ` Nikita Kiryanov
  2015-01-31  0:24   ` Simon Glass
  2015-01-29 11:21 ` [U-Boot] [PATCH 11/13] lcd: rename bitmap_plot to better represent its functionality Nikita Kiryanov
                   ` (2 subsequent siblings)
  12 siblings, 1 reply; 34+ messages in thread
From: Nikita Kiryanov @ 2015-01-29 11:21 UTC (permalink / raw)
  To: u-boot

This cleanup mostly focuses on removing unnecessary whitespace and comments
which are superfluous and/or do not conform to the coding style.

Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il>
Cc: Simon Glass <sjg@chromium.org>
Cc: Anatolij Gustschin <agust@denx.de>
---
 common/lcd.c  |  90 +++++++++------------------------------------------
 include/lcd.h | 102 ++++++++++++++++++++--------------------------------------
 2 files changed, 49 insertions(+), 143 deletions(-)

diff --git a/common/lcd.c b/common/lcd.c
index 7a51923..06eec45 100644
--- a/common/lcd.c
+++ b/common/lcd.c
@@ -1,5 +1,5 @@
 /*
- * Common LCD routines for supported CPUs
+ * Common LCD routines
  *
  * (C) Copyright 2001-2002
  * Wolfgang Denk, DENX Software Engineering -- wd at denx.de
@@ -7,12 +7,7 @@
  * SPDX-License-Identifier:	GPL-2.0+
  */
 
-/************************************************************************/
-/* ** HEADER FILES							*/
-/************************************************************************/
-
 /* #define DEBUG */
-
 #include <config.h>
 #include <common.h>
 #include <command.h>
@@ -26,25 +21,18 @@
 #include <asm/io.h>
 #include <asm/unaligned.h>
 #include <fdt_support.h>
+#include <video_font.h>
 
 #if defined(CONFIG_LCD_DT_SIMPLEFB)
 #include <libfdt.h>
 #endif
 
-/************************************************************************/
-/* ** FONT DATA								*/
-/************************************************************************/
-#include <video_font.h>		/* Get font data, width and height	*/
-
-/************************************************************************/
-/* ** LOGO DATA								*/
-/************************************************************************/
 #ifdef CONFIG_LCD_LOGO
-# include <bmp_logo.h>		/* Get logo data, width and height	*/
-# include <bmp_logo_data.h>
-# if (CONSOLE_COLOR_WHITE >= BMP_LOGO_OFFSET) && (LCD_BPP != LCD_COLOR16)
-#  error Default Color Map overlaps with Logo Color Map
-# endif
+#include <bmp_logo.h>
+#include <bmp_logo_data.h>
+#if (CONSOLE_COLOR_WHITE >= BMP_LOGO_OFFSET) && (LCD_BPP != LCD_COLOR16)
+#error Default Color Map overlaps with Logo Color Map
+#endif
 #endif
 
 #ifdef CONFIG_SANDBOX
@@ -57,30 +45,23 @@
 
 #if (LCD_BPP != LCD_COLOR8) && (LCD_BPP != LCD_COLOR16) && \
 	(LCD_BPP != LCD_COLOR32)
-# error Unsupported LCD BPP.
+#error Unsupported LCD BPP.
 #endif
 
 DECLARE_GLOBAL_DATA_PTR;
 
 static int lcd_init(void *lcdbase);
-
 static void *lcd_logo(void);
-
 static void lcd_setfgcolor(int color);
 static void lcd_setbgcolor(int color);
 
 static int lcd_color_fg;
 static int lcd_color_bg;
 int lcd_line_length;
-
 char lcd_is_enabled = 0;
-
 static void *lcd_base;			/* Start of framebuffer memory	*/
-
 static char lcd_flush_dcache;	/* 1 to flush dcache after each lcd update */
 
-/************************************************************************/
-
 /* Flush LCD activity to the caches */
 void lcd_sync(void)
 {
@@ -110,8 +91,6 @@ void lcd_set_flush_dcache(int flush)
 	lcd_flush_dcache = (flush != 0);
 }
 
-/*----------------------------------------------------------------------*/
-
 static void lcd_stub_putc(struct stdio_dev *dev, const char c)
 {
 	lcd_putc(c);
@@ -122,9 +101,7 @@ static void lcd_stub_puts(struct stdio_dev *dev, const char *s)
 	lcd_puts(s);
 }
 
-/************************************************************************/
-/**  Small utility to check that you got the colours right		*/
-/************************************************************************/
+/* Small utility to check that you got the colours right */
 #ifdef LCD_TEST_PATTERN
 
 #define	N_BLK_VERT	2
@@ -158,10 +135,6 @@ static void test_pattern(void)
 }
 #endif /* LCD_TEST_PATTERN */
 
-
-/************************************************************************/
-/* ** GENERIC Initialization Routines					*/
-/************************************************************************/
 /*
  * With most lcd drivers the line length is set up
  * by calculating it from panel_info parameters. Some
@@ -181,7 +154,7 @@ int drv_lcd_init(void)
 
 	lcd_base = map_sysmem(gd->fb_base, 0);
 
-	lcd_init(lcd_base);		/* LCD initialization */
+	lcd_init(lcd_base);
 
 	/* Device initialization */
 	memset(&lcddev, 0, sizeof(lcddev));
@@ -197,7 +170,6 @@ int drv_lcd_init(void)
 	return (rc == 0) ? 1 : rc;
 }
 
-/*----------------------------------------------------------------------*/
 void lcd_clear(void)
 {
 	short console_rows, console_cols;
@@ -261,20 +233,11 @@ static int do_lcd_clear(cmd_tbl_t *cmdtp, int flag, int argc,
 	lcd_clear();
 	return 0;
 }
-
-U_BOOT_CMD(
-	cls,	1,	1,	do_lcd_clear,
-	"clear screen",
-	""
-);
-
-/*----------------------------------------------------------------------*/
+U_BOOT_CMD(cls,	1, 1, do_lcd_clear, "clear screen", "");
 
 static int lcd_init(void *lcdbase)
 {
-	/* Initialize the lcd controller */
 	debug("[LCD] Initializing LCD frambuffer at %p\n", lcdbase);
-
 	lcd_ctrl_init(lcdbase);
 
 	/*
@@ -304,10 +267,6 @@ static int lcd_init(void *lcdbase)
 	return 0;
 }
 
-
-/************************************************************************/
-/* ** ROM capable initialization part - needed to reserve FB memory	*/
-/************************************************************************/
 /*
  * This is called early in the system initialization to grab memory
  * for the LCD controller.
@@ -338,8 +297,6 @@ ulong lcd_setmem(ulong addr)
 	return addr;
 }
 
-/*----------------------------------------------------------------------*/
-
 static void lcd_setfgcolor(int color)
 {
 	lcd_color_fg = color;
@@ -350,8 +307,6 @@ int lcd_getfgcolor(void)
 	return lcd_color_fg;
 }
 
-/*----------------------------------------------------------------------*/
-
 static void lcd_setbgcolor(int color)
 {
 	lcd_color_bg = color;
@@ -362,10 +317,6 @@ int lcd_getbgcolor(void)
 	return lcd_color_bg;
 }
 
-/************************************************************************/
-/* ** Chipset depending Bitmap / Logo stuff...                          */
-/************************************************************************/
-
 #ifdef CONFIG_LCD_LOGO
 __weak void lcd_logo_set_cmap(void)
 {
@@ -379,17 +330,14 @@ __weak void lcd_logo_set_cmap(void)
 void bitmap_plot(int x, int y)
 {
 	ushort i, j;
-	uchar *bmap;
-	uchar *fb;
-	ushort *fb16;
+	uchar *bmap = &bmp_logo_bitmap[0];
 	unsigned bpix = NBITS(panel_info.vl_bpix);
+	uchar *fb = (uchar *)(lcd_base + y * lcd_line_length + x * bpix / 8);
+	ushort *fb16;
 
 	debug("Logo: width %d  height %d  colors %d\n",
 	      BMP_LOGO_WIDTH, BMP_LOGO_HEIGHT, BMP_LOGO_COLORS);
 
-	bmap = &bmp_logo_bitmap[0];
-	fb   = (uchar *)(lcd_base + y * lcd_line_length + x * bpix / 8);
-
 	if (bpix < 12) {
 		WATCHDOG_RESET();
 		lcd_logo_set_cmap();
@@ -424,13 +372,7 @@ void bitmap_plot(int x, int y)
 static inline void bitmap_plot(int x, int y) {}
 #endif /* CONFIG_LCD_LOGO */
 
-/*----------------------------------------------------------------------*/
 #if defined(CONFIG_CMD_BMP) || defined(CONFIG_SPLASH_SCREEN)
-/*
- * Display the BMP file located@address bmp_image.
- * Only uncompressed.
- */
-
 #ifdef CONFIG_SPLASH_SCREEN_ALIGN
 #define BMP_ALIGN_CENTER	0x7FFF
 
@@ -451,9 +393,7 @@ static void splash_align_axis(int *axis, unsigned long panel_size,
 }
 #endif
 
-
 #ifdef CONFIG_LCD_BMP_RLE8
-
 #define BMP_RLE8_ESCAPE		0
 #define BMP_RLE8_EOL		0
 #define BMP_RLE8_EOBMP		1
@@ -683,7 +623,7 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
 		(y + height - 1) * lcd_line_length + x * bpix / 8);
 
 	switch (bmp_bpix) {
-	case 1: /* pass through */
+	case 1:
 	case 8: {
 		cmap_base = configuration_get_cmap();
 #ifdef CONFIG_LCD_BMP_RLE8
diff --git a/include/lcd.h b/include/lcd.h
index 838f645..5f4d739 100644
--- a/include/lcd.h
+++ b/include/lcd.h
@@ -13,21 +13,19 @@
 #ifndef _LCD_H_
 #define _LCD_H_
 #include <lcd_console.h>
+#if defined(CONFIG_CMD_BMP) || defined(CONFIG_SPLASH_SCREEN)
+#include <bmp_layout.h>
+#include <asm/byteorder.h>
+#endif
 
 extern char lcd_is_enabled;
-
 extern int lcd_line_length;
-
 extern struct vidinfo panel_info;
 
 void lcd_ctrl_init(void *lcdbase);
 void lcd_enable(void);
-
-/* setcolreg used in 8bpp/16bpp; initcolregs used in monochrome */
 void lcd_setcolreg(ushort regno, ushort red, ushort green, ushort blue);
-void lcd_initcolregs(void);
 
-/* gunzip_bmp used if CONFIG_VIDEO_BMP_GZIP */
 struct bmp_image *gunzip_bmp(unsigned long addr, unsigned long *lenp,
 			     void **alloc_addr);
 int bmp_display(ulong addr, int x, int y);
@@ -57,11 +55,8 @@ ushort *configuration_get_cmap(void);
 typedef struct vidinfo {
 	ushort	vl_col;		/* Number of columns (i.e. 160) */
 	ushort	vl_row;		/* Number of rows (i.e. 100) */
-
 	u_char	vl_bpix;	/* Bits per pixel, 0 = 1 */
-
 	ushort	*cmap;		/* Pointer to the colormap */
-
 	void	*priv;		/* Pointer to driver-specific data */
 } vidinfo_t;
 
@@ -73,13 +68,11 @@ static inline ushort *configuration_get_cmap(void)
 
 extern vidinfo_t panel_info;
 
-/* Video functions */
-
-void	lcd_putc(const char c);
-void	lcd_puts(const char *s);
-void	lcd_printf(const char *fmt, ...);
-void	lcd_clear(void);
-int	lcd_display_bitmap(ulong bmp_image, int x, int y);
+void lcd_putc(const char c);
+void lcd_puts(const char *s);
+void lcd_printf(const char *fmt, ...);
+void lcd_clear(void);
+int lcd_display_bitmap(ulong bmp_image, int x, int y);
 
 /**
  * Get the width of the LCD in pixels
@@ -143,14 +136,6 @@ int lcd_dt_simplefb_enable_existing_node(void *blob);
 /* Update the LCD / flush the cache */
 void lcd_sync(void);
 
-/************************************************************************/
-/* ** BITMAP DISPLAY SUPPORT						*/
-/************************************************************************/
-#if defined(CONFIG_CMD_BMP) || defined(CONFIG_SPLASH_SCREEN)
-# include <bmp_layout.h>
-# include <asm/byteorder.h>
-#endif
-
 /*
  *  Information about displays we are using. This is for configuring
  *  the LCD controller and memory allocation. Someone has to know what
@@ -165,38 +150,32 @@ void lcd_sync(void);
 #define LCD_COLOR8	3
 #define LCD_COLOR16	4
 #define LCD_COLOR32	5
-/*----------------------------------------------------------------------*/
+
 #if defined(CONFIG_LCD_INFO_BELOW_LOGO)
-# define LCD_INFO_X		0
-# define LCD_INFO_Y		(BMP_LOGO_HEIGHT + VIDEO_FONT_HEIGHT)
+#define LCD_INFO_X		0
+#define LCD_INFO_Y		(BMP_LOGO_HEIGHT + VIDEO_FONT_HEIGHT)
 #elif defined(CONFIG_LCD_LOGO)
-# define LCD_INFO_X		(BMP_LOGO_WIDTH + 4 * VIDEO_FONT_WIDTH)
-# define LCD_INFO_Y		VIDEO_FONT_HEIGHT
+#define LCD_INFO_X		(BMP_LOGO_WIDTH + 4 * VIDEO_FONT_WIDTH)
+#define LCD_INFO_Y		VIDEO_FONT_HEIGHT
 #else
-# define LCD_INFO_X		VIDEO_FONT_WIDTH
-# define LCD_INFO_Y		VIDEO_FONT_HEIGHT
+#define LCD_INFO_X		VIDEO_FONT_WIDTH
+#define LCD_INFO_Y		VIDEO_FONT_HEIGHT
 #endif
 
 /* Default to 8bpp if bit depth not specified */
 #ifndef LCD_BPP
-# define LCD_BPP			LCD_COLOR8
+#define LCD_BPP			LCD_COLOR8
 #endif
+
 #ifndef LCD_DF
-# define LCD_DF			1
+#define LCD_DF			1
 #endif
 
 /* Calculate nr. of bits per pixel  and nr. of colors */
 #define NBITS(bit_code)		(1 << (bit_code))
 #define NCOLORS(bit_code)	(1 << NBITS(bit_code))
 
-/************************************************************************/
-/* ** CONSOLE CONSTANTS							*/
-/************************************************************************/
 #if LCD_BPP == LCD_COLOR8
-
-/*
- * 8bpp color definitions
- */
 # define CONSOLE_COLOR_BLACK	0
 # define CONSOLE_COLOR_RED	1
 # define CONSOLE_COLOR_GREEN	2
@@ -205,38 +184,25 @@ void lcd_sync(void);
 # define CONSOLE_COLOR_MAGENTA	5
 # define CONSOLE_COLOR_CYAN	6
 # define CONSOLE_COLOR_GREY	14
-# define CONSOLE_COLOR_WHITE	15	/* Must remain last / highest	*/
-
+# define CONSOLE_COLOR_WHITE	15		/* Must remain last / highest */
 #elif LCD_BPP == LCD_COLOR32
-/*
- * 32bpp color definitions
- */
-# define CONSOLE_COLOR_RED	0x00ff0000
-# define CONSOLE_COLOR_GREEN	0x0000ff00
-# define CONSOLE_COLOR_YELLOW	0x00ffff00
-# define CONSOLE_COLOR_BLUE	0x000000ff
-# define CONSOLE_COLOR_MAGENTA	0x00ff00ff
-# define CONSOLE_COLOR_CYAN	0x0000ffff
-# define CONSOLE_COLOR_GREY	0x00aaaaaa
-# define CONSOLE_COLOR_BLACK	0x00000000
-# define CONSOLE_COLOR_WHITE	0x00ffffff	/* Must remain last / highest*/
-# define NBYTES(bit_code)	(NBITS(bit_code) >> 3)
-
-#else
-
-/*
- * 16bpp color definitions
- */
-# define CONSOLE_COLOR_BLACK	0x0000
-# define CONSOLE_COLOR_WHITE	0xffff	/* Must remain last / highest	*/
-
+#define CONSOLE_COLOR_RED	0x00ff0000
+#define CONSOLE_COLOR_GREEN	0x0000ff00
+#define CONSOLE_COLOR_YELLOW	0x00ffff00
+#define CONSOLE_COLOR_BLUE	0x000000ff
+#define CONSOLE_COLOR_MAGENTA	0x00ff00ff
+#define CONSOLE_COLOR_CYAN	0x0000ffff
+#define CONSOLE_COLOR_GREY	0x00aaaaaa
+#define CONSOLE_COLOR_BLACK	0x00000000
+#define CONSOLE_COLOR_WHITE	0x00ffffff	/* Must remain last / highest */
+#define NBYTES(bit_code)	(NBITS(bit_code) >> 3)
+#else /* 16bpp color definitions */
+#define CONSOLE_COLOR_BLACK	0x0000
+#define CONSOLE_COLOR_WHITE	0xffff		/* Must remain last / highest */
 #endif /* color definitions */
 
-/************************************************************************/
 #ifndef PAGE_SIZE
-# define PAGE_SIZE	4096
+#define PAGE_SIZE	4096
 #endif
 
-/************************************************************************/
-
 #endif	/* _LCD_H_ */
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [U-Boot] [PATCH 11/13] lcd: rename bitmap_plot to better represent its functionality
  2015-01-29 11:21 [U-Boot] [PATCH 00/13] common lcd refactor Nikita Kiryanov
                   ` (9 preceding siblings ...)
  2015-01-29 11:21 ` [U-Boot] [PATCH 10/13] lcd: various cleanups Nikita Kiryanov
@ 2015-01-29 11:21 ` Nikita Kiryanov
  2015-01-31  0:25   ` Simon Glass
  2015-01-29 11:21 ` [U-Boot] [PATCH 12/13] lcd: dt: extract simplefb support Nikita Kiryanov
  2015-01-29 11:21 ` [U-Boot] [PATCH 13/13] lcd: split splash code into its own function Nikita Kiryanov
  12 siblings, 1 reply; 34+ messages in thread
From: Nikita Kiryanov @ 2015-01-29 11:21 UTC (permalink / raw)
  To: u-boot

The name "bitmap_plot" is misleading because it implies that this is a generic
function capable of dealing with any bitmap, but its implementation only works
with the logo data.

Rename the function to better reflect this.

Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il>
Cc: Simon Glass <sjg@chromium.org>
Cc: Anatolij Gustschin <agust@denx.de>
---
 common/lcd.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/common/lcd.c b/common/lcd.c
index 06eec45..2dce45c 100644
--- a/common/lcd.c
+++ b/common/lcd.c
@@ -327,7 +327,7 @@ __weak void lcd_logo_set_cmap(void)
 		*cmap++ = bmp_logo_palette[i];
 }
 
-void bitmap_plot(int x, int y)
+void lcd_logo_plot(int x, int y)
 {
 	ushort i, j;
 	uchar *bmap = &bmp_logo_bitmap[0];
@@ -369,7 +369,7 @@ void bitmap_plot(int x, int y)
 	lcd_sync();
 }
 #else
-static inline void bitmap_plot(int x, int y) {}
+static inline void lcd_logo_plot(int x, int y) {}
 #endif /* CONFIG_LCD_LOGO */
 
 #if defined(CONFIG_CMD_BMP) || defined(CONFIG_SPLASH_SCREEN)
@@ -729,7 +729,7 @@ static void *lcd_logo(void)
 	}
 #endif /* CONFIG_SPLASH_SCREEN */
 
-	bitmap_plot(0, 0);
+	lcd_logo_plot(0, 0);
 
 #ifdef CONFIG_LCD_INFO
 	lcd_set_col(LCD_INFO_X / VIDEO_FONT_WIDTH);
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [U-Boot] [PATCH 12/13] lcd: dt: extract simplefb support
  2015-01-29 11:21 [U-Boot] [PATCH 00/13] common lcd refactor Nikita Kiryanov
                   ` (10 preceding siblings ...)
  2015-01-29 11:21 ` [U-Boot] [PATCH 11/13] lcd: rename bitmap_plot to better represent its functionality Nikita Kiryanov
@ 2015-01-29 11:21 ` Nikita Kiryanov
  2015-01-29 17:14   ` Stephen Warren
  2015-01-31  0:25   ` Simon Glass
  2015-01-29 11:21 ` [U-Boot] [PATCH 13/13] lcd: split splash code into its own function Nikita Kiryanov
  12 siblings, 2 replies; 34+ messages in thread
From: Nikita Kiryanov @ 2015-01-29 11:21 UTC (permalink / raw)
  To: u-boot

We now have api functions that can support compiling simplefb code as its own
module. Since this code is not part of the display functionality, extract it
to its own file.

Raspberry Pi config file is updated to compile the new file.

Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il>
Cc: Simon Glass <sjg@chromium.org>
Cc: Anatolij Gustschin <agust@denx.de>
Cc: Stephen Warren <swarren@wwwdotorg.org>
---
 board/raspberrypi/rpi/rpi.c |  1 +
 common/Makefile             |  1 +
 common/lcd.c                | 50 --------------------------------------
 common/lcd_simplefb.c       | 59 +++++++++++++++++++++++++++++++++++++++++++++
 include/fdt_simplefb.h      | 14 +++++++++++
 include/lcd.h               |  3 ---
 6 files changed, 75 insertions(+), 53 deletions(-)
 create mode 100644 common/lcd_simplefb.c
 create mode 100644 include/fdt_simplefb.h

diff --git a/board/raspberrypi/rpi/rpi.c b/board/raspberrypi/rpi/rpi.c
index c18271f..948078b 100644
--- a/board/raspberrypi/rpi/rpi.c
+++ b/board/raspberrypi/rpi/rpi.c
@@ -18,6 +18,7 @@
 #include <config.h>
 #include <dm.h>
 #include <fdt_support.h>
+#include <fdt_simplefb.h>
 #include <lcd.h>
 #include <mmc.h>
 #include <asm/gpio.h>
diff --git a/common/Makefile b/common/Makefile
index 94554f2..24df0f7 100644
--- a/common/Makefile
+++ b/common/Makefile
@@ -197,6 +197,7 @@ obj-$(CONFIG_I2C_EDID) += edid.o
 obj-$(CONFIG_KALLSYMS) += kallsyms.o
 obj-y += splash.o
 obj-$(CONFIG_LCD) += lcd.o lcd_console.o
+obj-$(CONFIG_LCD_DT_SIMPLEFB) += lcd_simplefb.o
 obj-$(CONFIG_LYNXKDI) += lynxkdi.o
 obj-$(CONFIG_MENU) += menu.o
 obj-$(CONFIG_MODEM_SUPPORT) += modem.o
diff --git a/common/lcd.c b/common/lcd.c
index 2dce45c..d0c0aff 100644
--- a/common/lcd.c
+++ b/common/lcd.c
@@ -20,13 +20,8 @@
 #include <splash.h>
 #include <asm/io.h>
 #include <asm/unaligned.h>
-#include <fdt_support.h>
 #include <video_font.h>
 
-#if defined(CONFIG_LCD_DT_SIMPLEFB)
-#include <libfdt.h>
-#endif
-
 #ifdef CONFIG_LCD_LOGO
 #include <bmp_logo.h>
 #include <bmp_logo_data.h>
@@ -777,48 +772,3 @@ int lcd_get_pixel_height(void)
 {
 	return panel_info.vl_row;
 }
-
-#if defined(CONFIG_LCD_DT_SIMPLEFB)
-static int lcd_dt_simplefb_configure_node(void *blob, int off)
-{
-#if LCD_BPP == LCD_COLOR16
-	return fdt_setup_simplefb_node(blob, off, gd->fb_base,
-				       panel_info.vl_col, panel_info.vl_row,
-				       panel_info.vl_col * 2, "r5g6b5");
-#else
-	return -1;
-#endif
-}
-
-int lcd_dt_simplefb_add_node(void *blob)
-{
-	static const char compat[] = "simple-framebuffer";
-	static const char disabled[] = "disabled";
-	int off, ret;
-
-	off = fdt_add_subnode(blob, 0, "framebuffer");
-	if (off < 0)
-		return -1;
-
-	ret = fdt_setprop(blob, off, "status", disabled, sizeof(disabled));
-	if (ret < 0)
-		return -1;
-
-	ret = fdt_setprop(blob, off, "compatible", compat, sizeof(compat));
-	if (ret < 0)
-		return -1;
-
-	return lcd_dt_simplefb_configure_node(blob, off);
-}
-
-int lcd_dt_simplefb_enable_existing_node(void *blob)
-{
-	int off;
-
-	off = fdt_node_offset_by_compatible(blob, -1, "simple-framebuffer");
-	if (off < 0)
-		return -1;
-
-	return lcd_dt_simplefb_configure_node(blob, off);
-}
-#endif
diff --git a/common/lcd_simplefb.c b/common/lcd_simplefb.c
new file mode 100644
index 0000000..8db2add
--- /dev/null
+++ b/common/lcd_simplefb.c
@@ -0,0 +1,59 @@
+/*
+ * Simplefb device tree support
+ *
+ * (C) Copyright 2015
+ * Stephen Warren <swarren@wwwdotorg.org>
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#include <common.h>
+#include <lcd.h>
+#include <fdt_support.h>
+#include <libfdt.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+static int lcd_dt_simplefb_configure_node(void *blob, int off)
+{
+#if LCD_BPP == LCD_COLOR16
+	int vl_col = lcd_get_pixel_width();
+	int vl_row = lcd_get_pixel_height();
+	return fdt_setup_simplefb_node(blob, off, gd->fb_base, vl_col, vl_row,
+				       vl_col * 2, "r5g6b5");
+#else
+	return -1;
+#endif
+}
+
+int lcd_dt_simplefb_add_node(void *blob)
+{
+	static const char compat[] = "simple-framebuffer";
+	static const char disabled[] = "disabled";
+	int off, ret;
+
+	off = fdt_add_subnode(blob, 0, "framebuffer");
+	if (off < 0)
+		return -1;
+
+	ret = fdt_setprop(blob, off, "status", disabled, sizeof(disabled));
+	if (ret < 0)
+		return -1;
+
+	ret = fdt_setprop(blob, off, "compatible", compat, sizeof(compat));
+	if (ret < 0)
+		return -1;
+
+	return lcd_dt_simplefb_configure_node(blob, off);
+}
+
+int lcd_dt_simplefb_enable_existing_node(void *blob)
+{
+	int off;
+
+	off = fdt_node_offset_by_compatible(blob, -1, "simple-framebuffer");
+	if (off < 0)
+		return -1;
+
+	return lcd_dt_simplefb_configure_node(blob, off);
+}
diff --git a/include/fdt_simplefb.h b/include/fdt_simplefb.h
new file mode 100644
index 0000000..8c89a19
--- /dev/null
+++ b/include/fdt_simplefb.h
@@ -0,0 +1,14 @@
+/*
+ * Simplefb device tree support
+ *
+ * (C) Copyright 2015
+ * Stephen Warren <swarren@wwwdotorg.org>
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#ifndef _FDT_SIMPLEFB_H_
+#define _FDT_SIMPLEFB_H_
+int lcd_dt_simplefb_add_node(void *blob);
+int lcd_dt_simplefb_enable_existing_node(void *blob);
+#endif
diff --git a/include/lcd.h b/include/lcd.h
index 5f4d739..9d1b2d8 100644
--- a/include/lcd.h
+++ b/include/lcd.h
@@ -130,9 +130,6 @@ void lcd_show_board_info(void);
 /* Return the size of the LCD frame buffer, and the line length */
 int lcd_get_size(int *line_length);
 
-int lcd_dt_simplefb_add_node(void *blob);
-int lcd_dt_simplefb_enable_existing_node(void *blob);
-
 /* Update the LCD / flush the cache */
 void lcd_sync(void);
 
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [U-Boot] [PATCH 13/13] lcd: split splash code into its own function
  2015-01-29 11:21 [U-Boot] [PATCH 00/13] common lcd refactor Nikita Kiryanov
                   ` (11 preceding siblings ...)
  2015-01-29 11:21 ` [U-Boot] [PATCH 12/13] lcd: dt: extract simplefb support Nikita Kiryanov
@ 2015-01-29 11:21 ` Nikita Kiryanov
  2015-01-31  0:25   ` Simon Glass
  12 siblings, 1 reply; 34+ messages in thread
From: Nikita Kiryanov @ 2015-01-29 11:21 UTC (permalink / raw)
  To: u-boot

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 <nikita@compulab.co.il>
Cc: Bo Shen <voice.shen@atmel.com>
Cc: Simon Glass <sjg@chromium.org>
Cc: Anatolij Gustschin <agust@denx.de>
---
 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);
+#endif
 	lcd_sync();
 }
 
@@ -701,29 +720,8 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
 }
 #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);
 
 #ifdef CONFIG_LCD_INFO
@@ -731,12 +729,6 @@ static void *lcd_logo(void)
 	lcd_set_row(LCD_INFO_Y / VIDEO_FONT_HEIGHT);
 	lcd_show_board_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
diff --git a/common/splash.c b/common/splash.c
index 144fb10..561d35b 100644
--- a/common/splash.c
+++ b/common/splash.c
@@ -22,6 +22,7 @@
 
 #include <common.h>
 #include <splash.h>
+#include <lcd.h>
 
 __weak int splash_screen_prepare(void)
 {
@@ -50,3 +51,18 @@ void splash_get_pos(int *x, int *y)
 	}
 }
 #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
diff --git a/include/splash.h b/include/splash.h
index 89ee7b2..4dbf754 100644
--- a/include/splash.h
+++ b/include/splash.h
@@ -21,7 +21,7 @@
 
 #ifndef _SPLASH_H_
 #define _SPLASH_H_
-
+#include <errno.h>
 
 int splash_screen_prepare(void);
 
@@ -31,6 +31,15 @@ void splash_get_pos(int *x, int *y);
 static inline void splash_get_pos(int *x, int *y) { }
 #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
 
 #endif
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 34+ messages in thread

* [U-Boot] [PATCH 12/13] lcd: dt: extract simplefb support
  2015-01-29 11:21 ` [U-Boot] [PATCH 12/13] lcd: dt: extract simplefb support Nikita Kiryanov
@ 2015-01-29 17:14   ` Stephen Warren
  2015-02-01 13:58     ` Nikita Kiryanov
  2015-01-31  0:25   ` Simon Glass
  1 sibling, 1 reply; 34+ messages in thread
From: Stephen Warren @ 2015-01-29 17:14 UTC (permalink / raw)
  To: u-boot

On 01/29/2015 04:21 AM, Nikita Kiryanov wrote:
> We now have api functions that can support compiling simplefb code as its own
> module. Since this code is not part of the display functionality, extract it
> to its own file.
>
> Raspberry Pi config file is updated to compile the new file.

I don't see any config file updates. I think one isn't needed, since the 
config file must already have CONFIG_LCD_DT_SIMPLEFB enabled, since the 
existing code is under that ifdef.

Acked-by: Stephen Warren <swarren@wwwdotorg.org>

^ permalink raw reply	[flat|nested] 34+ messages in thread

* [U-Boot] [PATCH 01/13] lcd: move platform specific structs to their own headers
  2015-01-29 11:21 ` [U-Boot] [PATCH 01/13] lcd: move platform specific structs to their own headers Nikita Kiryanov
@ 2015-01-31  0:24   ` Simon Glass
  0 siblings, 0 replies; 34+ messages in thread
From: Simon Glass @ 2015-01-31  0:24 UTC (permalink / raw)
  To: u-boot

Hi Nikita,

On 29 January 2015 at 04:21, Nikita Kiryanov <nikita@compulab.co.il> wrote:
> common/lcd code is full of platform specific code and definitions, which
> ideally should reside with the respective driver code. Take a step towards that
> goal by moving platform specific structs from lcd.h to their own header files.
>
> The structs for the generic case (the #else for all the platform specific
> cases) is retained in lcd.h as the default case.

platform-specific (i.e. add a hypen)

>
> Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il>
> Cc: Bo Shen <voice.shen@atmel.com>
> Cc: Simon Glass <sjg@chromium.org>
> Cc: Anatolij Gustschin <agust@denx.de>
> ---
>  include/atmel_lcd.h  |  38 ++++++++++
>  include/exynos_lcd.h |  81 +++++++++++++++++++++
>  include/lcd.h        | 201 ++-------------------------------------------------
>  include/mpc823_lcd.h |  43 +++++++++++
>  include/pxa_lcd.h    |  80 ++++++++++++++++++++
>  5 files changed, 247 insertions(+), 196 deletions(-)
>  create mode 100644 include/atmel_lcd.h
>  create mode 100644 include/exynos_lcd.h
>  create mode 100644 include/mpc823_lcd.h
>  create mode 100644 include/pxa_lcd.h

Reviewed-by: Simon Glass <sjg@chromium.org>

^ permalink raw reply	[flat|nested] 34+ messages in thread

* [U-Boot] [PATCH 02/13] lcd: split configuration_get_cmap
  2015-01-29 11:21 ` [U-Boot] [PATCH 02/13] lcd: split configuration_get_cmap Nikita Kiryanov
@ 2015-01-31  0:24   ` Simon Glass
  2015-02-01 17:02     ` Nikita Kiryanov
  0 siblings, 1 reply; 34+ messages in thread
From: Simon Glass @ 2015-01-31  0:24 UTC (permalink / raw)
  To: u-boot

Hi Nikita,

On 29 January 2015 at 04:21, Nikita Kiryanov <nikita@compulab.co.il> wrote:
> configuration_get_cmap() is multiple platform specific functions stuffed into
> one function. Split it into multiple versions, and move each version to the
> appropriate driver to reduce the #ifdef complexity.
>
> Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il>
> Cc: Bo Shen <voice.shen@atmel.com>
> Cc: Simon Glass <sjg@chromium.org>
> Cc: Anatolij Gustschin <agust@denx.de>
> ---
>  common/lcd.c                 | 19 -------------------
>  drivers/video/atmel_hlcdfb.c | 13 +++++++++++++
>  drivers/video/atmel_lcdfb.c  |  5 +++++
>  drivers/video/exynos_fb.c    |  9 +++++++++
>  drivers/video/mpc8xx_lcd.c   |  7 +++++++
>  drivers/video/pxa_lcd.c      |  6 ++++++
>  include/lcd.h                |  9 +++++++++
>  7 files changed, 49 insertions(+), 19 deletions(-)

Reviewed-by: Simon Glass <sjg@chromium.org>

See suggestion below.

[snip]
> diff --git a/include/lcd.h b/include/lcd.h
> index fbba6a2..838f645 100644
> --- a/include/lcd.h
> +++ b/include/lcd.h
> @@ -42,13 +42,17 @@ void lcd_set_flush_dcache(int flush);
>
>  #if defined CONFIG_MPC823
>  #include <mpc823_lcd.h>
> +ushort *configuration_get_cmap(void);
>  #elif defined(CONFIG_CPU_PXA25X) || defined(CONFIG_CPU_PXA27X) || \
>         defined CONFIG_CPU_MONAHANS
>  #include <pxa_lcd.h>
> +ushort *configuration_get_cmap(void);
>  #elif defined(CONFIG_ATMEL_LCD) || defined(CONFIG_ATMEL_HLCD)
>  #include <atmel_lcd.h>
> +ushort *configuration_get_cmap(void);
>  #elif defined(CONFIG_EXYNOS_FB)
>  #include <exynos_lcd.h>
> +ushort *configuration_get_cmap(void);
>  #else
>  typedef struct vidinfo {
>         ushort  vl_col;         /* Number of columns (i.e. 160) */
> @@ -60,6 +64,11 @@ typedef struct vidinfo {
>
>         void    *priv;          /* Pointer to driver-specific data */
>  } vidinfo_t;
> +
> +static inline ushort *configuration_get_cmap(void)
> +{
> +       return panel_info.cmap;
> +}
>  #endif

I'd argue for dropping the inline version and just having the same
prototype in each case.

Regards,
Simon

^ permalink raw reply	[flat|nested] 34+ messages in thread

* [U-Boot] [PATCH 03/13] lcd: atmel: move atmel specific fb_put_word to atmel_lcdfb
  2015-01-29 11:21 ` [U-Boot] [PATCH 03/13] lcd: atmel: move atmel specific fb_put_word to atmel_lcdfb Nikita Kiryanov
@ 2015-01-31  0:24   ` Simon Glass
  0 siblings, 0 replies; 34+ messages in thread
From: Simon Glass @ 2015-01-31  0:24 UTC (permalink / raw)
  To: u-boot

On 29 January 2015 at 04:21, Nikita Kiryanov <nikita@compulab.co.il> wrote:
> Reduce the amount of platform dependant code in common/lcd.c by moving Atmel
> specific implementation of fb_put_word() to atmel_lcdfb.c. Since we must also
> have a default implementation for everybody else, make the remainder of the
> code into a weak function.
>
> Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il>
> Cc: Bo Shen <voice.shen@atmel.com>
> Cc: Simon Glass <sjg@chromium.org>
> Cc: Anatolij Gustschin <agust@denx.de>
> ---
>  common/lcd.c                | 11 +----------
>  drivers/video/atmel_lcdfb.c |  9 +++++++++
>  2 files changed, 10 insertions(+), 10 deletions(-)

Reviewed-by: Simon Glass <sjg@chromium.org>

^ permalink raw reply	[flat|nested] 34+ messages in thread

* [U-Boot] [PATCH 04/13] lcd: mpc8xx: move mpc823 specific fb_put_byte to mpc8xx_lcd.c
  2015-01-29 11:21 ` [U-Boot] [PATCH 04/13] lcd: mpc8xx: move mpc823 specific fb_put_byte to mpc8xx_lcd.c Nikita Kiryanov
@ 2015-01-31  0:24   ` Simon Glass
  0 siblings, 0 replies; 34+ messages in thread
From: Simon Glass @ 2015-01-31  0:24 UTC (permalink / raw)
  To: u-boot

On 29 January 2015 at 04:21, Nikita Kiryanov <nikita@compulab.co.il> wrote:
> Reduce the amount of platform dependant code in common/lcd.c by moving MPC823
> specific implementation of fb_put_byte() to mpc8xx_lcd.c. Since we must also
> have a default implementation for everybody else, make the remainder of the
> code into a weak function.
>
> Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il>
> Cc: Simon Glass <sjg@chromium.org>
> Cc: Anatolij Gustschin <agust@denx.de>
> ---
>  common/lcd.c               | 11 +++++------
>  drivers/video/mpc8xx_lcd.c |  7 +++++++
>  2 files changed, 12 insertions(+), 6 deletions(-)

Reviewed-by: Simon Glass <sjg@chromium.org>

^ permalink raw reply	[flat|nested] 34+ messages in thread

* [U-Boot] [PATCH 05/13] lcd: atmel: introduce lcd_logo_set_cmap
  2015-01-29 11:21 ` [U-Boot] [PATCH 05/13] lcd: atmel: introduce lcd_logo_set_cmap Nikita Kiryanov
@ 2015-01-31  0:24   ` Simon Glass
  0 siblings, 0 replies; 34+ messages in thread
From: Simon Glass @ 2015-01-31  0:24 UTC (permalink / raw)
  To: u-boot

On 29 January 2015 at 04:21, Nikita Kiryanov <nikita@compulab.co.il> wrote:
> Reduce the bitmap_plot #ifdef complexity by extracting Atmel specific code for
> setting cmap into a new function lcd_logo_set_cmap(), which is implemented in
> atmel_lcdfb driver and defined as part of common/lcd.c api with a weak dummy
> version. In the Atmel implementation, ARRAY_SIZE(bmp_logo_palette) is
> switched for BMP_LOGO_COLORS to avoid having to include bmp_logo_data.h, which
> would cause a compilation error because the logo data and palette arrays would
> be defined twice.
>
> This is a step towards cleaning bitmap_plot() of platform specific code.
>
> Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il>
> Cc: Bo Shen <voice.shen@atmel.com>
> Cc: Simon Glass <sjg@chromium.org>
> Cc: Anatolij Gustschin <agust@denx.de>
> ---
>  common/lcd.c                | 29 ++++++++---------------------
>  drivers/video/atmel_lcdfb.c | 26 ++++++++++++++++++++++++++
>  2 files changed, 34 insertions(+), 21 deletions(-)

Reviewed-by: Simon Glass <sjg@chromium.org>

^ permalink raw reply	[flat|nested] 34+ messages in thread

* [U-Boot] [PATCH 06/13] lcd: mpc823: move mpc823 specific lcd_logo_set_cmap code to mpc8xx_lcd.c
  2015-01-29 11:21 ` [U-Boot] [PATCH 06/13] lcd: mpc823: move mpc823 specific lcd_logo_set_cmap code to mpc8xx_lcd.c Nikita Kiryanov
@ 2015-01-31  0:24   ` Simon Glass
  0 siblings, 0 replies; 34+ messages in thread
From: Simon Glass @ 2015-01-31  0:24 UTC (permalink / raw)
  To: u-boot

On 29 January 2015 at 04:21, Nikita Kiryanov <nikita@compulab.co.il> wrote:
> Reduce the bitmap_plot #ifdef complexity by extracting MPC823 specific code for
> setting cmap into its own implementation of lcd_logo_set_cmap(), implemented in
> mpc8xx_lcd.c. In the MPC823 implementation, ARRAY_SIZE(bmp_logo_palette) is
> switched for BMP_LOGO_COLORS to avoid having to include bmp_logo_data.h, which
> would cause a compilation error because the logo data and palette arrays would
> be defined twice.
>
> Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il>
> Cc: Simon Glass <sjg@chromium.org>
> Cc: Anatolij Gustschin <agust@denx.de>
> ---
>  common/lcd.c               | 10 +---------
>  drivers/video/mpc8xx_lcd.c | 15 +++++++++++++++
>  2 files changed, 16 insertions(+), 9 deletions(-)

Reviewed-by: Simon Glass <sjg@chromium.org>

^ permalink raw reply	[flat|nested] 34+ messages in thread

* [U-Boot] [PATCH 07/13] lcd: logo: move generic cmap setting to lcd_logo_set_cmap()
  2015-01-29 11:21 ` [U-Boot] [PATCH 07/13] lcd: logo: move generic cmap setting to lcd_logo_set_cmap() Nikita Kiryanov
@ 2015-01-31  0:24   ` Simon Glass
  0 siblings, 0 replies; 34+ messages in thread
From: Simon Glass @ 2015-01-31  0:24 UTC (permalink / raw)
  To: u-boot

On 29 January 2015 at 04:21, Nikita Kiryanov <nikita@compulab.co.il> wrote:
> Get rid of platform specific #ifdefs in bitmap_plot() by moving the generic
> case of setting cmap into the weak lcd_logo_set_cmap().
>
> Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il>
> Cc: Bo Shen <voice.shen@atmel.com>
> Cc: Simon Glass <sjg@chromium.org>
> Cc: Anatolij Gustschin <agust@denx.de>
> ---
>  common/lcd.c | 28 +++++++---------------------
>  1 file changed, 7 insertions(+), 21 deletions(-)

Reviewed-by: Simon Glass <sjg@chromium.org>

^ permalink raw reply	[flat|nested] 34+ messages in thread

* [U-Boot] [PATCH 08/13] lcd: introduce lcd_set_cmap
  2015-01-29 11:21 ` [U-Boot] [PATCH 08/13] lcd: introduce lcd_set_cmap Nikita Kiryanov
@ 2015-01-31  0:24   ` Simon Glass
  0 siblings, 0 replies; 34+ messages in thread
From: Simon Glass @ 2015-01-31  0:24 UTC (permalink / raw)
  To: u-boot

On 29 January 2015 at 04:21, Nikita Kiryanov <nikita@compulab.co.il> wrote:
> Reduce the lcd_display_bitmap #ifdef complexity by extracting Atmel specific
> code for setting cmap for bitmap images into a new function lcd_set_cmap().
> A default version is implemented with the remainder of the code.
>
> Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il>
> Cc: Bo Shen <voice.shen@atmel.com>
> Cc: Simon Glass <sjg@chromium.org>
> Cc: Anatolij Gustschin <agust@denx.de>
> ---
>  common/lcd.c                | 46 ++++++++++++++++++++++-----------------------
>  drivers/video/atmel_lcdfb.c | 11 +++++++++++
>  2 files changed, 33 insertions(+), 24 deletions(-)

I *think* I understand this...

Reviewed-by: Simon Glass <sjg@chromium.org>

^ permalink raw reply	[flat|nested] 34+ messages in thread

* [U-Boot] [PATCH 09/13] lcd: remove unused includes
  2015-01-29 11:21 ` [U-Boot] [PATCH 09/13] lcd: remove unused includes Nikita Kiryanov
@ 2015-01-31  0:24   ` Simon Glass
  0 siblings, 0 replies; 34+ messages in thread
From: Simon Glass @ 2015-01-31  0:24 UTC (permalink / raw)
  To: u-boot

On 29 January 2015 at 04:21, Nikita Kiryanov <nikita@compulab.co.il> wrote:
> Remove unused includes.
>
> Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il>
> Cc: Bo Shen <voice.shen@atmel.com>
> Cc: Simon Glass <sjg@chromium.org>
> Cc: Anatolij Gustschin <agust@denx.de>
> ---
>  common/lcd.c | 18 ------------------
>  1 file changed, 18 deletions(-)

Reviewed-by: Simon Glass <sjg@chromium.org>

^ permalink raw reply	[flat|nested] 34+ messages in thread

* [U-Boot] [PATCH 10/13] lcd: various cleanups
  2015-01-29 11:21 ` [U-Boot] [PATCH 10/13] lcd: various cleanups Nikita Kiryanov
@ 2015-01-31  0:24   ` Simon Glass
  0 siblings, 0 replies; 34+ messages in thread
From: Simon Glass @ 2015-01-31  0:24 UTC (permalink / raw)
  To: u-boot

On 29 January 2015 at 04:21, Nikita Kiryanov <nikita@compulab.co.il> wrote:
> This cleanup mostly focuses on removing unnecessary whitespace and comments
> which are superfluous and/or do not conform to the coding style.
>
> Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il>
> Cc: Simon Glass <sjg@chromium.org>
> Cc: Anatolij Gustschin <agust@denx.de>
> ---
>  common/lcd.c  |  90 +++++++++------------------------------------------
>  include/lcd.h | 102 ++++++++++++++++++++--------------------------------------
>  2 files changed, 49 insertions(+), 143 deletions(-)

Reviewed-by: Simon Glass <sjg@chromium.org>

Optional comment below.

>
> diff --git a/common/lcd.c b/common/lcd.c
> index 7a51923..06eec45 100644
> --- a/common/lcd.c
> +++ b/common/lcd.c

> @@ -379,17 +330,14 @@ __weak void lcd_logo_set_cmap(void)
>  void bitmap_plot(int x, int y)
>  {
>         ushort i, j;
> -       uchar *bmap;
> -       uchar *fb;
> -       ushort *fb16;
> +       uchar *bmap = &bmp_logo_bitmap[0];
>         unsigned bpix = NBITS(panel_info.vl_bpix);
> +       uchar *fb = (uchar *)(lcd_base + y * lcd_line_length + x * bpix / 8);

I don't thing it's better to attach these to the declaration. Personal
preference though, it's up to you.

> +       ushort *fb16;
>
>         debug("Logo: width %d  height %d  colors %d\n",
>               BMP_LOGO_WIDTH, BMP_LOGO_HEIGHT, BMP_LOGO_COLORS);
>
> -       bmap = &bmp_logo_bitmap[0];
> -       fb   = (uchar *)(lcd_base + y * lcd_line_length + x * bpix / 8);
> -
>         if (bpix < 12) {
>                 WATCHDOG_RESET();
>                 lcd_logo_set_cmap();

Regards,
Simon

^ permalink raw reply	[flat|nested] 34+ messages in thread

* [U-Boot] [PATCH 11/13] lcd: rename bitmap_plot to better represent its functionality
  2015-01-29 11:21 ` [U-Boot] [PATCH 11/13] lcd: rename bitmap_plot to better represent its functionality Nikita Kiryanov
@ 2015-01-31  0:25   ` Simon Glass
  0 siblings, 0 replies; 34+ messages in thread
From: Simon Glass @ 2015-01-31  0:25 UTC (permalink / raw)
  To: u-boot

On 29 January 2015 at 04:21, Nikita Kiryanov <nikita@compulab.co.il> wrote:
> The name "bitmap_plot" is misleading because it implies that this is a generic
> function capable of dealing with any bitmap, but its implementation only works
> with the logo data.
>
> Rename the function to better reflect this.
>
> Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il>
> Cc: Simon Glass <sjg@chromium.org>
> Cc: Anatolij Gustschin <agust@denx.de>
> ---
>  common/lcd.c | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)

Reviewed-by: Simon Glass <sjg@chromium.org>

^ permalink raw reply	[flat|nested] 34+ messages in thread

* [U-Boot] [PATCH 12/13] lcd: dt: extract simplefb support
  2015-01-29 11:21 ` [U-Boot] [PATCH 12/13] lcd: dt: extract simplefb support Nikita Kiryanov
  2015-01-29 17:14   ` Stephen Warren
@ 2015-01-31  0:25   ` Simon Glass
  2015-02-01 13:56     ` Nikita Kiryanov
  1 sibling, 1 reply; 34+ messages in thread
From: Simon Glass @ 2015-01-31  0:25 UTC (permalink / raw)
  To: u-boot

On 29 January 2015 at 04:21, Nikita Kiryanov <nikita@compulab.co.il> wrote:
> We now have api functions that can support compiling simplefb code as its own
> module. Since this code is not part of the display functionality, extract it
> to its own file.
>
> Raspberry Pi config file is updated to compile the new file.
>
> Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il>
> Cc: Simon Glass <sjg@chromium.org>
> Cc: Anatolij Gustschin <agust@denx.de>
> Cc: Stephen Warren <swarren@wwwdotorg.org>

Reviewed-by: Simon Glass <sjg@chromium.org>

Could even go in fdtdec.c if you like.

> ---
>  board/raspberrypi/rpi/rpi.c |  1 +
>  common/Makefile             |  1 +
>  common/lcd.c                | 50 --------------------------------------
>  common/lcd_simplefb.c       | 59 +++++++++++++++++++++++++++++++++++++++++++++
>  include/fdt_simplefb.h      | 14 +++++++++++
>  include/lcd.h               |  3 ---
>  6 files changed, 75 insertions(+), 53 deletions(-)
>  create mode 100644 common/lcd_simplefb.c
>  create mode 100644 include/fdt_simplefb.h

^ permalink raw reply	[flat|nested] 34+ messages in thread

* [U-Boot] [PATCH 13/13] lcd: split splash code into its own function
  2015-01-29 11:21 ` [U-Boot] [PATCH 13/13] lcd: split splash code into its own function Nikita Kiryanov
@ 2015-01-31  0:25   ` Simon Glass
  2015-02-01 13:59     ` Nikita Kiryanov
  0 siblings, 1 reply; 34+ messages in thread
From: Simon Glass @ 2015-01-31  0:25 UTC (permalink / raw)
  To: u-boot

Hi Nikita,

On 29 January 2015 at 04:21, Nikita Kiryanov <nikita@compulab.co.il> 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 <nikita@compulab.co.il>
> Cc: Bo Shen <voice.shen@atmel.com>
> Cc: Simon Glass <sjg@chromium.org>
> Cc: Anatolij Gustschin <agust@denx.de>
> ---
>  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?

> +#endif
>         lcd_sync();
>  }
>
> @@ -701,29 +720,8 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
>  }
>  #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);
>
>  #ifdef CONFIG_LCD_INFO
> @@ -731,12 +729,6 @@ static void *lcd_logo(void)
>         lcd_set_row(LCD_INFO_Y / VIDEO_FONT_HEIGHT);
>         lcd_show_board_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
> diff --git a/common/splash.c b/common/splash.c
> index 144fb10..561d35b 100644
> --- a/common/splash.c
> +++ b/common/splash.c
> @@ -22,6 +22,7 @@
>
>  #include <common.h>
>  #include <splash.h>
> +#include <lcd.h>
>
>  __weak int splash_screen_prepare(void)
>  {
> @@ -50,3 +51,18 @@ void splash_get_pos(int *x, int *y)
>         }
>  }
>  #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
> diff --git a/include/splash.h b/include/splash.h
> index 89ee7b2..4dbf754 100644
> --- a/include/splash.h
> +++ b/include/splash.h
> @@ -21,7 +21,7 @@
>
>  #ifndef _SPLASH_H_
>  #define _SPLASH_H_
> -
> +#include <errno.h>
>
>  int splash_screen_prepare(void);
>
> @@ -31,6 +31,15 @@ void splash_get_pos(int *x, int *y);
>  static inline void splash_get_pos(int *x, int *y) { }
>  #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
>
>  #endif
> --
> 1.9.1
>

Regards,
SImon

^ permalink raw reply	[flat|nested] 34+ messages in thread

* [U-Boot] [PATCH 12/13] lcd: dt: extract simplefb support
  2015-01-31  0:25   ` Simon Glass
@ 2015-02-01 13:56     ` Nikita Kiryanov
  0 siblings, 0 replies; 34+ messages in thread
From: Nikita Kiryanov @ 2015-02-01 13:56 UTC (permalink / raw)
  To: u-boot

Hi Simon,

On 01/31/2015 02:25 AM, Simon Glass wrote:
> On 29 January 2015 at 04:21, Nikita Kiryanov <nikita@compulab.co.il> wrote:
>> We now have api functions that can support compiling simplefb code as its own
>> module. Since this code is not part of the display functionality, extract it
>> to its own file.
>>
>> Raspberry Pi config file is updated to compile the new file.
>>
>> Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il>
>> Cc: Simon Glass <sjg@chromium.org>
>> Cc: Anatolij Gustschin <agust@denx.de>
>> Cc: Stephen Warren <swarren@wwwdotorg.org>
>
> Reviewed-by: Simon Glass <sjg@chromium.org>
>
> Could even go in fdtdec.c if you like.

Hmm... I'm a little torn, but in the long term I think it's better to keep
subsystem-specific fdt code in separate files, because otherwise fdtdec.c will
eventually grow to enormous proportions.

>
>> ---
>>   board/raspberrypi/rpi/rpi.c |  1 +
>>   common/Makefile             |  1 +
>>   common/lcd.c                | 50 --------------------------------------
>>   common/lcd_simplefb.c       | 59 +++++++++++++++++++++++++++++++++++++++++++++
>>   include/fdt_simplefb.h      | 14 +++++++++++
>>   include/lcd.h               |  3 ---
>>   6 files changed, 75 insertions(+), 53 deletions(-)
>>   create mode 100644 common/lcd_simplefb.c
>>   create mode 100644 include/fdt_simplefb.h

-- 
Regards,
Nikita Kiryanov

^ permalink raw reply	[flat|nested] 34+ messages in thread

* [U-Boot] [PATCH 12/13] lcd: dt: extract simplefb support
  2015-01-29 17:14   ` Stephen Warren
@ 2015-02-01 13:58     ` Nikita Kiryanov
  0 siblings, 0 replies; 34+ messages in thread
From: Nikita Kiryanov @ 2015-02-01 13:58 UTC (permalink / raw)
  To: u-boot

Hi Stephen,

On 01/29/2015 07:14 PM, Stephen Warren wrote:
> On 01/29/2015 04:21 AM, Nikita Kiryanov wrote:
>> We now have api functions that can support compiling simplefb code as its own
>> module. Since this code is not part of the display functionality, extract it
>> to its own file.
>>
>> Raspberry Pi config file is updated to compile the new file.
>
> I don't see any config file updates. I think one isn't needed, since the config file must already have CONFIG_LCD_DT_SIMPLEFB enabled, since the existing code is under that ifdef.

Yes that was a poor choice of words on my part. Should have been something like "...is updated to accommodate the changes". I'll fix it in a V2.

>
> Acked-by: Stephen Warren <swarren@wwwdotorg.org>
>

-- 
Regards,
Nikita Kiryanov

^ permalink raw reply	[flat|nested] 34+ messages in thread

* [U-Boot] [PATCH 13/13] lcd: split splash code into its own function
  2015-01-31  0:25   ` Simon Glass
@ 2015-02-01 13:59     ` Nikita Kiryanov
  2015-02-01 16:25       ` Simon Glass
  0 siblings, 1 reply; 34+ messages in thread
From: Nikita Kiryanov @ 2015-02-01 13:59 UTC (permalink / raw)
  To: u-boot

Hi Simon,

On 01/31/2015 02:25 AM, Simon Glass wrote:
> Hi Nikita,
>
> On 29 January 2015 at 04:21, Nikita Kiryanov <nikita@compulab.co.il> 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 <nikita@compulab.co.il>
>> Cc: Bo Shen <voice.shen@atmel.com>
>> Cc: Simon Glass <sjg@chromium.org>
>> Cc: Anatolij Gustschin <agust@denx.de>
>> ---
>>   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

^ permalink raw reply	[flat|nested] 34+ messages in thread

* [U-Boot] [PATCH 13/13] lcd: split splash code into its own function
  2015-02-01 13:59     ` Nikita Kiryanov
@ 2015-02-01 16:25       ` Simon Glass
  0 siblings, 0 replies; 34+ messages in thread
From: Simon Glass @ 2015-02-01 16:25 UTC (permalink / raw)
  To: u-boot

Hi NIkita,

On 1 February 2015 at 06:59, Nikita Kiryanov <nikita@compulab.co.il> wrote:
> Hi Simon,
>
>
> On 01/31/2015 02:25 AM, Simon Glass wrote:
>>
>> Hi Nikita,
>>
>> On 29 January 2015 at 04:21, Nikita Kiryanov <nikita@compulab.co.il>
>> 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 <nikita@compulab.co.il>
>>> Cc: Bo Shen <voice.shen@atmel.com>
>>> Cc: Simon Glass <sjg@chromium.org>
>>> Cc: Anatolij Gustschin <agust@denx.de>
>>> ---
>>>   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().

OK I see, thanks.

Reviewed-by: Simon Glass <sjg@chromium.org>

Regards,
Simon

^ permalink raw reply	[flat|nested] 34+ messages in thread

* [U-Boot] [PATCH 02/13] lcd: split configuration_get_cmap
  2015-01-31  0:24   ` Simon Glass
@ 2015-02-01 17:02     ` Nikita Kiryanov
  2015-02-01 17:14       ` Simon Glass
  0 siblings, 1 reply; 34+ messages in thread
From: Nikita Kiryanov @ 2015-02-01 17:02 UTC (permalink / raw)
  To: u-boot

Hi Simon,

On 01/31/2015 02:24 AM, Simon Glass wrote:
> Hi Nikita,
>
> On 29 January 2015 at 04:21, Nikita Kiryanov <nikita@compulab.co.il> wrote:
>> configuration_get_cmap() is multiple platform specific functions stuffed into
>> one function. Split it into multiple versions, and move each version to the
>> appropriate driver to reduce the #ifdef complexity.
>>
>> Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il>
>> Cc: Bo Shen <voice.shen@atmel.com>
>> Cc: Simon Glass <sjg@chromium.org>
>> Cc: Anatolij Gustschin <agust@denx.de>
>> ---
>>   common/lcd.c                 | 19 -------------------
>>   drivers/video/atmel_hlcdfb.c | 13 +++++++++++++
>>   drivers/video/atmel_lcdfb.c  |  5 +++++
>>   drivers/video/exynos_fb.c    |  9 +++++++++
>>   drivers/video/mpc8xx_lcd.c   |  7 +++++++
>>   drivers/video/pxa_lcd.c      |  6 ++++++
>>   include/lcd.h                |  9 +++++++++
>>   7 files changed, 49 insertions(+), 19 deletions(-)
>
> Reviewed-by: Simon Glass <sjg@chromium.org>
>
> See suggestion below.
>
> [snip]
>> diff --git a/include/lcd.h b/include/lcd.h
>> index fbba6a2..838f645 100644
>> --- a/include/lcd.h
>> +++ b/include/lcd.h
>> @@ -42,13 +42,17 @@ void lcd_set_flush_dcache(int flush);
>>
>>   #if defined CONFIG_MPC823
>>   #include <mpc823_lcd.h>
>> +ushort *configuration_get_cmap(void);
>>   #elif defined(CONFIG_CPU_PXA25X) || defined(CONFIG_CPU_PXA27X) || \
>>          defined CONFIG_CPU_MONAHANS
>>   #include <pxa_lcd.h>
>> +ushort *configuration_get_cmap(void);
>>   #elif defined(CONFIG_ATMEL_LCD) || defined(CONFIG_ATMEL_HLCD)
>>   #include <atmel_lcd.h>
>> +ushort *configuration_get_cmap(void);
>>   #elif defined(CONFIG_EXYNOS_FB)
>>   #include <exynos_lcd.h>
>> +ushort *configuration_get_cmap(void);
>>   #else
>>   typedef struct vidinfo {
>>          ushort  vl_col;         /* Number of columns (i.e. 160) */
>> @@ -60,6 +64,11 @@ typedef struct vidinfo {
>>
>>          void    *priv;          /* Pointer to driver-specific data */
>>   } vidinfo_t;
>> +
>> +static inline ushort *configuration_get_cmap(void)
>> +{
>> +       return panel_info.cmap;
>> +}
>>   #endif
>
> I'd argue for dropping the inline version and just having the same
> prototype in each case.

Are you suggesting something along the lines of:

static ushort *configuration_get_cmap(void)
{
        return panel_info.cmap;
}
#endif

ushort *configuration_get_cmap(void);

?

This is something I considered while preparing this, but I was under the impression
that this isn't well defined by the standard. However, I actually have confirmation
now that it is in fact defined behavior[1], so I will submit a V2 for this (even though
I expect all of the above to disappear from lcd.h in the next refactor series).

[1] http://stackoverflow.com/questions/28264874/non-static-function-prototype-follows-static-function-declaration

>
> Regards,
> Simon
>

-- 
Regards,
Nikita Kiryanov

^ permalink raw reply	[flat|nested] 34+ messages in thread

* [U-Boot] [PATCH 02/13] lcd: split configuration_get_cmap
  2015-02-01 17:02     ` Nikita Kiryanov
@ 2015-02-01 17:14       ` Simon Glass
  0 siblings, 0 replies; 34+ messages in thread
From: Simon Glass @ 2015-02-01 17:14 UTC (permalink / raw)
  To: u-boot

Hi Nikita,

On 1 February 2015 at 10:02, Nikita Kiryanov <nikita@compulab.co.il> wrote:
> Hi Simon,
>
>
> On 01/31/2015 02:24 AM, Simon Glass wrote:
>>
>> Hi Nikita,
>>
>> On 29 January 2015 at 04:21, Nikita Kiryanov <nikita@compulab.co.il>
>> wrote:
>>>
>>> configuration_get_cmap() is multiple platform specific functions stuffed
>>> into
>>> one function. Split it into multiple versions, and move each version to
>>> the
>>> appropriate driver to reduce the #ifdef complexity.
>>>
>>> Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il>
>>> Cc: Bo Shen <voice.shen@atmel.com>
>>> Cc: Simon Glass <sjg@chromium.org>
>>> Cc: Anatolij Gustschin <agust@denx.de>
>>> ---
>>>   common/lcd.c                 | 19 -------------------
>>>   drivers/video/atmel_hlcdfb.c | 13 +++++++++++++
>>>   drivers/video/atmel_lcdfb.c  |  5 +++++
>>>   drivers/video/exynos_fb.c    |  9 +++++++++
>>>   drivers/video/mpc8xx_lcd.c   |  7 +++++++
>>>   drivers/video/pxa_lcd.c      |  6 ++++++
>>>   include/lcd.h                |  9 +++++++++
>>>   7 files changed, 49 insertions(+), 19 deletions(-)
>>
>>
>> Reviewed-by: Simon Glass <sjg@chromium.org>
>>
>> See suggestion below.
>>
>> [snip]
>>>
>>> diff --git a/include/lcd.h b/include/lcd.h
>>> index fbba6a2..838f645 100644
>>> --- a/include/lcd.h
>>> +++ b/include/lcd.h
>>> @@ -42,13 +42,17 @@ void lcd_set_flush_dcache(int flush);
>>>
>>>   #if defined CONFIG_MPC823
>>>   #include <mpc823_lcd.h>
>>> +ushort *configuration_get_cmap(void);
>>>   #elif defined(CONFIG_CPU_PXA25X) || defined(CONFIG_CPU_PXA27X) || \
>>>          defined CONFIG_CPU_MONAHANS
>>>   #include <pxa_lcd.h>
>>> +ushort *configuration_get_cmap(void);
>>>   #elif defined(CONFIG_ATMEL_LCD) || defined(CONFIG_ATMEL_HLCD)
>>>   #include <atmel_lcd.h>
>>> +ushort *configuration_get_cmap(void);
>>>   #elif defined(CONFIG_EXYNOS_FB)
>>>   #include <exynos_lcd.h>
>>> +ushort *configuration_get_cmap(void);
>>>   #else
>>>   typedef struct vidinfo {
>>>          ushort  vl_col;         /* Number of columns (i.e. 160) */
>>> @@ -60,6 +64,11 @@ typedef struct vidinfo {
>>>
>>>          void    *priv;          /* Pointer to driver-specific data */
>>>   } vidinfo_t;
>>> +
>>> +static inline ushort *configuration_get_cmap(void)
>>> +{
>>> +       return panel_info.cmap;
>>> +}
>>>   #endif
>>
>>
>> I'd argue for dropping the inline version and just having the same
>> prototype in each case.
>
>
> Are you suggesting something along the lines of:
>
> static ushort *configuration_get_cmap(void)
> {
>        return panel_info.cmap;
> }
> #endif
>
> ushort *configuration_get_cmap(void);
>
> ?
>
> This is something I considered while preparing this, but I was under the
> impression
> that this isn't well defined by the standard. However, I actually have
> confirmation
> now that it is in fact defined behavior[1], so I will submit a V2 for this
> (even though
> I expect all of the above to disappear from lcd.h in the next refactor
> series).
>
> [1]
> http://stackoverflow.com/questions/28264874/non-static-function-prototype-follows-static-function-declaration

OK, although if you are planning to get rid of this code in the next
refactor, it's fine just as you have it in v1.

Regards,
Simon

^ permalink raw reply	[flat|nested] 34+ messages in thread

end of thread, other threads:[~2015-02-01 17:14 UTC | newest]

Thread overview: 34+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-01-29 11:21 [U-Boot] [PATCH 00/13] common lcd refactor Nikita Kiryanov
2015-01-29 11:21 ` [U-Boot] [PATCH 01/13] lcd: move platform specific structs to their own headers Nikita Kiryanov
2015-01-31  0:24   ` Simon Glass
2015-01-29 11:21 ` [U-Boot] [PATCH 02/13] lcd: split configuration_get_cmap Nikita Kiryanov
2015-01-31  0:24   ` Simon Glass
2015-02-01 17:02     ` Nikita Kiryanov
2015-02-01 17:14       ` Simon Glass
2015-01-29 11:21 ` [U-Boot] [PATCH 03/13] lcd: atmel: move atmel specific fb_put_word to atmel_lcdfb Nikita Kiryanov
2015-01-31  0:24   ` Simon Glass
2015-01-29 11:21 ` [U-Boot] [PATCH 04/13] lcd: mpc8xx: move mpc823 specific fb_put_byte to mpc8xx_lcd.c Nikita Kiryanov
2015-01-31  0:24   ` Simon Glass
2015-01-29 11:21 ` [U-Boot] [PATCH 05/13] lcd: atmel: introduce lcd_logo_set_cmap Nikita Kiryanov
2015-01-31  0:24   ` Simon Glass
2015-01-29 11:21 ` [U-Boot] [PATCH 06/13] lcd: mpc823: move mpc823 specific lcd_logo_set_cmap code to mpc8xx_lcd.c Nikita Kiryanov
2015-01-31  0:24   ` Simon Glass
2015-01-29 11:21 ` [U-Boot] [PATCH 07/13] lcd: logo: move generic cmap setting to lcd_logo_set_cmap() Nikita Kiryanov
2015-01-31  0:24   ` Simon Glass
2015-01-29 11:21 ` [U-Boot] [PATCH 08/13] lcd: introduce lcd_set_cmap Nikita Kiryanov
2015-01-31  0:24   ` Simon Glass
2015-01-29 11:21 ` [U-Boot] [PATCH 09/13] lcd: remove unused includes Nikita Kiryanov
2015-01-31  0:24   ` Simon Glass
2015-01-29 11:21 ` [U-Boot] [PATCH 10/13] lcd: various cleanups Nikita Kiryanov
2015-01-31  0:24   ` Simon Glass
2015-01-29 11:21 ` [U-Boot] [PATCH 11/13] lcd: rename bitmap_plot to better represent its functionality Nikita Kiryanov
2015-01-31  0:25   ` Simon Glass
2015-01-29 11:21 ` [U-Boot] [PATCH 12/13] lcd: dt: extract simplefb support Nikita Kiryanov
2015-01-29 17:14   ` Stephen Warren
2015-02-01 13:58     ` Nikita Kiryanov
2015-01-31  0:25   ` Simon Glass
2015-02-01 13:56     ` Nikita Kiryanov
2015-01-29 11:21 ` [U-Boot] [PATCH 13/13] lcd: split splash code into its own function Nikita Kiryanov
2015-01-31  0:25   ` Simon Glass
2015-02-01 13:59     ` Nikita Kiryanov
2015-02-01 16:25       ` Simon Glass

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.