From 5f6928e100e882575671e4d3a52f4bbe798d2803 Mon Sep 17 00:00:00 2001 From: Paul Mundt Date: Wed, 6 Feb 2008 01:39:18 -0800 Subject: [PATCH] --- yaml --- r: 83564 b: refs/heads/master c: 74f482cca5f76643e7f323e66cc38b1a882d5e6f h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/video/nvidia/nvidia.c | 22 ++++++++++++++++++++-- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 7d9216997e7f..f491b9056f8c 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 2e9750272cd49732293b6fe771ae110be8d87273 +refs/heads/master: 74f482cca5f76643e7f323e66cc38b1a882d5e6f diff --git a/trunk/drivers/video/nvidia/nvidia.c b/trunk/drivers/video/nvidia/nvidia.c index 30e14eb1f51e..74517b1b26a6 100644 --- a/trunk/drivers/video/nvidia/nvidia.c +++ b/trunk/drivers/video/nvidia/nvidia.c @@ -849,9 +849,27 @@ static int nvidiafb_check_var(struct fb_var_screeninfo *var, if (!mode_valid && info->monspecs.modedb_len) return -EINVAL; + /* + * If we're on a flat panel, check if the mode is outside of the + * panel dimensions. If so, cap it and try for the next best mode + * before bailing out. + */ if (par->fpWidth && par->fpHeight && (par->fpWidth < var->xres || - par->fpHeight < var->yres)) - return -EINVAL; + par->fpHeight < var->yres)) { + const struct fb_videomode *mode; + + var->xres = par->fpWidth; + var->yres = par->fpHeight; + + mode = fb_find_best_mode(var, &info->modelist); + if (!mode) { + printk(KERN_ERR PFX "mode out of range of flat " + "panel dimensions\n"); + return -EINVAL; + } + + fb_videomode_to_var(var, mode); + } if (var->yres_virtual < var->yres) var->yres_virtual = var->yres;