Skip to contentSkip to conversation

display and keypad support for nhk8815

PATCH New Alessandro Rubini 3 participants 19 messages Dec 5, 2009 – Mar 24, 2010

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

v3 cover display and keypad support for nhk8815

This patch series is very similar to V2 I sent on Nov 25th, only 2/9 and 9/9 are different.

Changes from V2:

* the clcd driver using a C structure instead of numeric defines for register offsets. Renamed previous clcdc_regs to clcd_config, since regs is now the hardware-description structure.

* added "address" field to clcd_config, so clcd.c doesn't include anithing specific to Nomadik and can be use unchanged by other clcd-equipped SoCs.

ps: Wolfgang: while I understand patches must be posted, I offered to avoid extra traffic if it was only a matter of removing printf. Won't do that again, lesson learnt.

Alessandro Rubini (9):
nhk8815: change the order of initialization
video: add amba-clcd prime-cell
include/nomadik.h: add physical address for cldc drivers/misc: add stmpe2401 port extender and keypad controller nhk8815.h: define we need stmpe
lcd: make 16bpp work
nhk8815: added keypad
nhk8815: start lower in RAM, so the 800x480 frame buffer fits
nhk8815: added lcd support

 board/st/nhk8815/Makefile          |    6 +-
 board/st/nhk8815/config.mk         |    8 +-
 board/st/nhk8815/keypad.c          |   99 +++++++++++++++++++
 board/st/nhk8815/lcd.c             |   88 +++++++++++++++++
 board/st/nhk8815/nhk8815-devices.h |    8 ++
 board/st/nhk8815/nhk8815.c         |   38 +++++--
 common/lcd.c                       |   27 ++++-
 drivers/misc/Makefile              |    1 +
 drivers/misc/stmpe2401.c           |  191 ++++++++++++++++++++++++++++++++++++
 drivers/video/Makefile             |    1 +
 drivers/video/amba.c               |   79 +++++++++++++++
 include/amba_clcd.h                |   77 +++++++++++++++
 include/configs/nhk8815.h          |   20 ++++-
 include/nomadik.h                  |    1 +
 include/stmpe2401.h                |   66 ++++++++++++
 15 files changed, 687 insertions(+), 23 deletions(-)
 create mode 100644 board/st/nhk8815/keypad.c
 create mode 100644 board/st/nhk8815/lcd.c
 create mode 100644 board/st/nhk8815/nhk8815-devices.h
 create mode 100644 drivers/misc/stmpe2401.c
 create mode 100644 drivers/video/amba.c
 create mode 100644 include/amba_clcd.h
 create mode 100644 include/stmpe2401.h
#1 lore raw

PATCH v3 1/9 nhk8815: change the order of initialization

From: Alessandro Rubini <[email protected]>

Some inizialization was in board_late_init(), but to satisfy drivers added in the next patches must be performed in normal board_init. This patch leaves board_late_init() empty, but later patches fill it.

---
 board/st/nhk8815/nhk8815.c |   31 +++++++++++++++++++++----------
 1 files changed, 21 insertions(+), 10 deletions(-)
board/st/nhk8815/nhk8815.c +21 -10
index faef810..eadce40 100644
@@ -60,22 +60,26 @@ int board_init(void)
 	writel(0x02100551, NOMADIK_FSMC_BASE + 0x04); /* FSMC_BTR0 */
 
 	icache_enable();
-	return 0;
-}
 
-int board_late_init(void)
-{
+	/*
+	 * Configure I2C pins, as we will use I2C in a later commit
+	 */
+
 	/* Set the two I2C gpio lines to be gpio high */
 	nmk_gpio_set(__SCL, 1);	nmk_gpio_set(__SDA, 1);
 	nmk_gpio_dir(__SCL, 1);	nmk_gpio_dir(__SDA, 1);
 	nmk_gpio_af(__SCL, GPIO_GPIO); nmk_gpio_af(__SDA, GPIO_GPIO);
 
-	/* Reset the I2C port expander, on GPIO77 */
-	nmk_gpio_af(77, GPIO_GPIO);
-	nmk_gpio_dir(77, 1);
-	nmk_gpio_set(77, 0);
-	udelay(10);
-	nmk_gpio_set(77, 1);
+	/* Put the two I2C port expanders out of reset, on GPIO77 and 79 */
+	{
+		int n[2]={77, 79};
+		int i;
+		for (i = 0; i < ARRAY_SIZE(n); i++) {
+			nmk_gpio_af(n[i], GPIO_GPIO);
+			nmk_gpio_dir(n[i], 1);
+			nmk_gpio_set(n[i], 1);
+		}
+	}
 
 	return 0;
 }
@@ -101,3 +105,10 @@ int board_eth_init(bd_t *bis)
 	return rc;
 }
 #endif
+
+/* Initialization callback, from lib_arm/board.c */
+int board_late_init(void)
+{
+	return 0;
+}
+
Signature · 1 line
1.6.0.2
#2 lore raw

PATCH v3 2/9 video: add amba-clcd prime-cell

In reply to Alessandro Rubini

From: Alessandro Rubini <[email protected]>

This adds support for the CLCD logic cell. It accepts precompiled register values for specific configuration through a board-supplied data structure. It is used by the Nomadik nhk8815, added by a later patch in this series.

---
 drivers/video/Makefile |    1 +
 drivers/video/amba.c   |   79 ++++++++++++++++++++++++++++++++++++++++++++++++
 include/amba_clcd.h    |   77 ++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 157 insertions(+), 0 deletions(-)
 create mode 100644 drivers/video/amba.c
 create mode 100644 include/amba_clcd.h
drivers/video/Makefile +1 -0
index bb6b5a0..a5e339a 100644
@@ -29,6 +29,7 @@ COBJS-$(CONFIG_ATI_RADEON_FB) += ati_radeon_fb.o
 COBJS-$(CONFIG_ATMEL_LCD) += atmel_lcdfb.o
 COBJS-$(CONFIG_CFB_CONSOLE) += cfb_console.o
 COBJS-$(CONFIG_S6E63D6) += s6e63d6.o
+COBJS-$(CONFIG_VIDEO_AMBA) += amba.o
 COBJS-$(CONFIG_VIDEO_CT69000) += ct69000.o
 COBJS-$(CONFIG_VIDEO_MB862xx) += mb862xx.o
 COBJS-$(CONFIG_VIDEO_MX3) += mx3fb.o
drivers/video/amba.c new file +79 -0

79 lines not on this page · raw message

include/amba_clcd.h new file +77 -0

77 lines not on this page · raw message

Signature · 1 line
1.6.0.2
#4 lore raw

PATCH v3 3/9 include/nomadik.h: add physical address for cldc

In reply to Alessandro Rubini

From: Alessandro Rubini <[email protected]>

---
 include/nomadik.h |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)
include/nomadik.h +1 -0
index d9405fd..ea65b2d 100644
@@ -4,6 +4,7 @@
 #define __NOMADIK_H__
 
 /* Base addresses of our peripherals */
+#define NOMADIK_CLCDC_BASE	0x10120000	/* CLCD Controller */
 #define NOMADIK_SRC_BASE	0x101E0000	/* System and Reset Cnt */
 #define NOMADIK_PMU_BASE	0x101E9000	/* Power Management Unit */
 #define NOMADIK_MPMC_BASE	0x10110000	/* SDRAM Controller */
Signature · 1 line
1.6.0.2
#6 lore raw

PATCH v3 4/9 drivers/misc: add stmpe2401 port extender and keypad controller

In reply to Alessandro Rubini

From: Alessandro Rubini <[email protected]>

This driver is an i2c device acting as a port extender. Since the keypad can be configured to act on specific row and column lines, the specific setup is passed by the board file. This is used by the Nomadik nhk8815, through a later patch in this series.

---
 drivers/misc/Makefile    |    1 +
 drivers/misc/stmpe2401.c |  191 ++++++++++++++++++++++++++++++++++++++++++++++
 include/stmpe2401.h      |   66 ++++++++++++++++
 3 files changed, 258 insertions(+), 0 deletions(-)
 create mode 100644 drivers/misc/stmpe2401.c
 create mode 100644 include/stmpe2401.h
drivers/misc/Makefile +1 -0
index f6df60f..76c009a 100644
@@ -30,6 +30,7 @@ COBJS-$(CONFIG_DS4510)  += ds4510.o
 COBJS-$(CONFIG_FSL_LAW) += fsl_law.o
 COBJS-$(CONFIG_NS87308) += ns87308.o
 COBJS-$(CONFIG_STATUS_LED) += status_led.o
+COBJS-$(CONFIG_STMPE2401) += stmpe2401.o
 COBJS-$(CONFIG_TWL4030_LED) += twl4030_led.o
 
 COBJS	:= $(COBJS-y)
drivers/misc/stmpe2401.c new file +191 -0

191 lines not on this page · raw message

include/stmpe2401.h new file +66 -0

66 lines not on this page · raw message

Signature · 1 line
1.6.0.2
#7 lore raw

PATCH v3 5/9 nhk8815.h: define we need stmpe

In reply to Alessandro Rubini

From: Alessandro Rubini <[email protected]>

---
 include/configs/nhk8815.h |    7 ++++++-
 1 files changed, 6 insertions(+), 1 deletions(-)
include/configs/nhk8815.h +6 -1
index a00c2fb..e1be45b 100644
@@ -110,7 +110,7 @@
 #define CONFIG_PL01x_PORTS	{ (void *)CFG_SERIAL0, (void *)CFG_SERIAL1 }
 #define CONFIG_PL011_CLOCK	48000000
 
-/* i2c, for the port extenders (uses gpio.c in board directory) */
+/* i2c, for the stmpe2401 port extenders (uses gpio.c in board directory) */
 #ifndef __ASSEMBLY__
 #include <asm/arch/gpio.h>
 #define CONFIG_CMD_I2C
@@ -126,6 +126,11 @@
 #define I2C_DELAY     (udelay(2))
 #endif /* __ASSEMBLY__ */
 
+/* Activate port extenders and define their i2c address */
+#define CONFIG_STMPE2401
+#define STMPE0  0x43
+#define STMPE1  0x44
+
 /* Ethernet */
 #define PCI_MEMORY_VADDR	0xe8000000
 #define PCI_IO_VADDR		0xee000000
Signature · 1 line
1.6.0.2
#8 lore raw

PATCH v3 6/9 lcd: make 16bpp work

In reply to Alessandro Rubini

From: Alessandro Rubini <[email protected]>

Support for 16bpp was supposed to be in the code but was not working. This makes it work and has been tested in the nhk8815 board.

---
 common/lcd.c |   27 +++++++++++++++++++++------
 1 files changed, 21 insertions(+), 6 deletions(-)
common/lcd.c +21 -6
index 4e31618..3d9bfdf 100644
@@ -63,7 +63,7 @@
 /************************************************************************/
 #ifdef CONFIG_LCD_LOGO
 # include <bmp_logo.h>		/* Get logo data, width and height	*/
-# if (CONSOLE_COLOR_WHITE >= BMP_LOGO_OFFSET)
+# if (CONSOLE_COLOR_WHITE >= BMP_LOGO_OFFSET) && (LCD_BPP != LCD_COLOR16)
 #  error Default Color Map overlaps with Logo Color Map
 # endif
 #endif
@@ -218,8 +218,12 @@ static void lcd_drawchars (ushort x, ushort y, uchar *str, int count)
 
 	for (row=0;  row < VIDEO_FONT_HEIGHT;  ++row, dest += lcd_line_length)  {
 		uchar *s = str;
-		uchar *d = dest;
 		int i;
+#if LCD_BPP == LCD_COLOR16
+		ushort *d = (ushort *)dest;
+#else
+		uchar *d = dest;
+#endif
 
 #if LCD_BPP == LCD_MONOCHROME
 		uchar rest = *d & -(1 << (8-off));
@@ -244,9 +248,8 @@ static void lcd_drawchars (ushort x, ushort y, uchar *str, int count)
 				bits <<= 1;
 			}
 #elif LCD_BPP == LCD_COLOR16
-			for (c=0; c<16; ++c) {
-				*d++ = (bits & 0x80) ?
-						lcd_color_fg : lcd_color_bg;
+			for (c=0; c<8; ++c) {
+				*d++ = (bits & 0x80) ? 0xffff : 0;
 				bits <<= 1;
 			}
 #endif
@@ -529,6 +532,13 @@ void bitmap_plot (int x, int y)
 		cmap = (ushort *)&(cp->lcd_cmap[BMP_LOGO_OFFSET*sizeof(ushort)]);
 #elif defined(CONFIG_ATMEL_LCD)
 		cmap = (uint *) (panel_info.mmio + ATMEL_LCDC_LUT(0));
+#else
+		/*
+		 * default case: generic system with no cmap (most likely 16bpp)
+		 * We set cmap to the source palette, so no change is done.
+		 * This avoids even more ifdef in the next stanza
+		 */
+		cmap = bmp_logo_palette;
 #endif
 
 		WATCHDOG_RESET();
@@ -567,10 +577,15 @@ void bitmap_plot (int x, int y)
 		}
 	}
 	else { /* true color mode */
+		u16 col16;
 		fb16 = (ushort *)(lcd_base + y * lcd_line_length + x);
 		for (i=0; i<BMP_LOGO_HEIGHT; ++i) {
 			for (j=0; j<BMP_LOGO_WIDTH; j++) {
-				fb16[j] = bmp_logo_palette[(bmap[j])];
+				col16 = bmp_logo_palette[(bmap[j]-16)];
+				fb16[j] =
+					((col16 & 0x000F) << 1) |
+					((col16 & 0x00F0) << 3) |
+					((col16 & 0x0F00) << 4);
 				}
 			bmap += BMP_LOGO_WIDTH;
 			fb16 += panel_info.vl_col;
Signature · 1 line
1.6.0.2
#16 lore raw

PATCH v3 7/9 nhk8815: added keypad

In reply to Alessandro Rubini

From: Alessandro Rubini <[email protected]>

This patch adds keypad support for the nhk8815 board, based on the stmpe2401 driver. The keypad hosts 16 keys, so each of them sends a string instead of a single key. The provided keymap is only an example and must be customized according to the use case.

---
 board/st/nhk8815/Makefile          |    5 ++-
 board/st/nhk8815/keypad.c          |   99 ++++++++++++++++++++++++++++++++++++
 board/st/nhk8815/nhk8815-devices.h |    7 +++
 board/st/nhk8815/nhk8815.c         |    4 ++
 include/configs/nhk8815.h          |    3 +
 5 files changed, 117 insertions(+), 1 deletions(-)
 create mode 100644 board/st/nhk8815/keypad.c
 create mode 100644 board/st/nhk8815/nhk8815-devices.h
board/st/nhk8815/Makefile +4 -1
index b37fe53..1bb1d2c 100644
@@ -29,7 +29,10 @@ include $(TOPDIR)/config.mk
 
 LIB	= $(obj)lib$(BOARD).a
 
-COBJS	:= nhk8815.o
+COBJS-y	:= nhk8815.o
+COBJS-$(CONFIG_NHK8815_KEYPAD) += keypad.o
+
+COBJS	:= $(COBJS-y)
 SOBJS	:= platform.o
 
 SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c)
board/st/nhk8815/keypad.c new file +99 -0

99 lines not on this page · raw message

board/st/nhk8815/nhk8815-devices.h new file +7 -0
new file mode 100644
index 0000000..78252ed
@@ -0,0 +1,7 @@
+#ifndef __NHK8815_DEVICES__
+#define __NHK8815_DEVICES__
+
+/* Prototypes for functions exported by device files in this directory */
+extern int nhk8815_keypad_init(void);          /* ./keypad.c */
+
+#endif /* __NHK8815_DEVICES__ */
board/st/nhk8815/nhk8815.c +4 -0
index eadce40..fbabd15 100644
@@ -29,6 +29,7 @@
 #include <netdev.h>
 #include <asm/io.h>
 #include <asm/arch/gpio.h>
+#include "nhk8815-devices.h"
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -109,6 +110,9 @@ int board_eth_init(bd_t *bis)
 /* Initialization callback, from lib_arm/board.c */
 int board_late_init(void)
 {
+#ifdef CONFIG_NHK8815_KEYPAD
+	nhk8815_keypad_init();
+#endif
 	return 0;
 }
 
include/configs/nhk8815.h +3 -0
index e1be45b..f9dbd7a 100644
@@ -131,6 +131,9 @@
 #define STMPE0  0x43
 #define STMPE1  0x44
 
+/* Keypad using stmpe2401 */
+#define CONFIG_NHK8815_KEYPAD
+
 /* Ethernet */
 #define PCI_MEMORY_VADDR	0xe8000000
 #define PCI_IO_VADDR		0xee000000
Signature · 1 line
1.6.0.2
#17 lore raw

PATCH v3 8/9 nhk8815: start lower in RAM, so the 800x480 frame buffer fits

In reply to Alessandro Rubini

From: Alessandro Rubini <[email protected]>

This simply moves u-boot to a lower address, as the frame buffer is allocated after u-boot itself in memory.

---
 board/st/nhk8815/config.mk |    8 +++-----
 1 files changed, 3 insertions(+), 5 deletions(-)
board/st/nhk8815/config.mk +3 -5
index 590393b..6e5e358 100644
@@ -18,9 +18,7 @@
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 # MA 02111-1307 USA
-#
-#
-# image should be loaded at 0x01000000
-#
 
-TEXT_BASE = 0x03F80000
+# Start 4MB before the end, as the frame buffer is allocate after
+# u-boot. 800x480 @ 32bpp takes 1.5MB alone, so let's play safe.
+TEXT_BASE = 0x03c00000
Signature · 1 line
1.6.0.2
#18 lore raw

PATCH v3 9/9 nhk8815: added lcd support

In reply to Alessandro Rubini

From: Alessandro Rubini <[email protected]>

This adds lcd support for the board. It includes defines for 32-bit parameter as well, although support for LCD_COLOR32 is not yet in u-boot. This uses the stmpe2401 to turn on display backlight.

---
 board/st/nhk8815/Makefile          |    1 +
 board/st/nhk8815/lcd.c             |   88 ++++++++++++++++++++++++++++++++++++
 board/st/nhk8815/nhk8815-devices.h |    1 +
 board/st/nhk8815/nhk8815.c         |    3 +
 include/configs/nhk8815.h          |   10 ++++
 5 files changed, 103 insertions(+), 0 deletions(-)
 create mode 100644 board/st/nhk8815/lcd.c
board/st/nhk8815/Makefile +1 -0
index 1bb1d2c..7155f12 100644
@@ -31,6 +31,7 @@ LIB	= $(obj)lib$(BOARD).a
 
 COBJS-y	:= nhk8815.o
 COBJS-$(CONFIG_NHK8815_KEYPAD) += keypad.o
+COBJS-$(CONFIG_LCD) += lcd.o
 
 COBJS	:= $(COBJS-y)
 SOBJS	:= platform.o
board/st/nhk8815/lcd.c new file +88 -0

88 lines not on this page · raw message

board/st/nhk8815/nhk8815-devices.h +1 -0
index 78252ed..aec5825 100644
@@ -3,5 +3,6 @@
 
 /* Prototypes for functions exported by device files in this directory */
 extern int nhk8815_keypad_init(void);          /* ./keypad.c */
+extern int nhk8815_backlight_on(void);		/* in ./lcd.c */
 
 #endif /* __NHK8815_DEVICES__ */
board/st/nhk8815/nhk8815.c +3 -0
index fbabd15..fedb3c0 100644
@@ -113,6 +113,9 @@ int board_late_init(void)
 #ifdef CONFIG_NHK8815_KEYPAD
 	nhk8815_keypad_init();
 #endif
+#ifdef CONFIG_LCD
+	nhk8815_backlight_on();
+#endif
 	return 0;
 }
 
include/configs/nhk8815.h +10 -0
index f9dbd7a..ad098d9 100644
@@ -134,6 +134,16 @@
 /* Keypad using stmpe2401 */
 #define CONFIG_NHK8815_KEYPAD
 
+/* Display support */
+#define CONFIG_LCD
+#define CONFIG_LCD_LOGO
+#define CONFIG_LCD_INFO_BELOW_LOGO
+#define CONFIG_SYS_WHITE_ON_BLACK
+#define LCD_BPP				LCD_COLOR16
+#define CONFIG_VIDEO_AMBA
+#define CONFIG_SYS_CONSOLE_IS_IN_ENV	1
+#define CONFIG_CONSOLE_MUX
+
 /* Ethernet */
 #define PCI_MEMORY_VADDR	0xe8000000
 #define PCI_IO_VADDR		0xee000000
Signature · 1 line
1.6.0.2
#9 lore raw

PATCH v3 6/9 lcd: make 16bpp work

In reply to Alessandro Rubini

Sorry for this late though about lcd issues.

common/lcd.c static void lcd_drawchars (ushort x, ushort y, uchar *str, int count) · line 252

Quoted 2 lines
common/lcd.c +1 -1
-				lcd_color_fg : lcd_color_bg;
+				*d++ = (bits & 0x80) ? 0xffff : 0;

Here my patch uses hardwired 0 and ~0 for 16-bit pixels. Anatolij suggested to use lcd_color_fg and lcd_color_bg as in the original code, but unfortunately it doesn't work.

lcd_color_fg is set by common/lcd.c itself, using this function:

    static void lcd_setfgcolor (int color)
    {
    #ifdef CONFIG_ATMEL_LCD
    	lcd_color_fg = color;
    #else
    	lcd_color_fg = color & 0x0F;
    #endif
    }   

So, however white I declare my color, it turns out blue. While I'd understand a difference based on LCD_COLOR8 and LCD_COLOR16 (but even in that case I'd request the caller to do the right thing avoiding this late "fix"), I really can't tell why the atmel display is different from other ones.

It's true that I can force lcd_color_fg to whatever I want, but only after lcd_clear() is called. Moreover, if there's centralized I wouldn't cowardly change it behind it's back.

This is one of the reasons why my original post was an RFC. common/lcd.c is quite a mess and touching it is difficult.

At this point I still think forcing 0xffff and 0, ignoring lcd_color_fg, is the right thing to do at least until atmel specifics are removed from common/lcd.c.

BTW: I have a 9263ek an a 9261ek, so I might be able to try to propose an atmel-related cleanup in the future, but not on short term, unfortunately.

/alessandro

#3 lore raw

PATCH v3 2/9 video: add amba-clcd prime-cell

In reply to Alessandro Rubini
Quoted 9 lines · On Sat, 5 Dec 2009 13:39:31 +0100 Alessandro Rubini <[email protected]>…

From: Alessandro Rubini <[email protected]>

This adds support for the CLCD logic cell. It accepts precompiled register values for specific configuration through a board-supplied data structure. It is used by the Nomadik nhk8815, added by a later patch in this series.

Quoted 7 lines
---
 drivers/video/Makefile |    1 +
 drivers/video/amba.c   |   79 ++++++++++++++++++++++++++++++++++++++++++++++++
 include/amba_clcd.h    |   77 ++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 157 insertions(+), 0 deletions(-)
 create mode 100644 drivers/video/amba.c
 create mode 100644 include/amba_clcd.h

Applied to u-boot-video/next. Thanks!

Best regards,
Anatolij

#5 lore raw

PATCH v3 3/9 include/nomadik.h: add physical address for cldc

In reply to Alessandro Rubini
Quoted 8 lines · On Sat, 5 Dec 2009 13:39:41 +0100 Alessandro Rubini <[email protected]>…

From: Alessandro Rubini <[email protected]>

---
 include/nomadik.h |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

Applied to u-boot-video/next. Thanks!

Best regards,
Anatolij

#10 lore raw

PATCH 1/1 lcd: remove CONFIG_ATMEL_LCD ifdefs from lcd_setfgcolor

In reply to Alessandro Rubini

Not all boards defining LCD_COLOR16 are able to set lcd_color_fg/lcd_color_bg correctly. The issue seems to be caused by CONFIG_ATMEL_LCD ifdefs in lcd_setfgcolor() and lcd_setbgcolor(). Actually, the color values passed to these functions are already correct, we don't need to fix them. So remove ifdefs here.

---
Alessandro, please test. Thanks.

 common/lcd.c |    8 --------
 1 files changed, 0 insertions(+), 8 deletions(-)
common/lcd.c +0 -8
index 4e31618..db799db 100644
@@ -456,22 +456,14 @@ ulong lcd_setmem (ulong addr)
 
 static void lcd_setfgcolor (int color)
 {
-#ifdef CONFIG_ATMEL_LCD
 	lcd_color_fg = color;
-#else
-	lcd_color_fg = color & 0x0F;
-#endif
 }
 
 /*----------------------------------------------------------------------*/
 
 static void lcd_setbgcolor (int color)
 {
-#ifdef CONFIG_ATMEL_LCD
 	lcd_color_bg = color;
-#else
-	lcd_color_bg = color & 0x0F;
-#endif
 }
 
 /*----------------------------------------------------------------------*/
Signature · 1 line
1.5.6.3
#11 lore raw

PATCH 1/1 lcd: remove CONFIG_ATMEL_LCD ifdefs from lcd_setfgcolor

Quoted 9 lines · On Sat, 12 Dec 2009 21:52:23 +0100 Anatolij Gustschin <[email protected]> wrote:

Not all boards defining LCD_COLOR16 are able to set lcd_color_fg/lcd_color_bg correctly. The issue seems to be caused by CONFIG_ATMEL_LCD ifdefs in lcd_setfgcolor() and lcd_setbgcolor(). Actually, the color values passed to these functions are already correct, we don't need to fix them. So remove ifdefs here.

Applied to u-boot-video/master

Anatolij

#12 lore raw

PATCH 1/1 lcd: remove CONFIG_ATMEL_LCD ifdefs from lcd_setfgcolor

Quoted 1 line

Applied to u-boot-video/master

Thanks.

Then my "[PATCH V3 6/9] lcd: make 16bpp work" can use :

    ? lcd_color_fg : lcd_color_bg;

instead of this worse choice that I sent in:

    ? 0xffff : 0;

I don't feel like I should resend, but if asked to I'll resend.

/alessandro

#13 lore raw

PATCH 1/1 lcd: make 16bpp work

In reply to Alessandro Rubini

From: Alessandro Rubini <[email protected]>

Support for 16bpp was supposed to be in the code but was not working. This makes it work and has been tested in the nhk8815 board.

---
 common/lcd.c |   24 ++++++++++++++++++++----
 1 files changed, 20 insertions(+), 4 deletions(-)
common/lcd.c +20 -4
index db799db..64fb1c6 100644
@@ -63,7 +63,7 @@
 /************************************************************************/
 #ifdef CONFIG_LCD_LOGO
 # include <bmp_logo.h>		/* Get logo data, width and height	*/
-# if (CONSOLE_COLOR_WHITE >= BMP_LOGO_OFFSET)
+# if (CONSOLE_COLOR_WHITE >= BMP_LOGO_OFFSET) && (LCD_BPP != LCD_COLOR16)
 #  error Default Color Map overlaps with Logo Color Map
 # endif
 #endif
@@ -218,8 +218,12 @@ static void lcd_drawchars (ushort x, ushort y, uchar *str, int count)
 
 	for (row=0;  row < VIDEO_FONT_HEIGHT;  ++row, dest += lcd_line_length)  {
 		uchar *s = str;
-		uchar *d = dest;
 		int i;
+#if LCD_BPP == LCD_COLOR16
+		ushort *d = (ushort *)dest;
+#else
+		uchar *d = dest;
+#endif
 
 #if LCD_BPP == LCD_MONOCHROME
 		uchar rest = *d & -(1 << (8-off));
@@ -244,7 +248,7 @@ static void lcd_drawchars (ushort x, ushort y, uchar *str, int count)
 				bits <<= 1;
 			}
 #elif LCD_BPP == LCD_COLOR16
-			for (c=0; c<16; ++c) {
+			for (c=0; c<8; ++c) {
 				*d++ = (bits & 0x80) ?
 						lcd_color_fg : lcd_color_bg;
 				bits <<= 1;
@@ -521,6 +525,13 @@ void bitmap_plot (int x, int y)
 		cmap = (ushort *)&(cp->lcd_cmap[BMP_LOGO_OFFSET*sizeof(ushort)]);
 #elif defined(CONFIG_ATMEL_LCD)
 		cmap = (uint *) (panel_info.mmio + ATMEL_LCDC_LUT(0));
+#else
+		/*
+		 * default case: generic system with no cmap (most likely 16bpp)
+		 * We set cmap to the source palette, so no change is done.
+		 * This avoids even more ifdef in the next stanza
+		 */
+		cmap = bmp_logo_palette;
 #endif
 
 		WATCHDOG_RESET();
@@ -559,10 +570,15 @@ void bitmap_plot (int x, int y)
 		}
 	}
 	else { /* true color mode */
+		u16 col16;
 		fb16 = (ushort *)(lcd_base + y * lcd_line_length + x);
 		for (i=0; i<BMP_LOGO_HEIGHT; ++i) {
 			for (j=0; j<BMP_LOGO_WIDTH; j++) {
-				fb16[j] = bmp_logo_palette[(bmap[j])];
+				col16 = bmp_logo_palette[(bmap[j]-16)];
+				fb16[j] =
+					((col16 & 0x000F) << 1) |
+					((col16 & 0x00F0) << 3) |
+					((col16 & 0x0F00) << 4);
 				}
 			bmap += BMP_LOGO_WIDTH;
 			fb16 += panel_info.vl_col;
Signature · 1 line
1.6.3.3
#14 lore raw

PATCH 1/1 lcd: make 16bpp work

Thank Anatolij. I re-tested it as first patch applied on master.

This is my current sequence (git log --reverse ...). The first is yours, the next is my pending stack.

f2a4dcb... lcd: make 16bpp work
79e3c0e... Nomadik: fix reset_timer()
be8fb55... nhk8815: change the order of initialization e6a9a8a... drivers/misc: add stmpe2401 port extender and keypad controller aaf173b... nhk8815.h: define we need stmpe
b6ce3d2... nhk8815: added keypad
ce173d5... nhk8815: start lower in RAM, so the 800x480 frame buffer fits f6b2955... nhk8815: added lcd support

The latter patches had no conflicts during rebase, so I don't think I need to post them again. I re-run "./MAKEALL arm" with no related issues, either.

As Wolfgang noted, I'm now up to you and Tom (added to Cc:). If there's any step needed on my side, please tell me.

Thanks
/alessandro

#15 lore raw

PATCH 1/1 lcd: make 16bpp work

In reply to Anatolij Gustschin
Quoted 11 lines · On Sat, 13 Mar 2010 17:44:08 +0100 Anatolij Gustschin <[email protected]> wrote:

From: Alessandro Rubini <[email protected]>

Support for 16bpp was supposed to be in the code but was not working. This makes it work and has been tested in the nhk8815 board.

---
 common/lcd.c |   24 ++++++++++++++++++++----
 1 files changed, 20 insertions(+), 4 deletions(-)

Applied to u-boot-video/master. Thanks.