diff -Nru a/drivers/video/nvidia/nvidia.c b/drivers/video/nvidia/nvidia.c --- a/drivers/video/nvidia/nvidia.c 2004-11-23 06:01:00 +08:00 +++ b/drivers/video/nvidia/nvidia.c 2004-11-24 06:15:15 +08:00 @@ -1101,15 +1101,16 @@ | FBINFO_HWACCEL_YPAN | FBINFO_MISC_MODESWITCHLATE; - info->var = nvidiafb_default_var; - if (mode_option) { - fb_find_mode(&info->var, info, mode_option, specs->modedb, - specs->modedb_len, NULL, 8); - } else if (specs->modedb != NULL) { + fb_videomode_to_modelist(info->monspecs.modedb, + info->monspecs.modedb_len, + &info->modelist); + fb_var_to_videomode(&modedb, &nvidiafb_default_var); + + if (specs->modedb != NULL) { /* get preferred timing */ if (specs->misc & FB_MISC_1ST_DETAIL) { int i; - + for (i = 0; i < specs->modedb_len; i++) { if (specs->modedb[i].flag & FB_MODE_IS_FIRST) { modedb = specs->modedb[i]; @@ -1121,16 +1122,18 @@ modedb = specs->modedb[0]; } info->var.bits_per_pixel = 8; - fb_videomode_to_var(&info->var, &modedb); + fb_videomode_to_var(&nvidiafb_default_var, &modedb); } + if (mode_option) + fb_find_mode(&nvidiafb_default_var, info, mode_option, + specs->modedb, specs->modedb_len, &modedb, 8); + + info->var = nvidiafb_default_var; info->fix.visual = (info->var.bits_per_pixel == 8) ? FB_VISUAL_PSEUDOCOLOR : FB_VISUAL_DIRECTCOLOR; info->pseudo_palette = par->pseudo_palette; fb_alloc_cmap(&info->cmap, 256, 0); - fb_videomode_to_modelist(info->monspecs.modedb, - info->monspecs.modedb_len, - &info->modelist); fb_destroy_modedb(info->monspecs.modedb); info->monspecs.modedb = NULL;