]> git.kernelconcepts.de Git - karo-tx-uboot.git/commitdiff
Add support for 32-bit organized framebuffers
authorHannes Petermaier <oe5hpm@oevsv.at>
Fri, 7 Mar 2014 17:55:40 +0000 (18:55 +0100)
committerAnatolij Gustschin <agust@denx.de>
Sun, 10 Aug 2014 12:55:19 +0000 (14:55 +0200)
- Adds support for 32-bit organized framebuffers to the LCD-framework.

Signed-off-by: Hannes Petermaier <oe5hpm@oevsv.at>
Cc: agust@denx.de
common/lcd.c
include/lcd.h

index feb913a7201354729d9f08b539352d66ad90cd55..2996e0deb462955dcb3e16fdf872a574c793a0e7 100644 (file)
 #if LCD_BPP == LCD_MONOCHROME
 # define COLOR_MASK(c)         ((c)      | (c) << 1 | (c) << 2 | (c) << 3 | \
                                 (c) << 4 | (c) << 5 | (c) << 6 | (c) << 7)
-#elif (LCD_BPP == LCD_COLOR8) || (LCD_BPP == LCD_COLOR16)
+#elif (LCD_BPP == LCD_COLOR8) || (LCD_BPP == LCD_COLOR16) || \
+       (LCD_BPP == LCD_COLOR32)
 # define COLOR_MASK(c)         (c)
 #else
 # error Unsupported LCD BPP.
@@ -177,10 +178,20 @@ static void console_scrollup(void)
               CONSOLE_SIZE - CONSOLE_ROW_SIZE * rows);
 
        /* Clear the last rows */
+#if (LCD_BPP != LCD_COLOR32)
        memset(lcd_console_address + CONSOLE_SIZE - CONSOLE_ROW_SIZE * rows,
                COLOR_MASK(lcd_color_bg),
                CONSOLE_ROW_SIZE * rows);
-
+#else
+       u32 *ppix = lcd_console_address +
+                   CONSOLE_SIZE - CONSOLE_ROW_SIZE * rows;
+       u32 i;
+       for (i = 0;
+           i < (CONSOLE_ROW_SIZE * rows) / NBYTES(panel_info.vl_bpix);
+           i++) {
+               *ppix++ = COLOR_MASK(lcd_color_bg);
+       }
+#endif
        lcd_sync();
        console_row -= rows;
 }
@@ -308,13 +319,15 @@ static void lcd_drawchars(ushort x, ushort y, uchar *str, int count)
        ushort off  = x * (1 << LCD_BPP) % 8;
 #endif
 
-       dest = (uchar *)(lcd_base + y * lcd_line_length + x * (1 << LCD_BPP) / 8);
+       dest = (uchar *)(lcd_base + y * lcd_line_length + x * NBITS(LCD_BPP)/8);
 
        for (row = 0; row < VIDEO_FONT_HEIGHT; ++row, dest += lcd_line_length) {
                uchar *s = str;
                int i;
 #if LCD_BPP == LCD_COLOR16
                ushort *d = (ushort *)dest;
+#elif LCD_BPP == LCD_COLOR32
+               u32 *d = (u32 *)dest;
 #else
                uchar *d = dest;
 #endif
@@ -347,6 +360,12 @@ static void lcd_drawchars(ushort x, ushort y, uchar *str, int count)
                                                lcd_color_fg : lcd_color_bg;
                                bits <<= 1;
                        }
+#elif LCD_BPP == LCD_COLOR32
+                       for (c = 0; c < 8; ++c) {
+                               *d++ = (bits & 0x80) ?
+                                               lcd_color_fg : lcd_color_bg;
+                               bits <<= 1;
+                       }
 #endif
                }
 #if LCD_BPP == LCD_MONOCHROME
@@ -476,9 +495,19 @@ void lcd_clear(void)
        test_pattern();
 #else
        /* set framebuffer to background color */
+#if (LCD_BPP != LCD_COLOR32)
        memset((char *)lcd_base,
                COLOR_MASK(lcd_getbgcolor()),
                lcd_line_length * panel_info.vl_row);
+#else
+       u32 *ppix = lcd_base;
+       u32 i;
+       for (i = 0;
+          i < (lcd_line_length * panel_info.vl_row)/NBYTES(panel_info.vl_bpix);
+          i++) {
+               *ppix++ = COLOR_MASK(lcd_color_bg);
+       }
+#endif
 #endif
        /* Paint the logo and retrieve LCD base address */
        debug("[LCD] Drawing the logo...\n");
index cc2ee3f9564e553595e52767cfd23da747ea3767..88684ca39170462f05db716d2e9a900c98812775 100644 (file)
@@ -333,7 +333,7 @@ void lcd_sync(void);
 #define LCD_COLOR4     2
 #define LCD_COLOR8     3
 #define LCD_COLOR16    4
-
+#define LCD_COLOR32    5
 /*----------------------------------------------------------------------*/
 #if defined(CONFIG_LCD_INFO_BELOW_LOGO)
 # define LCD_INFO_X            0
@@ -384,6 +384,21 @@ void lcd_sync(void);
 # define CONSOLE_COLOR_GREY    14
 # define CONSOLE_COLOR_WHITE   15      /* Must remain last / highest   */
 
+#elif LCD_BPP == LCD_COLOR32
+/*
+ * 32bpp color definitions
+ */
+# define CONSOLE_COLOR_RED     0x00ff0000
+# define CONSOLE_COLOR_GREEN   0x0000ff00
+# define CONSOLE_COLOR_YELLOW  0x00ffff00
+# define CONSOLE_COLOR_BLUE    0x000000ff
+# define CONSOLE_COLOR_MAGENTA 0x00ff00ff
+# define CONSOLE_COLOR_CYAN    0x0000ffff
+# define CONSOLE_COLOR_GREY    0x00aaaaaa
+# define CONSOLE_COLOR_BLACK   0x00000000
+# define CONSOLE_COLOR_WHITE   0x00ffffff      /* Must remain last / highest*/
+# define NBYTES(bit_code)      (NBITS(bit_code) >> 3)
+
 #else
 
 /*