From: Krzysztof Helt Date: Thu, 24 Jul 2008 04:31:07 +0000 (-0700) Subject: tridentfb: y-panning fixes X-Git-Tag: v2.6.27-rc1~578 X-Git-Url: http://pilppa.com/gitweb/?a=commitdiff_plain;h=f330c4b1961d730ef15ac184e4b7f1c25847d0ae;p=linux-2.6-omap-h63xx.git tridentfb: y-panning fixes The Trident cards uses only 20-bit address of screen start in double words. This allows addressing for only 4MB of video memory so check this. Also remove some redundant checks and assignments. Signed-off-by: Krzysztof Helt Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- diff --git a/drivers/video/tridentfb.c b/drivers/video/tridentfb.c index 1c3f0ba4b33..138140bdb49 100644 --- a/drivers/video/tridentfb.c +++ b/drivers/video/tridentfb.c @@ -870,8 +870,10 @@ static int tridentfb_check_var(struct fb_var_screeninfo *var, line_length = var->xres_virtual * bpp / 8; } - if (var->yres > var->yres_virtual) - var->yres_virtual = var->yres; + /* datasheet specifies how to set panning only up to 4 MB */ + if (line_length * (var->yres_virtual - var->yres) > (4 << 20)) + var->yres_virtual = ((4 << 20) / line_length) + var->yres; + if (line_length * var->yres_virtual > info->fix.smem_len) return -EINVAL; @@ -944,8 +946,6 @@ static int tridentfb_pan_display(struct fb_var_screeninfo *var, debug("enter\n"); offset = (var->xoffset + (var->yoffset * var->xres_virtual)) * var->bits_per_pixel / 32; - info->var.xoffset = var->xoffset; - info->var.yoffset = var->yoffset; set_screen_start(par, offset); debug("exit\n"); return 0; @@ -1225,7 +1225,6 @@ static int tridentfb_setcolreg(unsigned regno, unsigned red, unsigned green, ((blue & 0xFF00) >> 8); } -/* debug("exit\n"); */ return 0; }