AUO-K190x: Use correct line length
From: Heiko Stuebner <heiko.stuebner@...> Date: Tue, 22 May 2012 14:14:50 +0200
Commit-Message
Patch-Comment
drivers/video/auo_k1900fb.c | 5 +++-- drivers/video/auo_k1901fb.c | 5 +++-- drivers/video/auo_k190x.c | 15 ++++++++------- 3 files changed, 14 insertions(+), 11 deletions(-)
Statistics
- 14 lines added
- 11 lines removed
Changes
------------------------- drivers/video/auo_k1900fb.c --------------------------
index c36cf96..b02fab5d 100644
@@ -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);
@@ -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 * line_length;
auok190x_send_cmdargs_pixels(par, AUOK1900_CMD_PARTIALDISP, 4, args,
+ ((y2 - y1) * line_length)/2, (u16 *) buf);
auok190x_send_command(par, AUOK190X_CMD_DATA_STOP);
par->update_cnt++;
------------------------- drivers/video/auo_k1901fb.c --------------------------
index 1c054c1..ece99b8 100644
@@ -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);
@@ -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 * line_length;
auok190x_send_cmdargs_pixels_nowait(par, AUOK1901_CMD_DMA_START, 4,
+ args, ((y2 - y1) * line_length)/2,
(u16 *) buf);
auok190x_send_command_nowait(par, AUOK190X_CMD_DATA_STOP);
-------------------------- drivers/video/auo_k190x.c ---------------------------
index 77da6a2..6c2879d 100644
@@ -223,8 +223,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 y1 = 0, h = 0;
int prev_index = -1;
struct page *cur;
@@ -253,7 +253,7 @@ static void auok190xfb_dpy_deferred_io(struct fb_info *info,
}
/* height increment is fixed per page */
+ h_inc = DIV_ROUND_UP(PAGE_SIZE , line_length);
/* calculate number of pages from pixel height */
threshold = par->consecutive_threshold / h_inc;
@@ -264,7 +264,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) / line_length;
h = h_inc;
} else if ((cur->index - prev_index) <= threshold) {
/* page is within our threshold for single updates */
@@ -274,7 +274,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) / line_length;
h = h_inc;
}
prev_index = cur->index;
@@ -895,13 +895,13 @@ int __devinit 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->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->var.bits_per_pixel / 8;
}
par->resolution = board->resolution;
@@ -909,7 +909,8 @@ int __devinit auok190x_common_probe(struct platform_device *pdev,
/* videomemory handling */
+ videomemorysize = roundup((panel->w * panel->h) *
+ info->var.bits_per_pixel / 8, PAGE_SIZE);
videomemory = vmalloc(videomemorysize);
if (!videomemory) {
ret = -ENOMEM;