[U-Boot] [PATCH 6/6] ATSTK1000: LCD support

Haavard Skinnemoen haavard.skinnemoen at atmel.com
Tue Sep 2 11:20:54 CEST 2008


Add the necessary glue and enable LCD support on ATSTK1002 and
ATSTK1006.

Signed-off-by: Haavard Skinnemoen <haavard.skinnemoen at atmel.com>
---
 board/atmel/atstk1000/atstk1000.c |   97 +++++++++++++++++++++++++++++++++++++
 include/configs/atstk1002.h       |   22 ++++++++
 include/configs/atstk1006.h       |   23 +++++++++
 3 files changed, 142 insertions(+), 0 deletions(-)

diff --git a/board/atmel/atstk1000/atstk1000.c b/board/atmel/atstk1000/atstk1000.c
index 31174d3..d88db5d 100644
--- a/board/atmel/atstk1000/atstk1000.c
+++ b/board/atmel/atstk1000/atstk1000.c
@@ -24,6 +24,7 @@
 #include <asm/io.h>
 #include <asm/sdram.h>
 #include <asm/arch/clk.h>
+#include <asm/arch/gpio.h>
 #include <asm/arch/hmatrix.h>
 #include <asm/arch/portmux.h>
 
@@ -72,8 +73,59 @@ static const struct sdram_config sdram_config = {
 #endif
 };
 
+#ifdef CONFIG_LCD
+#include <lcd.h>
+#include <atmel_lcdc.h>
+
+vidinfo_t panel_info = {
+	.vl_col			= 320,
+	.vl_row			= 240,
+	.vl_clk			= 6891000,
+	.vl_sync		= ATMEL_LCDC_INVCLK_INVERTED
+					| ATMEL_LCDC_INVFRAME_INVERTED
+					| ATMEL_LCDC_INVLINE_INVERTED,
+	.vl_bpix		= LCD_BPP,
+	.vl_tft			= 1,
+	.vl_hsync_len		= 16,
+	.vl_left_margin		= 17,
+	.vl_right_margin	= 33,
+	.vl_vsync_len		= 1,
+	.vl_upper_margin	= 10,
+	.vl_lower_margin	= 10,
+	.mmio			= LCDC_BASE,
+};
+
+#ifdef CONFIG_LCD_INFO
+#include <version.h>
+
+void lcd_show_board_info(void)
+{
+	unsigned int i;
+	unsigned long dram_size = 0;
+	char mhz[32];
+
+	lcd_printf("%s\n", U_BOOT_VERSION);
+	lcd_printf("%s (C) 2008 Atmel Corporation\n", CFG_BOARD_NAME);
+	lcd_printf("%s CPU at %s MHz\n", CFG_CPU_NAME, strmhz(mhz, gd->cpu_hz));
+	for (i = 0; i < CONFIG_NR_DRAM_BANKS; i++)
+		dram_size += gd->bd->bi_dram[i].size;
+	lcd_printf("  %ld MiB SDRAM, %ld MiB Flash\n",
+			dram_size >> 20, gd->bd->bi_flashsize >> 20);
+}
+#endif
+
+int board_postclk_init(void)
+{
+	gclk_set_rate(GCLK_LCDC_PIXCLK, GCLK_PARENT_PLL0,
+			CONFIG_LCDC_PIXCLK_RATE);
+	return 0;
+}
+#endif
+
 int board_early_init_f(void)
 {
+	unsigned int spi_cs_mask = 0;
+
 	/* Enable SDRAM in the EBI mux */
 	hmatrix_slave_write(EBI, SFR, HMATRIX_BIT(EBI_SDRAM_ENABLE));
 
@@ -88,6 +140,16 @@ int board_early_init_f(void)
 #if defined(CONFIG_MMC)
 	portmux_enable_mmci(0, PORTMUX_MMCI_4BIT, PORTMUX_DRIVE_LOW);
 #endif
+#if defined(CONFIG_ATMEL_SPI)
+#if defined(CONFIG_LCD)
+	spi_cs_mask |= 1 << CFG_LCD_NPCS;
+#endif
+#endif
+	if (spi_cs_mask)
+		portmux_enable_spi0(spi_cs_mask, PORTMUX_DRIVE_LOW);
+#if defined(CONFIG_LCD)
+	portmux_enable_lcdc();
+#endif
 
 	return 0;
 }
@@ -133,3 +195,38 @@ int board_eth_init(bd_t *bi)
 	return 0;
 }
 #endif
+
+#ifdef CONFIG_ATMEL_SPI
+#include <spi.h>
+
+int spi_cs_is_valid(unsigned int bus, unsigned int cs)
+{
+#if defined(CONFIG_LCD)
+	if (bus == 0 && cs == CFG_LCD_NPCS)
+		return 1;
+#endif
+	return 0;
+}
+
+void spi_cs_activate(struct spi_slave *slave)
+{
+	switch (slave->cs) {
+#ifdef CONFIG_LCD
+	case CFG_LCD_NPCS:
+		gpio_set_value(CFG_LCD_NPCS_PIN, 0);
+		break;
+#endif
+	}
+}
+
+void spi_cs_deactivate(struct spi_slave *slave)
+{
+	switch (slave->cs) {
+#ifdef CONFIG_LCD
+	case CFG_LCD_NPCS:
+		gpio_set_value(CFG_LCD_NPCS_PIN, 1);
+		break;
+#endif
+	}
+}
+#endif /* CONFIG_ATMEL_SPI */
diff --git a/include/configs/atstk1002.h b/include/configs/atstk1002.h
index 4509416..dc20620 100644
--- a/include/configs/atstk1002.h
+++ b/include/configs/atstk1002.h
@@ -32,6 +32,9 @@
 #define CONFIG_ATSTK1002		1
 #define CONFIG_ATSTK1000		1
 
+#define CFG_CPU_NAME			"AT32AP7000"
+#define CFG_BOARD_NAME			"ATSTK1002"
+
 #define CONFIG_ATSTK1000_EXT_FLASH	1
 
 /*
@@ -129,6 +132,8 @@
 #define CONFIG_BOOTP_SUBNETMASK
 #define CONFIG_BOOTP_GATEWAY
 
+/* LCD support. This will affect a few other settings */
+#define CONFIG_LCD			1
 
 /*
  * Command line configuration.
@@ -158,6 +163,23 @@
 #define CONFIG_MMC			1
 #define CONFIG_ATMEL_MCI		1
 
+#ifdef CONFIG_LCD
+/* Second MACB conflicts with LCD signals */
+#undef CONFIG_ATSTK1000_MACB1
+#define CONFIG_ATMEL_SPI		1
+#define CFG_LCD_NPCS			1
+#define CFG_LCD_NPCS_PIN		GPIO_PIN_PA(4)
+#define CONFIG_ATMEL_LCD		1
+#define CONFIG_LCDC_PIXCLK_RATE		PLL0_RATE
+#define CONFIG_ATMEL_LCD_BGR555		1
+#define LCD_BPP				LCD_COLOR8
+#define CONFIG_LCD_LOGO			1
+#define CONFIG_LCD_INFO			1
+#define CONFIG_LCD_INFO_BELOW_LOGO	1
+#define CFG_WHITE_ON_BLACK		1
+#define CFG_CONSOLE_IS_IN_ENV		1
+#endif
+
 #define CFG_DCACHE_LINESZ		32
 #define CFG_ICACHE_LINESZ		32
 
diff --git a/include/configs/atstk1006.h b/include/configs/atstk1006.h
index 8a6c044..b97032f 100644
--- a/include/configs/atstk1006.h
+++ b/include/configs/atstk1006.h
@@ -32,6 +32,9 @@
 #define CONFIG_ATSTK1006		1
 #define CONFIG_ATSTK1000		1
 
+#define CFG_CPU_NAME			"AT32AP7000"
+#define CFG_BOARD_NAME			"ATSTK1006"
+
 #define CONFIG_ATSTK1000_EXT_FLASH	1
 
 /*
@@ -130,6 +133,9 @@
 #define CONFIG_BOOTP_GATEWAY
 
 
+/* LCD support. This will affect a few other settings */
+#define CONFIG_LCD			1
+
 /*
  * Command line configuration.
  */
@@ -158,6 +164,23 @@
 #define CONFIG_MMC			1
 #define CONFIG_ATMEL_MCI		1
 
+#ifdef CONFIG_LCD
+/* Second MACB conflicts with LCD signals */
+#undef CONFIG_ATSTK1000_MACB1
+#define CONFIG_ATMEL_SPI		1
+#define CFG_LCD_NPCS			1
+#define CFG_LCD_NPCS_PIN		GPIO_PIN_PA(4)
+#define CONFIG_ATMEL_LCD		1
+#define CONFIG_LCDC_PIXCLK_RATE		PLL0_RATE
+#define CONFIG_ATMEL_LCD_BGR555		1
+#define LCD_BPP				LCD_COLOR8
+#define CONFIG_LCD_LOGO			1
+#define CONFIG_LCD_INFO			1
+#define CONFIG_LCD_INFO_BELOW_LOGO	1
+#define CFG_WHITE_ON_BLACK		1
+#define CFG_CONSOLE_IS_IN_ENV		1
+#endif
+
 #define CFG_DCACHE_LINESZ		32
 #define CFG_ICACHE_LINESZ		32
 
-- 
1.5.6.3



More information about the U-Boot mailing list