Patchwork [U-Boot,6/7] nhk8815: added lcd support

login
register
mail settings
Submitter Alessandro Rubini
Date April 15, 2010, 11:12 a.m.
Message ID <f36802d38f2494e472f6094a98e9195f3ffb80ca.1271329358.git.rubini@unipv.it>
Download mbox | patch
Permalink /patch/71760/
State Not Applicable
Delegated to: Albert ARIBAUD
Headers show

Comments

Alessandro Rubini - April 15, 2010, 11:12 a.m.
From: Alessandro Rubini <rubini@unipv.it>

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.

Signed-off-by: Alessandro Rubini <rubini@unipv.it>
Acked-by: Andrea Gallo <andrea.gallo@stericsson.com>
---
 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

Patch

diff --git a/board/st/nhk8815/Makefile b/board/st/nhk8815/Makefile
index 1bb1d2c..7155f12 100644
--- a/board/st/nhk8815/Makefile
+++ b/board/st/nhk8815/Makefile
@@ -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
diff --git a/board/st/nhk8815/lcd.c b/board/st/nhk8815/lcd.c
new file mode 100644
index 0000000..d3acb48
--- /dev/null
+++ b/board/st/nhk8815/lcd.c
@@ -0,0 +1,88 @@ 
+/*
+ * board/st/nhk8815/lcd.c: use amba clcd and STMPE2401 for backlight/reset
+ *
+ * Copyright 2009 Alessandro Rubini <rubini@unipv.it>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+#include <common.h>
+#include <lcd.h>
+#include <amba_clcd.h>
+#include <stmpe2401.h>
+
+/* Two configurations are supported: 32bpp and 16bpp */
+#if LCD_BPP == LCD_COLOR32
+#  define			CLCD_CNTL_VAL		0x0019182b
+#  define			CLCD_BPIX_VAL		5 /* 1<<5 = 32 */
+#elif LCD_BPP == LCD_COLOR16
+#  define			CLCD_CNTL_VAL		0x001d1829
+#  define			CLCD_BPIX_VAL		4 /* 1<<4 = 16 */
+#else
+#  error "Invalid LCD_BPP in config file"
+#endif
+
+/* Horribly, these are precomputed registers */
+struct clcd_config nhk8815_clcd_config = {
+	.address =	(struct clcd_registers *)NOMADIK_CLCDC_BASE,
+	.tim0 =		0xd52600c4,	/* horizontal timings */
+	.tim1 =		0x220a01df,	/* vertical timings */
+	.tim2 =		0x031f1821,	/* clock and signal polarity */
+	.tim3 =		0,		/* not used */
+	.cntl =		CLCD_CNTL_VAL,	/* control, pixel size etc */
+	.pixclock =	18*1000*1000,	/* 18 MHz */
+};
+
+/* This is the panel_info for generic boards. Too little info, actually */
+vidinfo_t panel_info = {
+	.vl_col =	800,
+	.vl_row =	480,
+	.vl_bpix =	CLCD_BPIX_VAL,
+	.priv =		&nhk8815_clcd_config,
+};
+
+/* Don't turn on (too early), but configure data lines and remove reset */
+void lcd_enable(void)
+{
+	int i;
+
+	/* Turn the alternate functions as needed */
+	for (i = 32; i <= 39; i++)
+		nmk_gpio_af(i, GPIO_ALT_B);
+
+	/* EXP1_GPIO_5 = output high -- remove reset from display */
+	pe_gpio_af(STMPE1, 5, PE_GPIO_AF_GPIO);
+	pe_gpio_dir(STMPE1, 5, 1);
+	pe_gpio_set(STMPE1, 5, 1);
+}
+
+/* Called from late_init: we turn on the backlight through port expander */
+int nhk8815_backlight_on(void)
+{
+	int i;
+
+	/* Turn the alternate functions as needed */
+	for (i = 32; i <= 39; i++)
+		nmk_gpio_af(i, GPIO_ALT_B);
+
+	/* EXP0_GPIO_21 = output high -- backlight */
+	pe_gpio_af(STMPE0, 21, PE_GPIO_AF_GPIO);
+	pe_gpio_dir(STMPE0, 21, 1);
+	pe_gpio_set(STMPE0, 21, 1);
+	return 0;
+}
diff --git a/board/st/nhk8815/nhk8815-devices.h b/board/st/nhk8815/nhk8815-devices.h
index 78252ed..aec5825 100644
--- a/board/st/nhk8815/nhk8815-devices.h
+++ b/board/st/nhk8815/nhk8815-devices.h
@@ -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__ */
diff --git a/board/st/nhk8815/nhk8815.c b/board/st/nhk8815/nhk8815.c
index fbabd15..fedb3c0 100644
--- a/board/st/nhk8815/nhk8815.c
+++ b/board/st/nhk8815/nhk8815.c
@@ -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;
 }
 
diff --git a/include/configs/nhk8815.h b/include/configs/nhk8815.h
index 5eb3cbc..bbeea91 100644
--- a/include/configs/nhk8815.h
+++ b/include/configs/nhk8815.h
@@ -133,6 +133,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