summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorPeng Fan <peng.fan@nxp.com>2016-02-23 10:14:34 +0800
committerYe Li <ye.li@nxp.com>2016-03-25 11:56:36 +0800
commita7244f279cc3c3994bcd103f5e9a183b1075ae71 (patch)
tree11cad20fc466ab1bd83dfb4ba03e829cb947362b /common
parent06893558f2cc042b683247989be5127a8027ebf2 (diff)
downloadu-boot-imx-a7244f279cc3c3994bcd103f5e9a183b1075ae71.zip
u-boot-imx-a7244f279cc3c3994bcd103f5e9a183b1075ae71.tar.gz
u-boot-imx-a7244f279cc3c3994bcd103f5e9a183b1075ae71.tar.bz2
MLK-12425-2: video: epdc: introduce epdc support
Support EPDC. E-Ink feature is supported by i.MX6DL/SL and i.MX7D. For now this driver only supports i.MX6DL/SL, because the i.MX7D EPDC driver needs pxp support which is not included in U-Boot. Support user defined logo file, if there is no logo file, it will draw a black border around a white screen. If need to enable EPDC, a waveform file is required to let all work. Since we need LCD_MONOCHROME mode for EPDC, we introduce LCD_MONOCHROME support. Please refer to Linux Reference Manual for how to flash WAVEFORM file. Signed-off-by: Peng Fan <peng.fan@nxp.com> Signed-off-by: Robby Cai <R63905@freescale.com> Signed-off-by: Nitin Garg <nitin.garg@freescale.com> Signed-off-by: Ye.Li <B37916@freescale.com>
Diffstat (limited to 'common')
-rw-r--r--common/lcd.c16
-rw-r--r--common/lcd_console.c17
2 files changed, 24 insertions, 9 deletions
diff --git a/common/lcd.c b/common/lcd.c
index 51705ad..0af4089 100644
--- a/common/lcd.c
+++ b/common/lcd.c
@@ -35,11 +35,6 @@
#define CONFIG_LCD_ALIGNMENT PAGE_SIZE
#endif
-#if (LCD_BPP != LCD_COLOR8) && (LCD_BPP != LCD_COLOR16) && \
- (LCD_BPP != LCD_COLOR32)
-#error Unsupported LCD BPP.
-#endif
-
DECLARE_GLOBAL_DATA_PTR;
static int lcd_init(void *lcdbase);
@@ -175,7 +170,11 @@ void lcd_clear(void)
char *s;
ulong addr;
static int do_splash = 1;
-#if LCD_BPP == LCD_COLOR8
+#if LCD_BPP == LCD_MONOCHROME
+ /* Setting the palette */
+ lcd_initcolregs();
+
+#elif LCD_BPP == LCD_COLOR8
/* Setting the palette */
lcd_setcolreg(CONSOLE_COLOR_BLACK, 0, 0, 0);
lcd_setcolreg(CONSOLE_COLOR_RED, 0xFF, 0, 0);
@@ -203,14 +202,15 @@ void lcd_clear(void)
#else
/* set framebuffer to background color */
#if (LCD_BPP != LCD_COLOR32)
- memset((char *)lcd_base, bg_color, lcd_line_length * panel_info.vl_row);
+ 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++ = bg_color;
+ *ppix++ = COLOR_MASK(lcd_getbgcolor());
}
#endif
#endif
diff --git a/common/lcd_console.c b/common/lcd_console.c
index bb0d7c5..8af13b4 100644
--- a/common/lcd_console.c
+++ b/common/lcd_console.c
@@ -47,16 +47,31 @@ static void lcd_putc_xy0(struct console_t *pcons, ushort x, ushort y, char c)
int fg_color = lcd_getfgcolor();
int bg_color = lcd_getbgcolor();
int i, row;
+#if LCD_BPP == LCD_MONOCHROME
+ ushort off = x * (1 << LCD_BPP) % 8;
+#endif
+
fbptr_t *dst = (fbptr_t *)pcons->fbbase +
y * pcons->lcdsizex +
x;
for (row = 0; row < VIDEO_FONT_HEIGHT; row++) {
uchar bits = video_fontdata[c * VIDEO_FONT_HEIGHT + row];
+#if LCD_BPP == LCD_MONOCHROME
+ uchar rest = *dst & -(1 << (8 - off));
+ uchar sym;
+
+ sym = (COLOR_MASK(fg_color) & bits) |
+ (COLOR_MASK(bg_color) & ~bits);
+ *dst++ = rest | (sym >> off);
+ rest = sym << (8 - off);
+ *dst = rest | (*dst & ((1 << (8 - off)) - 1));
+#else /* LCD_BPP == LCD_COLOR8 or LCD_COLOR16 or LCD_COLOR32 */
for (i = 0; i < VIDEO_FONT_WIDTH; ++i) {
*dst++ = (bits & 0x80) ? fg_color : bg_color;
bits <<= 1;
}
+#endif
dst += (pcons->lcdsizex - VIDEO_FONT_WIDTH);
}
}
@@ -114,7 +129,7 @@ static inline void console_newline(void)
for (i = 0; i < cons.rows-rows; i++)
cons.fp_console_moverow(&cons, i, i+rows);
for (i = 0; i < rows; i++)
- cons.fp_console_setrow(&cons, cons.rows-i-1, bg_color);
+ cons.fp_console_setrow(&cons, cons.rows-i-1, COLOR_MASK(bg_color));
cons.curr_row -= rows;
}
lcd_sync();