aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/video/nvidia/nvidia.c24
1 files changed, 20 insertions, 4 deletions
diff --git a/drivers/video/nvidia/nvidia.c b/drivers/video/nvidia/nvidia.c
index 96d51144094a..691151e2bce3 100644
--- a/drivers/video/nvidia/nvidia.c
+++ b/drivers/video/nvidia/nvidia.c
@@ -411,6 +411,7 @@ MODULE_DEVICE_TABLE(pci, nvidiafb_pci_tbl);
411 411
412/* command line data, set in nvidiafb_setup() */ 412/* command line data, set in nvidiafb_setup() */
413static int flatpanel __devinitdata = -1; /* Autodetect later */ 413static int flatpanel __devinitdata = -1; /* Autodetect later */
414static int fpdither __devinitdata = -1;
414static int forceCRTC __devinitdata = -1; 415static int forceCRTC __devinitdata = -1;
415static int hwcur __devinitdata = 0; 416static int hwcur __devinitdata = 0;
416static int noaccel __devinitdata = 0; 417static int noaccel __devinitdata = 0;
@@ -1026,10 +1027,19 @@ static int nvidiafb_set_par(struct fb_info *info)
1026 NVTRACE_ENTER(); 1027 NVTRACE_ENTER();
1027 1028
1028 NVLockUnlock(par, 1); 1029 NVLockUnlock(par, 1);
1029 if (!par->FlatPanel || (info->var.bits_per_pixel != 24) || 1030 if (!par->FlatPanel || !par->twoHeads)
1030 !par->twoHeads)
1031 par->FPDither = 0; 1031 par->FPDither = 0;
1032 1032
1033 if (par->FPDither < 0) {
1034 if ((par->Chipset & 0x0ff0) == 0x0110)
1035 par->FPDither = !!(NV_RD32(par->PRAMDAC, 0x0528)
1036 & 0x00010000);
1037 else
1038 par->FPDither = !!(NV_RD32(par->PRAMDAC, 0x083C) & 1);
1039 printk(KERN_INFO PFX "Flat panel dithering %s\n",
1040 par->FPDither ? "enabled" : "disabled");
1041 }
1042
1033 info->fix.visual = (info->var.bits_per_pixel == 8) ? 1043 info->fix.visual = (info->var.bits_per_pixel == 8) ?
1034 FB_VISUAL_PSEUDOCOLOR : FB_VISUAL_DIRECTCOLOR; 1044 FB_VISUAL_PSEUDOCOLOR : FB_VISUAL_DIRECTCOLOR;
1035 1045
@@ -1548,9 +1558,9 @@ static int __devinit nvidiafb_probe(struct pci_dev *pd,
1548 sprintf(nvidiafb_fix.id, "NV%x", (pd->device & 0x0ff0) >> 4); 1558 sprintf(nvidiafb_fix.id, "NV%x", (pd->device & 0x0ff0) >> 4);
1549 1559
1550 par->FlatPanel = flatpanel; 1560 par->FlatPanel = flatpanel;
1551
1552 if (flatpanel == 1) 1561 if (flatpanel == 1)
1553 printk(KERN_INFO PFX "flatpanel support enabled\n"); 1562 printk(KERN_INFO PFX "flatpanel support enabled\n");
1563 par->FPDither = fpdither;
1554 1564
1555 par->CRTCnumber = forceCRTC; 1565 par->CRTCnumber = forceCRTC;
1556 par->FpScale = (!noscale); 1566 par->FpScale = (!noscale);
@@ -1729,6 +1739,8 @@ static int __devinit nvidiafb_setup(char *options)
1729 } else if (!strncmp(this_opt, "nomtrr", 6)) { 1739 } else if (!strncmp(this_opt, "nomtrr", 6)) {
1730 nomtrr = 1; 1740 nomtrr = 1;
1731#endif 1741#endif
1742 } else if (!strncmp(this_opt, "fpdither:", 9)) {
1743 fpdither = simple_strtol(this_opt+9, NULL, 0);
1732 } else 1744 } else
1733 mode_option = this_opt; 1745 mode_option = this_opt;
1734 } 1746 }
@@ -1775,7 +1787,11 @@ module_exit(nvidiafb_exit);
1775module_param(flatpanel, int, 0); 1787module_param(flatpanel, int, 0);
1776MODULE_PARM_DESC(flatpanel, 1788MODULE_PARM_DESC(flatpanel,
1777 "Enables experimental flat panel support for some chipsets. " 1789 "Enables experimental flat panel support for some chipsets. "
1778 "(0 or 1=enabled) (default=0)"); 1790 "(0=disabled, 1=enabled, -1=autodetect) (default=-1)");
1791module_param(fpdither, int, 0);
1792MODULE_PARM_DESC(fpdither,
1793 "Enables dithering of flat panel for 6 bits panels. "
1794 "(0=disabled, 1=enabled, -1=autodetect) (default=-1)");
1779module_param(hwcur, int, 0); 1795module_param(hwcur, int, 0);
1780MODULE_PARM_DESC(hwcur, 1796MODULE_PARM_DESC(hwcur,
1781 "Enables hardware cursor implementation. (0 or 1=enabled) " 1797 "Enables hardware cursor implementation. (0 or 1=enabled) "