summaryrefslogtreecommitdiff
path: root/common/lcd.c
diff options
context:
space:
mode:
Diffstat (limited to 'common/lcd.c')
-rw-r--r--common/lcd.c112
1 files changed, 110 insertions, 2 deletions
diff --git a/common/lcd.c b/common/lcd.c
index eaed2abd805..d0b130938e1 100644
--- a/common/lcd.c
+++ b/common/lcd.c
@@ -50,6 +50,11 @@
#include <lcdvideo.h>
#endif
+#if defined(CONFIG_AT91SAM9261EK) || defined(CONFIG_AT91SAM9263EK) || \
+ defined(CONFIG_AT91SAM9RLEK)
+#define CONFIG_AT91_LCD
+#endif
+
#ifdef CONFIG_LCD
/************************************************************************/
@@ -354,7 +359,11 @@ int drv_lcd_init (void)
strcpy (lcddev.name, "lcd");
lcddev.ext = 0; /* No extensions */
+#ifdef CFG_CONSOLE_IS_SERIAL
+ lcddev.flags = 0;
+#else
lcddev.flags = DEV_FLAGS_OUTPUT; /* Output only */
+#endif
lcddev.putc = lcd_putc; /* 'putc' function */
lcddev.puts = lcd_puts; /* 'puts' function */
@@ -474,14 +483,22 @@ ulong lcd_setmem (ulong addr)
static void lcd_setfgcolor (int color)
{
- lcd_color_fg = color & 0x0F;
+#if defined(CONFIG_AT91SAM9261EK) || defined(CONFIG_AT91SAM9263EK)
+ lcd_color_fg = color;
+#else
+ lcd_color_fg = color & 0x0F;
+#endif
}
/*----------------------------------------------------------------------*/
static void lcd_setbgcolor (int color)
{
- lcd_color_bg = color & 0x0F;
+#if defined(CONFIG_AT91SAM9261EK) || defined(CONFIG_AT91SAM9263EK)
+ lcd_color_bg = color;
+#else
+ lcd_color_bg = color & 0x0F;
+#endif
}
/*----------------------------------------------------------------------*/
@@ -508,7 +525,11 @@ static int lcd_getbgcolor (void)
#ifdef CONFIG_LCD_LOGO
void bitmap_plot (int x, int y)
{
+#if defined(CONFIG_AT91_LCD)
+ uint *cmap;
+#else
ushort *cmap;
+#endif
ushort i, j;
uchar *bmap;
uchar *fb;
@@ -533,21 +554,43 @@ void bitmap_plot (int x, int y)
cmap = (ushort *)fbi->palette;
#elif defined(CONFIG_MPC823)
cmap = (ushort *)&(cp->lcd_cmap[BMP_LOGO_OFFSET*sizeof(ushort)]);
+#elif defined(CONFIG_AT91_LCD)
+ cmap = (uint *) panel_info.controller.lcdc->LCDC_LUT_ENTRY;
#endif
+#if !defined(CONFIG_AT91_LCD)
WATCHDOG_RESET();
+#endif
/* Set color map */
for (i=0; i<(sizeof(bmp_logo_palette)/(sizeof(ushort))); ++i) {
ushort colreg = bmp_logo_palette[i];
+ ushort lcdc_lut_entry;
#ifdef CFG_INVERT_COLORS
*cmap++ = 0xffff - colreg;
#else
+#if defined(CONFIG_AT91_LCD)
+#if defined(CONFIG_AT91SAM9261EK) || defined(CONFIG_AT91SAM9263EK)
+ lcdc_lut_entry = ((colreg & 0x0F) << 11); /* get the blue color */
+ lcdc_lut_entry |= ((colreg & 0xF0) << 2); /* get the green color */
+ lcdc_lut_entry |= ((colreg & 0xF00) >> 7); /* get the red color */
+#elif defined(CONFIG_AT91SAM9RLEK)
+ lcdc_lut_entry = ((colreg & 0x0F) << 1); /* get the blue color */
+ lcdc_lut_entry |= ((colreg & 0xF0) << 3); /* get the green color */
+ lcdc_lut_entry |= ((colreg & 0xF00)<< 4); /* get the red color */
+#endif
+
+ *(cmap + BMP_LOGO_OFFSET) = lcdc_lut_entry;
+ cmap++;
+#else
*cmap++ = colreg;
#endif
+#endif
}
+#if !defined(CONFIG_AT91_LCD)
WATCHDOG_RESET();
+#endif
for (i=0; i<BMP_LOGO_HEIGHT; ++i) {
memcpy (fb, bmap, BMP_LOGO_WIDTH);
@@ -566,7 +609,10 @@ void bitmap_plot (int x, int y)
}
}
+#if !defined(CONFIG_AT91_LCD)
WATCHDOG_RESET();
+#endif
+
}
#endif /* CONFIG_LCD_LOGO */
@@ -578,9 +624,15 @@ void bitmap_plot (int x, int y)
*/
int lcd_display_bitmap(ulong bmp_image, int x, int y)
{
+#if defined(CONFIG_AT91_LCD)
+ uint *cmap;
+#else
+
#if !defined(CONFIG_MCC200)
ushort *cmap;
#endif
+
+#endif
ushort i, j;
uchar *fb;
bmp_image_t *bmp=(bmp_image_t *)bmp_image;
@@ -633,6 +685,8 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)
cmap = (ushort *)fbi->palette;
#elif defined(CONFIG_MPC823)
cmap = (ushort *)&(cp->lcd_cmap[255*sizeof(ushort)]);
+#elif defined(CONFIG_AT91_LCD)
+ cmap = (uint *) panel_info.controller.lcdc->LCDC_LUT_ENTRY;
#else
# error "Don't know location of color map"
#endif
@@ -765,6 +819,60 @@ static void *lcd_logo (void)
# endif /* CONFIG_LCD_INFO */
#endif /* CONFIG_MPC823 */
+#if defined(CONFIG_AT91_LCD)
+#ifdef CONFIG_LCD_INFO
+ sprintf (info, "%s %s", U_BOOT_VERSION, __DATE__);
+ lcd_drawchars (LCD_INFO_X, LCD_INFO_Y, info, strlen(info));
+
+ sprintf (info, "(C) 2006 ATMEL Corp");
+ lcd_drawchars (LCD_INFO_X, LCD_INFO_Y + VIDEO_FONT_HEIGHT,
+ info, strlen(info));
+
+ sprintf (info, "at91support@atmel.com");
+ lcd_drawchars (LCD_INFO_X, LCD_INFO_Y + VIDEO_FONT_HEIGHT * 2,
+ info, strlen(info));
+
+#ifdef CONFIG_LCD_INFO_BELOW_LOGO
+
+#ifdef CONFIG_AT91SAM9261EK
+ sprintf (info, "AT91SAM9261 CPU at %s MHz", "200");
+#elif CONFIG_AT91SAM9263EK
+ sprintf (info, "AT91SAM9263 CPU at %s MHz", "200");
+#elif CONFIG_AT91SAM9RLEK
+ sprintf (info, "AT91SAM9RL CPU at %s MHz", "200");
+#endif
+ lcd_drawchars (LCD_INFO_X, LCD_INFO_Y + VIDEO_FONT_HEIGHT * 3,
+ info, strlen(info));
+ sprintf (info, "%ld MB SDRAM,%ld MB NandFlash",
+ 64,
+ 256);
+ lcd_drawchars (LCD_INFO_X, LCD_INFO_Y + VIDEO_FONT_HEIGHT * 4,
+ info, strlen(info));
+#else
+ /* leave one blank line */
+#ifdef CONFIG_AT91SAM9261EK
+ sprintf (info, "AT91SAM9261 CPU at %s MHz, %ld MB SDRAM, %ld MB NandFlash",
+ "200",
+ 64,
+ 256);
+#elif CONFIG_AT91SAM9263EK
+ sprintf (info, "AT91SAM9263 CPU at %s MHz, %ld MB SDRAM, %ld MB NandFlash",
+ "200",
+ 64,
+ 256);
+#elif CONFIG_AT91SAM9RLEK
+ sprintf (info, "AT91SAM9RL CPU at %s MHz, %ld MB SDRAM, %ld MB NandFlash",
+ "200",
+ 64,
+ 256);
+#endif
+ lcd_drawchars (LCD_INFO_X, LCD_INFO_Y + VIDEO_FONT_HEIGHT * 4,
+ info, strlen(info));
+
+#endif /* CONFIG_LCD_INFO_BELOW_LOGO */
+#endif /* CONFIG_LCD_INFO */
+#endif /* CONFIG_AT91_LCD */
+
#if defined(CONFIG_LCD_LOGO) && !defined(CONFIG_LCD_INFO_BELOW_LOGO)
return ((void *)((ulong)lcd_base + BMP_LOGO_HEIGHT * lcd_line_length));
#else