|
@@ -1,5 +1,5 @@
|
|
|
/*
|
|
|
- * Common LCD routines for supported CPUs
|
|
|
+ * Common LCD routines
|
|
|
*
|
|
|
* (C) Copyright 2001-2002
|
|
|
* Wolfgang Denk, DENX Software Engineering -- wd@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 at 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
|