| From d933990c57b498c092ceef591c7c5d69dbfe9f30 Mon Sep 17 00:00:00 2001 |
| From: Florian Tobias Schandinat <FlorianSchandinat@gmx.de> |
| Date: Mon, 23 May 2011 21:39:58 +0000 |
| Subject: viafb: use display information in info not in var for panning |
| |
| From: Florian Tobias Schandinat <FlorianSchandinat@gmx.de> |
| |
| commit d933990c57b498c092ceef591c7c5d69dbfe9f30 upstream. |
| |
| As Laurent pointed out we must not use any information in the passed |
| var besides xoffset, yoffset and vmode as otherwise applications |
| might abuse it. Also use the aligned fix.line_length and not the |
| (possible) unaligned xres_virtual. |
| |
| Signed-off-by: Florian Tobias Schandinat <FlorianSchandinat@gmx.de> |
| Reported-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> |
| Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| drivers/video/via/viafbdev.c | 5 +++-- |
| 1 file changed, 3 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/video/via/viafbdev.c |
| +++ b/drivers/video/via/viafbdev.c |
| @@ -348,8 +348,9 @@ static int viafb_pan_display(struct fb_v |
| struct fb_info *info) |
| { |
| struct viafb_par *viapar = info->par; |
| - u32 vram_addr = (var->yoffset * var->xres_virtual + var->xoffset) |
| - * (var->bits_per_pixel / 8) + viapar->vram_addr; |
| + u32 vram_addr = viapar->vram_addr |
| + + var->yoffset * info->fix.line_length |
| + + var->xoffset * info->var.bits_per_pixel / 8; |
| |
| DEBUG_MSG(KERN_DEBUG "viafb_pan_display, address = %d\n", vram_addr); |
| if (!viafb_dual_fb) { |