
Hi Anatolij,
On 1 January 2015 at 16:17, Simon Glass sjg@chromium.org wrote:
Some machines are very slow to scroll their displays. To cope with this, support the CONFIG_CONSOLE_SCROLL_LINES option. Setting this to 5 allows the display to operate at an acceptable speed by scrolling 5 lines at a time.
This same option is available for LCDs so when these systems are unified this code can be unified also.
Signed-off-by: Simon Glass sjg@chromium.org
Are you happy with this patch? If so, is it OK for me to pick it up via x86?
Changes in v2: None
drivers/video/cfb_console.c | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-)
diff --git a/drivers/video/cfb_console.c b/drivers/video/cfb_console.c index a653bb4..75cdf61 100644 --- a/drivers/video/cfb_console.c +++ b/drivers/video/cfb_console.c @@ -312,7 +312,11 @@ void console_cursor(int state); #define CONSOLE_ROW_SECOND (video_console_address + CONSOLE_ROW_SIZE) #define CONSOLE_ROW_LAST (video_console_address + CONSOLE_SIZE - CONSOLE_ROW_SIZE) #define CONSOLE_SIZE (CONSOLE_ROW_SIZE * CONSOLE_ROWS) -#define CONSOLE_SCROLL_SIZE (CONSOLE_SIZE - CONSOLE_ROW_SIZE)
+/* By default we scroll by a single line */ +#ifndef CONFIG_CONSOLE_SCROLL_LINES +#define CONFIG_CONSOLE_SCROLL_LINES 1 +#endif
/* Macros */ #ifdef VIDEO_FB_LITTLE_ENDIAN @@ -753,26 +757,33 @@ static void console_clear_line(int line, int begin, int end)
static void console_scrollup(void) {
const int rows = CONFIG_CONSOLE_SCROLL_LINES;
int i;
/* copy up rows ignoring the first one */
#ifdef VIDEO_HW_BITBLT video_hw_bitblt(VIDEO_PIXEL_SIZE, /* bytes per pixel */ 0, /* source pos x */ video_logo_height +
VIDEO_FONT_HEIGHT, /* source pos y */
VIDEO_FONT_HEIGHT * rows, /* source pos y */ 0, /* dest pos x */ video_logo_height, /* dest pos y */ VIDEO_VISIBLE_COLS, /* frame width */ VIDEO_VISIBLE_ROWS - video_logo_height
- VIDEO_FONT_HEIGHT /* frame height */
- VIDEO_FONT_HEIGHT * rows /* frame height */ );
#else
memcpyl(CONSOLE_ROW_FIRST, CONSOLE_ROW_SECOND,
CONSOLE_SCROLL_SIZE >> 2);
memcpyl(CONSOLE_ROW_FIRST, CONSOLE_ROW_FIRST + rows * CONSOLE_ROW_SIZE,
(CONSOLE_SIZE - CONSOLE_ROW_SIZE * rows) >> 2);
#endif /* clear the last one */
console_clear_line(CONSOLE_ROWS - 1, 0, CONSOLE_COLS - 1);
for (i = 1; i <= rows; i++)
console_clear_line(CONSOLE_ROWS - i, 0, CONSOLE_COLS - 1);
/* Decrement row number */
console_row -= rows;
}
static void console_back(void) @@ -884,9 +895,6 @@ static void console_newline(int n) if (console_row >= CONSOLE_ROWS) { /* Scroll everything up */ console_scrollup();
/* Decrement row number */
console_row = CONSOLE_ROWS - 1; }
}
-- 2.2.0.rc0.207.ga3a616c
Regards, Simon