mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-04 04:06:26 +00:00
video: fbdev: ssd1307fb: Simplify ssd1307fb_update_display()
Simplify the nested loops to handle conversion from linear frame buffer to ssd1307 page layout: 1. Move last page handling one level up, as the value of "m" is the same inside a page, 2. array->data[] is filled linearly, so there is no need to recalculate array_idx over and over again; a simple increment is sufficient. Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org> Acked-by: Sam Ravnborg <sam@ravnborg.org> Signed-off-by: Sam Ravnborg <sam@ravnborg.org> Link: https://patchwork.freedesktop.org/patch/msgid/20210727134730.3765898-3-geert@linux-m68k.org
This commit is contained in:
parent
7b4b3733fd
commit
ef9d793825
@ -158,6 +158,7 @@ static int ssd1307fb_update_display(struct ssd1307fb_par *par)
|
||||
u8 *vmem = par->info->screen_buffer;
|
||||
unsigned int line_length = par->info->fix.line_length;
|
||||
unsigned int pages = DIV_ROUND_UP(par->height, 8);
|
||||
u32 array_idx = 0;
|
||||
int ret, i, j, k;
|
||||
|
||||
array = ssd1307fb_alloc_array(par->width * pages, SSD1307FB_DATA);
|
||||
@ -194,19 +195,21 @@ static int ssd1307fb_update_display(struct ssd1307fb_par *par)
|
||||
*/
|
||||
|
||||
for (i = 0; i < pages; i++) {
|
||||
int m = 8;
|
||||
|
||||
/* Last page may be partial */
|
||||
if (i + 1 == pages && par->height % 8)
|
||||
m = par->height % 8;
|
||||
for (j = 0; j < par->width; j++) {
|
||||
int m = 8;
|
||||
u32 array_idx = i * par->width + j;
|
||||
array->data[array_idx] = 0;
|
||||
/* Last page may be partial */
|
||||
if (i + 1 == pages && par->height % 8)
|
||||
m = par->height % 8;
|
||||
u8 data = 0;
|
||||
|
||||
for (k = 0; k < m; k++) {
|
||||
u8 byte = vmem[(8 * i + k) * line_length +
|
||||
j / 8];
|
||||
u8 bit = (byte >> (j % 8)) & 1;
|
||||
array->data[array_idx] |= bit << k;
|
||||
data |= bit << k;
|
||||
}
|
||||
array->data[array_idx++] = data;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user