Skip to content

Commit

Permalink
AUO-K190x: Use correct line length
Browse files Browse the repository at this point in the history
Previously all functions that used the line length used xres directly,
thus hardcoding a 8bits per pixel value.

This patch calculates the correct line length according to the actual
bits per pixel value and changes all line length users to use the
calculated line length value.

Signed-off-by: Heiko Stübner <heiko@sntech.de>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
  • Loading branch information
Heiko Stübner authored and Tomi Valkeinen committed Apr 4, 2013
1 parent 07961ac commit a165510
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 11 deletions.
5 changes: 3 additions & 2 deletions drivers/video/auo_k1900fb.c
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ static void auok1900_update_region(struct auok190xfb_par *par, int mode,
struct device *dev = par->info->device;
unsigned char *buf = (unsigned char *)par->info->screen_base;
int xres = par->info->var.xres;
int line_length = par->info->fix.line_length;
u16 args[4];

pm_runtime_get_sync(dev);
Expand All @@ -100,9 +101,9 @@ static void auok1900_update_region(struct auok190xfb_par *par, int mode,
args[1] = y1 + 1;
args[2] = xres;
args[3] = y2 - y1;
buf += y1 * xres;
buf += y1 * line_length;
auok190x_send_cmdargs_pixels(par, AUOK1900_CMD_PARTIALDISP, 4, args,
((y2 - y1) * xres)/2, (u16 *) buf);
((y2 - y1) * line_length)/2, (u16 *) buf);
auok190x_send_command(par, AUOK190X_CMD_DATA_STOP);

par->update_cnt++;
Expand Down
5 changes: 3 additions & 2 deletions drivers/video/auo_k1901fb.c
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,7 @@ static void auok1901_update_region(struct auok190xfb_par *par, int mode,
struct device *dev = par->info->device;
unsigned char *buf = (unsigned char *)par->info->screen_base;
int xres = par->info->var.xres;
int line_length = par->info->fix.line_length;
u16 args[5];

pm_runtime_get_sync(dev);
Expand All @@ -139,9 +140,9 @@ static void auok1901_update_region(struct auok190xfb_par *par, int mode,
args[1] = y1 + 1;
args[2] = xres;
args[3] = y2 - y1;
buf += y1 * xres;
buf += y1 * line_length;
auok190x_send_cmdargs_pixels_nowait(par, AUOK1901_CMD_DMA_START, 4,
args, ((y2 - y1) * xres)/2,
args, ((y2 - y1) * line_length)/2,
(u16 *) buf);
auok190x_send_command_nowait(par, AUOK190X_CMD_DATA_STOP);

Expand Down
15 changes: 8 additions & 7 deletions drivers/video/auo_k190x.c
Original file line number Diff line number Diff line change
Expand Up @@ -224,8 +224,8 @@ static void auok190xfb_dpy_deferred_io(struct fb_info *info,
{
struct fb_deferred_io *fbdefio = info->fbdefio;
struct auok190xfb_par *par = info->par;
u16 line_length = info->fix.line_length;
u16 yres = info->var.yres;
u16 xres = info->var.xres;
u16 y1 = 0, h = 0;
int prev_index = -1;
struct page *cur;
Expand Down Expand Up @@ -254,7 +254,7 @@ static void auok190xfb_dpy_deferred_io(struct fb_info *info,
}

/* height increment is fixed per page */
h_inc = DIV_ROUND_UP(PAGE_SIZE , xres);
h_inc = DIV_ROUND_UP(PAGE_SIZE , line_length);

/* calculate number of pages from pixel height */
threshold = par->consecutive_threshold / h_inc;
Expand All @@ -265,7 +265,7 @@ static void auok190xfb_dpy_deferred_io(struct fb_info *info,
list_for_each_entry(cur, &fbdefio->pagelist, lru) {
if (prev_index < 0) {
/* just starting so assign first page */
y1 = (cur->index << PAGE_SHIFT) / xres;
y1 = (cur->index << PAGE_SHIFT) / line_length;
h = h_inc;
} else if ((cur->index - prev_index) <= threshold) {
/* page is within our threshold for single updates */
Expand All @@ -275,7 +275,7 @@ static void auok190xfb_dpy_deferred_io(struct fb_info *info,
par->update_partial(par, y1, y1 + h);

/* start over with our non consecutive page */
y1 = (cur->index << PAGE_SHIFT) / xres;
y1 = (cur->index << PAGE_SHIFT) / line_length;
h = h_inc;
}
prev_index = cur->index;
Expand Down Expand Up @@ -896,21 +896,22 @@ int auok190x_common_probe(struct platform_device *pdev,
info->var.yres = panel->w;
info->var.xres_virtual = panel->h;
info->var.yres_virtual = panel->w;
info->fix.line_length = panel->h;
info->fix.line_length = panel->h * info->var.bits_per_pixel / 8;
} else {
info->var.xres = panel->w;
info->var.yres = panel->h;
info->var.xres_virtual = panel->w;
info->var.yres_virtual = panel->h;
info->fix.line_length = panel->w;
info->fix.line_length = panel->w * info->var.bits_per_pixel / 8;
}

par->resolution = board->resolution;
par->rotation = board->rotation;

/* videomemory handling */

videomemorysize = roundup((panel->w * panel->h), PAGE_SIZE);
videomemorysize = roundup((panel->w * panel->h) *
info->var.bits_per_pixel / 8, PAGE_SIZE);
videomemory = vmalloc(videomemorysize);
if (!videomemory) {
ret = -ENOMEM;
Expand Down

0 comments on commit a165510

Please sign in to comment.