All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH V2 00/13] common lcd refactor
@ 2015-02-03 11:32 Nikita Kiryanov
  2015-02-03 11:32 ` [U-Boot] [PATCH V2 01/13] lcd: move platform-specific structs to their own headers Nikita Kiryanov
                   ` (15 more replies)
  0 siblings, 16 replies; 22+ messages in thread
From: Nikita Kiryanov @ 2015-02-03 11:32 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 small note on the series:

- 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 function, 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). Rebased on current mainline.

Changes in V2:
- Minor commit message changes (such as s/platform specific/platform-specific/,
  s/Raspberry Pi config file is updated to compile the new file/Raspberry Pi is updated to accommodate the changes/)
- patch 2: define configuration_get_cmap() prototype only once.

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                | 311 ++++++-------------------------------
 include/mpc823_lcd.h         |  43 ++++++
 include/pxa_lcd.h            |  80 ++++++++++
 include/splash.h             |  11 +-
 17 files changed, 574 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] 22+ messages in thread

* [U-Boot] [PATCH V2 01/13] lcd: move platform-specific structs to their own headers
  2015-02-03 11:32 [U-Boot] [PATCH V2 00/13] common lcd refactor Nikita Kiryanov
@ 2015-02-03 11:32 ` Nikita Kiryanov
  2015-02-04  6:48   ` Bo Shen
  2015-02-03 11:32 ` [U-Boot] [PATCH V2 02/13] lcd: split configuration_get_cmap Nikita Kiryanov
                   ` (14 subsequent siblings)
  15 siblings, 1 reply; 22+ messages in thread
From: Nikita Kiryanov @ 2015-02-03 11:32 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>
Reviewed-by: Simon Glass <sjg@chromium.org>
Cc: Bo Shen <voice.shen@atmel.com>
Cc: Simon Glass <sjg@chromium.org>
Cc: Anatolij Gustschin <agust@denx.de>
---
Changes in V2:
	- Minor commit message update

 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] 22+ messages in thread

* [U-Boot] [PATCH V2 02/13] lcd: split configuration_get_cmap
  2015-02-03 11:32 [U-Boot] [PATCH V2 00/13] common lcd refactor Nikita Kiryanov
  2015-02-03 11:32 ` [U-Boot] [PATCH V2 01/13] lcd: move platform-specific structs to their own headers Nikita Kiryanov
@ 2015-02-03 11:32 ` Nikita Kiryanov
  2015-02-04  7:25   ` Bo Shen
  2015-02-03 11:32 ` [U-Boot] [PATCH V2 03/13] lcd: atmel: move atmel-specific fb_put_word to atmel_lcdfb Nikita Kiryanov
                   ` (13 subsequent siblings)
  15 siblings, 1 reply; 22+ messages in thread
From: Nikita Kiryanov @ 2015-02-03 11:32 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>
Reviewed-by: Simon Glass <sjg@chromium.org>
Cc: Bo Shen <voice.shen@atmel.com>
Cc: Simon Glass <sjg@chromium.org>
Cc: Anatolij Gustschin <agust@denx.de>
---
Changes in V2:
	- Minor commit message update
	- ushort *configuration_get_cmap(void) prototype is defined only once
	  instead of for each #ifdef CONFIG_*

 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                |  7 +++++++
 7 files changed, 47 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..4ada617 100644
--- a/include/lcd.h
+++ b/include/lcd.h
@@ -60,8 +60,15 @@ typedef struct vidinfo {
 
 	void	*priv;		/* Pointer to driver-specific data */
 } vidinfo_t;
+
+static __maybe_unused ushort *configuration_get_cmap(void)
+{
+	return panel_info.cmap;
+}
 #endif
 
+ushort *configuration_get_cmap(void);
+
 extern vidinfo_t panel_info;
 
 /* Video functions */
-- 
1.9.1

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

* [U-Boot] [PATCH V2 03/13] lcd: atmel: move atmel-specific fb_put_word to atmel_lcdfb
  2015-02-03 11:32 [U-Boot] [PATCH V2 00/13] common lcd refactor Nikita Kiryanov
  2015-02-03 11:32 ` [U-Boot] [PATCH V2 01/13] lcd: move platform-specific structs to their own headers Nikita Kiryanov
  2015-02-03 11:32 ` [U-Boot] [PATCH V2 02/13] lcd: split configuration_get_cmap Nikita Kiryanov
@ 2015-02-03 11:32 ` Nikita Kiryanov
  2015-02-04  7:26   ` Bo Shen
  2015-02-03 11:32 ` [U-Boot] [PATCH V2 04/13] lcd: mpc8xx: move mpc823-specific fb_put_byte to mpc8xx_lcd.c Nikita Kiryanov
                   ` (12 subsequent siblings)
  15 siblings, 1 reply; 22+ messages in thread
From: Nikita Kiryanov @ 2015-02-03 11:32 UTC (permalink / raw)
  To: u-boot

Reduce the amount of platform-specific code in common/lcd.c by moving Atmel
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>
Reviewed-by: Simon Glass <sjg@chromium.org>
Cc: Bo Shen <voice.shen@atmel.com>
Cc: Simon Glass <sjg@chromium.org>
Cc: Anatolij Gustschin <agust@denx.de>
---
Changes in V2:
	- Minor commit message update

 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] 22+ messages in thread

* [U-Boot] [PATCH V2 04/13] lcd: mpc8xx: move mpc823-specific fb_put_byte to mpc8xx_lcd.c
  2015-02-03 11:32 [U-Boot] [PATCH V2 00/13] common lcd refactor Nikita Kiryanov
                   ` (2 preceding siblings ...)
  2015-02-03 11:32 ` [U-Boot] [PATCH V2 03/13] lcd: atmel: move atmel-specific fb_put_word to atmel_lcdfb Nikita Kiryanov
@ 2015-02-03 11:32 ` Nikita Kiryanov
  2015-02-03 11:32 ` [U-Boot] [PATCH V2 05/13] lcd: atmel: introduce lcd_logo_set_cmap Nikita Kiryanov
                   ` (11 subsequent siblings)
  15 siblings, 0 replies; 22+ messages in thread
From: Nikita Kiryanov @ 2015-02-03 11:32 UTC (permalink / raw)
  To: u-boot

Reduce the amount of platform-specific code in common/lcd.c by moving MPC823
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>
Reviewed-by: Simon Glass <sjg@chromium.org>
Cc: Simon Glass <sjg@chromium.org>
Cc: Anatolij Gustschin <agust@denx.de>
---
Changes in V2:
	- Minor commit message update

 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] 22+ messages in thread

* [U-Boot] [PATCH V2 05/13] lcd: atmel: introduce lcd_logo_set_cmap
  2015-02-03 11:32 [U-Boot] [PATCH V2 00/13] common lcd refactor Nikita Kiryanov
                   ` (3 preceding siblings ...)
  2015-02-03 11:32 ` [U-Boot] [PATCH V2 04/13] lcd: mpc8xx: move mpc823-specific fb_put_byte to mpc8xx_lcd.c Nikita Kiryanov
@ 2015-02-03 11:32 ` Nikita Kiryanov
  2015-02-03 11:32 ` [U-Boot] [PATCH V2 06/13] lcd: mpc823: move mpc823-specific lcd_logo_set_cmap code to mpc8xx_lcd.c Nikita Kiryanov
                   ` (10 subsequent siblings)
  15 siblings, 0 replies; 22+ messages in thread
From: Nikita Kiryanov @ 2015-02-03 11:32 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>
Reviewed-by: Simon Glass <sjg@chromium.org>
Cc: Bo Shen <voice.shen@atmel.com>
Cc: Simon Glass <sjg@chromium.org>
Cc: Anatolij Gustschin <agust@denx.de>
---
Changes in V2:
	- Minor commit message update

 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] 22+ messages in thread

* [U-Boot] [PATCH V2 06/13] lcd: mpc823: move mpc823-specific lcd_logo_set_cmap code to mpc8xx_lcd.c
  2015-02-03 11:32 [U-Boot] [PATCH V2 00/13] common lcd refactor Nikita Kiryanov
                   ` (4 preceding siblings ...)
  2015-02-03 11:32 ` [U-Boot] [PATCH V2 05/13] lcd: atmel: introduce lcd_logo_set_cmap Nikita Kiryanov
@ 2015-02-03 11:32 ` Nikita Kiryanov
  2015-02-03 11:32 ` [U-Boot] [PATCH V2 07/13] lcd: logo: move generic cmap setting to lcd_logo_set_cmap() Nikita Kiryanov
                   ` (9 subsequent siblings)
  15 siblings, 0 replies; 22+ messages in thread
From: Nikita Kiryanov @ 2015-02-03 11:32 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.

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

Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il>
Reviewed-by: Simon Glass <sjg@chromium.org>
Cc: Simon Glass <sjg@chromium.org>
Cc: Anatolij Gustschin <agust@denx.de>
---
Changes in V2:
	- Minor commit message update

 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] 22+ messages in thread

* [U-Boot] [PATCH V2 07/13] lcd: logo: move generic cmap setting to lcd_logo_set_cmap()
  2015-02-03 11:32 [U-Boot] [PATCH V2 00/13] common lcd refactor Nikita Kiryanov
                   ` (5 preceding siblings ...)
  2015-02-03 11:32 ` [U-Boot] [PATCH V2 06/13] lcd: mpc823: move mpc823-specific lcd_logo_set_cmap code to mpc8xx_lcd.c Nikita Kiryanov
@ 2015-02-03 11:32 ` Nikita Kiryanov
  2015-02-03 11:32 ` [U-Boot] [PATCH V2 08/13] lcd: introduce lcd_set_cmap Nikita Kiryanov
                   ` (8 subsequent siblings)
  15 siblings, 0 replies; 22+ messages in thread
From: Nikita Kiryanov @ 2015-02-03 11:32 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>
Reviewed-by: Simon Glass <sjg@chromium.org>
Cc: Bo Shen <voice.shen@atmel.com>
Cc: Simon Glass <sjg@chromium.org>
Cc: Anatolij Gustschin <agust@denx.de>
---
Changes in V2:
	- Minor commit message update

 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] 22+ messages in thread

* [U-Boot] [PATCH V2 08/13] lcd: introduce lcd_set_cmap
  2015-02-03 11:32 [U-Boot] [PATCH V2 00/13] common lcd refactor Nikita Kiryanov
                   ` (6 preceding siblings ...)
  2015-02-03 11:32 ` [U-Boot] [PATCH V2 07/13] lcd: logo: move generic cmap setting to lcd_logo_set_cmap() Nikita Kiryanov
@ 2015-02-03 11:32 ` Nikita Kiryanov
  2015-02-03 11:32 ` [U-Boot] [PATCH V2 09/13] lcd: remove unused includes Nikita Kiryanov
                   ` (7 subsequent siblings)
  15 siblings, 0 replies; 22+ messages in thread
From: Nikita Kiryanov @ 2015-02-03 11:32 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>
Reviewed-by: Simon Glass <sjg@chromium.org>
Cc: Bo Shen <voice.shen@atmel.com>
Cc: Simon Glass <sjg@chromium.org>
Cc: Anatolij Gustschin <agust@denx.de>
---
Changes in V2:
	- Minor commit message update

 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] 22+ messages in thread

* [U-Boot] [PATCH V2 09/13] lcd: remove unused includes
  2015-02-03 11:32 [U-Boot] [PATCH V2 00/13] common lcd refactor Nikita Kiryanov
                   ` (7 preceding siblings ...)
  2015-02-03 11:32 ` [U-Boot] [PATCH V2 08/13] lcd: introduce lcd_set_cmap Nikita Kiryanov
@ 2015-02-03 11:32 ` Nikita Kiryanov
  2015-02-03 11:32 ` [U-Boot] [PATCH V2 10/13] lcd: various cleanups Nikita Kiryanov
                   ` (6 subsequent siblings)
  15 siblings, 0 replies; 22+ messages in thread
From: Nikita Kiryanov @ 2015-02-03 11:32 UTC (permalink / raw)
  To: u-boot

Remove unused includes.

Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il>
Reviewed-by: Simon Glass <sjg@chromium.org>
Cc: Bo Shen <voice.shen@atmel.com>
Cc: Simon Glass <sjg@chromium.org>
Cc: Anatolij Gustschin <agust@denx.de>
---
Changes in V2:
	- Minor commit message update

 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] 22+ messages in thread

* [U-Boot] [PATCH V2 10/13] lcd: various cleanups
  2015-02-03 11:32 [U-Boot] [PATCH V2 00/13] common lcd refactor Nikita Kiryanov
                   ` (8 preceding siblings ...)
  2015-02-03 11:32 ` [U-Boot] [PATCH V2 09/13] lcd: remove unused includes Nikita Kiryanov
@ 2015-02-03 11:32 ` Nikita Kiryanov
  2015-02-03 11:32 ` [U-Boot] [PATCH V2 11/13] lcd: rename bitmap_plot to better represent its functionality Nikita Kiryanov
                   ` (5 subsequent siblings)
  15 siblings, 0 replies; 22+ messages in thread
From: Nikita Kiryanov @ 2015-02-03 11:32 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>
Reviewed-by: Simon Glass <sjg@chromium.org>
Cc: Simon Glass <sjg@chromium.org>
Cc: Anatolij Gustschin <agust@denx.de>
---
Changes in V2:
	- Minor commit message update

 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 4ada617..b042320 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);
@@ -53,11 +51,8 @@ void lcd_set_flush_dcache(int flush);
 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;
 
@@ -71,13 +66,11 @@ 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
@@ -141,14 +134,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
@@ -163,38 +148,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
@@ -203,38 +182,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] 22+ messages in thread

* [U-Boot] [PATCH V2 11/13] lcd: rename bitmap_plot to better represent its functionality
  2015-02-03 11:32 [U-Boot] [PATCH V2 00/13] common lcd refactor Nikita Kiryanov
                   ` (9 preceding siblings ...)
  2015-02-03 11:32 ` [U-Boot] [PATCH V2 10/13] lcd: various cleanups Nikita Kiryanov
@ 2015-02-03 11:32 ` Nikita Kiryanov
  2015-02-03 11:32 ` [U-Boot] [PATCH V2 12/13] lcd: dt: extract simplefb support Nikita Kiryanov
                   ` (4 subsequent siblings)
  15 siblings, 0 replies; 22+ messages in thread
From: Nikita Kiryanov @ 2015-02-03 11:32 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>
Reviewed-by: Simon Glass <sjg@chromium.org>
Cc: Simon Glass <sjg@chromium.org>
Cc: Anatolij Gustschin <agust@denx.de>
---
Changes in V2:
	- Minor commit message update

 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] 22+ messages in thread

* [U-Boot] [PATCH V2 12/13] lcd: dt: extract simplefb support
  2015-02-03 11:32 [U-Boot] [PATCH V2 00/13] common lcd refactor Nikita Kiryanov
                   ` (10 preceding siblings ...)
  2015-02-03 11:32 ` [U-Boot] [PATCH V2 11/13] lcd: rename bitmap_plot to better represent its functionality Nikita Kiryanov
@ 2015-02-03 11:32 ` Nikita Kiryanov
  2015-02-03 11:32 ` [U-Boot] [PATCH V2 13/13] lcd: split splash code into its own function Nikita Kiryanov
                   ` (3 subsequent siblings)
  15 siblings, 0 replies; 22+ messages in thread
From: Nikita Kiryanov @ 2015-02-03 11:32 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 is updated to accommodate the changes.

Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il>
Acked-by: Stephen Warren <swarren@wwwdotorg.org>
Reviewed-by: Simon Glass <sjg@chromium.org>
Cc: Simon Glass <sjg@chromium.org>
Cc: Anatolij Gustschin <agust@denx.de>
Cc: Stephen Warren <swarren@wwwdotorg.org>
---
Changes in V2:
	- Minor commit message update

 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 9579ab4..71f16dc 100644
--- a/common/Makefile
+++ b/common/Makefile
@@ -199,6 +199,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 b042320..f049fd3 100644
--- a/include/lcd.h
+++ b/include/lcd.h
@@ -128,9 +128,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] 22+ messages in thread

* [U-Boot] [PATCH V2 13/13] lcd: split splash code into its own function
  2015-02-03 11:32 [U-Boot] [PATCH V2 00/13] common lcd refactor Nikita Kiryanov
                   ` (11 preceding siblings ...)
  2015-02-03 11:32 ` [U-Boot] [PATCH V2 12/13] lcd: dt: extract simplefb support Nikita Kiryanov
@ 2015-02-03 11:32 ` Nikita Kiryanov
  2015-02-04  2:37 ` [U-Boot] [PATCH V2 00/13] common lcd refactor Josh Wu
                   ` (2 subsequent siblings)
  15 siblings, 0 replies; 22+ messages in thread
From: Nikita Kiryanov @ 2015-02-03 11:32 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>
Reviewed-by: Simon Glass <sjg@chromium.org>
Cc: Bo Shen <voice.shen@atmel.com>
Cc: Simon Glass <sjg@chromium.org>
Cc: Anatolij Gustschin <agust@denx.de>
---
Changes in V2:
	- Minor commit message update

 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] 22+ messages in thread

* [U-Boot] [PATCH V2 00/13] common lcd refactor
  2015-02-03 11:32 [U-Boot] [PATCH V2 00/13] common lcd refactor Nikita Kiryanov
                   ` (12 preceding siblings ...)
  2015-02-03 11:32 ` [U-Boot] [PATCH V2 13/13] lcd: split splash code into its own function Nikita Kiryanov
@ 2015-02-04  2:37 ` Josh Wu
  2015-02-04  8:03 ` Bo Shen
  2015-02-10 12:43 ` Anatolij Gustschin
  15 siblings, 0 replies; 22+ messages in thread
From: Josh Wu @ 2015-02-04  2:37 UTC (permalink / raw)
  To: u-boot

Hi, Nikita

On 2/3/2015 7:32 PM, Nikita Kiryanov wrote:
> 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 small note on the series:
>
> - 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 function, 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). Rebased on current mainline.
>
> Changes in V2:
> - Minor commit message changes (such as s/platform specific/platform-specific/,
>    s/Raspberry Pi config file is updated to compile the new file/Raspberry Pi is updated to accommodate the changes/)
> - patch 2: define configuration_get_cmap() prototype only once.
>
> 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                | 311 ++++++-------------------------------
>   include/mpc823_lcd.h         |  43 ++++++
>   include/pxa_lcd.h            |  80 ++++++++++
>   include/splash.h             |  11 +-
>   17 files changed, 574 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
>

For this whole series, I tested the Atmel lcd & hlcd part, you can add 
my tested-by:
Tested-by: Josh Wu <josh.wu@atmel.com>

Thanks.

Best Regards,
Josh Wu

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

* [U-Boot] [PATCH V2 01/13] lcd: move platform-specific structs to their own headers
  2015-02-03 11:32 ` [U-Boot] [PATCH V2 01/13] lcd: move platform-specific structs to their own headers Nikita Kiryanov
@ 2015-02-04  6:48   ` Bo Shen
  0 siblings, 0 replies; 22+ messages in thread
From: Bo Shen @ 2015-02-04  6:48 UTC (permalink / raw)
  To: u-boot

On 02/03/2015 07:32 PM, Nikita Kiryanov 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.
>
> Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il>
> Reviewed-by: Simon Glass <sjg@chromium.org>
> Cc: Bo Shen <voice.shen@atmel.com>
> Cc: Simon Glass <sjg@chromium.org>
> Cc: Anatolij Gustschin <agust@denx.de>

For Atmel part, tested ok on at91sam9g35ek.

Tested-by: Bo Shen <voice.shen@atmel.com>

> ---
> Changes in V2:
> 	- Minor commit message update
>
>   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
>

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

* [U-Boot] [PATCH V2 02/13] lcd: split configuration_get_cmap
  2015-02-03 11:32 ` [U-Boot] [PATCH V2 02/13] lcd: split configuration_get_cmap Nikita Kiryanov
@ 2015-02-04  7:25   ` Bo Shen
  2015-02-08 11:35     ` Nikita Kiryanov
  0 siblings, 1 reply; 22+ messages in thread
From: Bo Shen @ 2015-02-04  7:25 UTC (permalink / raw)
  To: u-boot

Hi Nikita Kiryanov,

On 02/03/2015 07:32 PM, Nikita Kiryanov 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>
> Reviewed-by: Simon Glass <sjg@chromium.org>
> Cc: Bo Shen <voice.shen@atmel.com>
> Cc: Simon Glass <sjg@chromium.org>
> Cc: Anatolij Gustschin <agust@denx.de>
> ---
> Changes in V2:
> 	- Minor commit message update
> 	- ushort *configuration_get_cmap(void) prototype is defined only once
> 	  instead of for each #ifdef CONFIG_*
>
>   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                |  7 +++++++
>   7 files changed, 47 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

I think we can include this file directly.

>   /* 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
> +}

Here, I think no need to do the CONFIG_LCD_LOGO check, return 
bmp_logo_palette directly, as it will be used when use bmp command in 8 
bit mode. However, no hardware to test LCDC work or not in 8 bit mode :(

>   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..4ada617 100644
> --- a/include/lcd.h
> +++ b/include/lcd.h
> @@ -60,8 +60,15 @@ typedef struct vidinfo {
>
>   	void	*priv;		/* Pointer to driver-specific data */
>   } vidinfo_t;
> +
> +static __maybe_unused ushort *configuration_get_cmap(void)
> +{
> +	return panel_info.cmap;
> +}
>   #endif
>
> +ushort *configuration_get_cmap(void);
> +
>   extern vidinfo_t panel_info;
>
>   /* Video functions */
>

Best Regards,
Bo Shen

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

* [U-Boot] [PATCH V2 03/13] lcd: atmel: move atmel-specific fb_put_word to atmel_lcdfb
  2015-02-03 11:32 ` [U-Boot] [PATCH V2 03/13] lcd: atmel: move atmel-specific fb_put_word to atmel_lcdfb Nikita Kiryanov
@ 2015-02-04  7:26   ` Bo Shen
  0 siblings, 0 replies; 22+ messages in thread
From: Bo Shen @ 2015-02-04  7:26 UTC (permalink / raw)
  To: u-boot

On 02/03/2015 07:32 PM, Nikita Kiryanov wrote:
> Reduce the amount of platform-specific code in common/lcd.c by moving Atmel
> 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>
> Reviewed-by: Simon Glass <sjg@chromium.org>
> Cc: Bo Shen <voice.shen@atmel.com>
> Cc: Simon Glass <sjg@chromium.org>
> Cc: Anatolij Gustschin <agust@denx.de>

Acked-by: Bo Shen <voice.shen@atmel.com>

> ---
> Changes in V2:
> 	- Minor commit message update
>
>   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)
>

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

* [U-Boot] [PATCH V2 00/13] common lcd refactor
  2015-02-03 11:32 [U-Boot] [PATCH V2 00/13] common lcd refactor Nikita Kiryanov
                   ` (13 preceding siblings ...)
  2015-02-04  2:37 ` [U-Boot] [PATCH V2 00/13] common lcd refactor Josh Wu
@ 2015-02-04  8:03 ` Bo Shen
  2015-02-10 12:43 ` Anatolij Gustschin
  15 siblings, 0 replies; 22+ messages in thread
From: Bo Shen @ 2015-02-04  8:03 UTC (permalink / raw)
  To: u-boot

Hi Nikita Kiryanov,

On 02/03/2015 07:32 PM, Nikita Kiryanov wrote:
> 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 small note on the series:
>
> - 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 function, 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). Rebased on current mainline.
>
> Changes in V2:
> - Minor commit message changes (such as s/platform specific/platform-specific/,
>    s/Raspberry Pi config file is updated to compile the new file/Raspberry Pi is updated to accommodate the changes/)
> - patch 2: define configuration_get_cmap() prototype only once.
>
> 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

Tested OK on at91sam9g10ek, at91sam9x5ek boards.

Tested-by: Bo Shen <voice.shen@atmel.com>

>   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                | 311 ++++++-------------------------------
>   include/mpc823_lcd.h         |  43 ++++++
>   include/pxa_lcd.h            |  80 ++++++++++
>   include/splash.h             |  11 +-
>   17 files changed, 574 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
>

Best Regards,
Bo Shen

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

* [U-Boot] [PATCH V2 02/13] lcd: split configuration_get_cmap
  2015-02-04  7:25   ` Bo Shen
@ 2015-02-08 11:35     ` Nikita Kiryanov
  2015-02-09  3:43       ` Bo Shen
  0 siblings, 1 reply; 22+ messages in thread
From: Nikita Kiryanov @ 2015-02-08 11:35 UTC (permalink / raw)
  To: u-boot

Hi Bo,

On 02/04/2015 09:25 AM, Bo Shen wrote:
> Hi Nikita Kiryanov,
>
> On 02/03/2015 07:32 PM, Nikita Kiryanov wrote:

[..]

>>   #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
>
> I think we can include this file directly.

bmp_logo.h does not exist without CONFIG_LCD_LOGO.

>
>>   /* 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
>> +}
>
> Here, I think no need to do the CONFIG_LCD_LOGO check, return bmp_logo_palette directly, as it will be used when use bmp command in 8 bit mode. However, no hardware to test LCDC work or not in 8 bit
> mode :(

This would make CONFIG_LCD_LOGO a prerequisite for this driver (bmp_logo_palette does not exist otherwise), and I don't think it's right to couple the two.

>
>>   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))
>>

-- 
Regards,
Nikita Kiryanov

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

* [U-Boot] [PATCH V2 02/13] lcd: split configuration_get_cmap
  2015-02-08 11:35     ` Nikita Kiryanov
@ 2015-02-09  3:43       ` Bo Shen
  0 siblings, 0 replies; 22+ messages in thread
From: Bo Shen @ 2015-02-09  3:43 UTC (permalink / raw)
  To: u-boot

Hi Nikita Kiryanov,

On 02/08/2015 07:35 PM, Nikita Kiryanov wrote:
> Hi Bo,
>
> On 02/04/2015 09:25 AM, Bo Shen wrote:
>> Hi Nikita Kiryanov,
>>
>> On 02/03/2015 07:32 PM, Nikita Kiryanov wrote:
>
> [..]
>
>>>   #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
>>
>> I think we can include this file directly.
>
> bmp_logo.h does not exist without CONFIG_LCD_LOGO.

Oh yes, my bad.

>>
>>>   /* 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
>>> +}
>>
>> Here, I think no need to do the CONFIG_LCD_LOGO check, return
>> bmp_logo_palette directly, as it will be used when use bmp command in
>> 8 bit mode. However, no hardware to test LCDC work or not in 8 bit
>> mode :(
>
> This would make CONFIG_LCD_LOGO a prerequisite for this driver
> (bmp_logo_palette does not exist otherwise), and I don't think it's
> right to couple the two.

OK. let's keep this as is.

>>
>>>   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))
>>>
>

Best Regards,
Bo Shen

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

* [U-Boot] [PATCH V2 00/13] common lcd refactor
  2015-02-03 11:32 [U-Boot] [PATCH V2 00/13] common lcd refactor Nikita Kiryanov
                   ` (14 preceding siblings ...)
  2015-02-04  8:03 ` Bo Shen
@ 2015-02-10 12:43 ` Anatolij Gustschin
  15 siblings, 0 replies; 22+ messages in thread
From: Anatolij Gustschin @ 2015-02-10 12:43 UTC (permalink / raw)
  To: u-boot

Hi Nikita,

On Tue,  3 Feb 2015 13:32:19 +0200
Nikita Kiryanov <nikita@compulab.co.il> wrote:
...
> 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                | 311 ++++++-------------------------------
>  include/mpc823_lcd.h         |  43 ++++++
>  include/pxa_lcd.h            |  80 ++++++++++
>  include/splash.h             |  11 +-
>  17 files changed, 574 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

Series applied to u-boot-video/master. Thanks!

Anatolij

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

end of thread, other threads:[~2015-02-10 12:43 UTC | newest]

Thread overview: 22+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-02-03 11:32 [U-Boot] [PATCH V2 00/13] common lcd refactor Nikita Kiryanov
2015-02-03 11:32 ` [U-Boot] [PATCH V2 01/13] lcd: move platform-specific structs to their own headers Nikita Kiryanov
2015-02-04  6:48   ` Bo Shen
2015-02-03 11:32 ` [U-Boot] [PATCH V2 02/13] lcd: split configuration_get_cmap Nikita Kiryanov
2015-02-04  7:25   ` Bo Shen
2015-02-08 11:35     ` Nikita Kiryanov
2015-02-09  3:43       ` Bo Shen
2015-02-03 11:32 ` [U-Boot] [PATCH V2 03/13] lcd: atmel: move atmel-specific fb_put_word to atmel_lcdfb Nikita Kiryanov
2015-02-04  7:26   ` Bo Shen
2015-02-03 11:32 ` [U-Boot] [PATCH V2 04/13] lcd: mpc8xx: move mpc823-specific fb_put_byte to mpc8xx_lcd.c Nikita Kiryanov
2015-02-03 11:32 ` [U-Boot] [PATCH V2 05/13] lcd: atmel: introduce lcd_logo_set_cmap Nikita Kiryanov
2015-02-03 11:32 ` [U-Boot] [PATCH V2 06/13] lcd: mpc823: move mpc823-specific lcd_logo_set_cmap code to mpc8xx_lcd.c Nikita Kiryanov
2015-02-03 11:32 ` [U-Boot] [PATCH V2 07/13] lcd: logo: move generic cmap setting to lcd_logo_set_cmap() Nikita Kiryanov
2015-02-03 11:32 ` [U-Boot] [PATCH V2 08/13] lcd: introduce lcd_set_cmap Nikita Kiryanov
2015-02-03 11:32 ` [U-Boot] [PATCH V2 09/13] lcd: remove unused includes Nikita Kiryanov
2015-02-03 11:32 ` [U-Boot] [PATCH V2 10/13] lcd: various cleanups Nikita Kiryanov
2015-02-03 11:32 ` [U-Boot] [PATCH V2 11/13] lcd: rename bitmap_plot to better represent its functionality Nikita Kiryanov
2015-02-03 11:32 ` [U-Boot] [PATCH V2 12/13] lcd: dt: extract simplefb support Nikita Kiryanov
2015-02-03 11:32 ` [U-Boot] [PATCH V2 13/13] lcd: split splash code into its own function Nikita Kiryanov
2015-02-04  2:37 ` [U-Boot] [PATCH V2 00/13] common lcd refactor Josh Wu
2015-02-04  8:03 ` Bo Shen
2015-02-10 12:43 ` Anatolij Gustschin

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.