Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid
[firefly-linux-kernel-4.4.55.git] / drivers / video / nvidia / nv_setup.c
index 707e2c8a13ed85929f32df1a91488405812506d8..135ae18bfce84e7bdd0e307d7d470e8370919ca6 100644 (file)
@@ -166,11 +166,13 @@ u8 NVReadDacData(struct nvidia_par *par)
 static int NVIsConnected(struct nvidia_par *par, int output)
 {
        volatile u32 __iomem *PRAMDAC = par->PRAMDAC0;
-       u32 reg52C, reg608;
+       u32 reg52C, reg608, dac0_reg608 = 0;
        int present;
 
-       if (output)
-               PRAMDAC += 0x800;
+       if (output) {
+           dac0_reg608 = NV_RD32(PRAMDAC, 0x0608);
+           PRAMDAC += 0x800;
+       }
 
        reg52C = NV_RD32(PRAMDAC, 0x052C);
        reg608 = NV_RD32(PRAMDAC, 0x0608);
@@ -194,8 +196,8 @@ static int NVIsConnected(struct nvidia_par *par, int output)
        else
                printk("nvidiafb: CRTC%i analog not found\n", output);
 
-       NV_WR32(par->PRAMDAC0, 0x0608, NV_RD32(par->PRAMDAC0, 0x0608) &
-               0x0000EFFF);
+       if (output)
+           NV_WR32(par->PRAMDAC0, 0x0608, dac0_reg608);
 
        NV_WR32(PRAMDAC, 0x052C, reg52C);
        NV_WR32(PRAMDAC, 0x0608, reg608);
@@ -263,12 +265,12 @@ static void nv10GetConfig(struct nvidia_par *par)
 
        dev = pci_get_bus_and_slot(0, 1);
        if ((par->Chipset & 0xffff) == 0x01a0) {
-               int amt = 0;
+               u32 amt;
 
                pci_read_config_dword(dev, 0x7c, &amt);
                par->RamAmountKBytes = (((amt >> 6) & 31) + 1) * 1024;
        } else if ((par->Chipset & 0xffff) == 0x01f0) {
-               int amt = 0;
+               u32 amt;
 
                pci_read_config_dword(dev, 0x84, &amt);
                par->RamAmountKBytes = (((amt >> 4) & 127) + 1) * 1024;
@@ -360,6 +362,7 @@ int NVCommonSetup(struct fb_info *info)
        case 0x0186:
        case 0x0187:
        case 0x018D:
+       case 0x01D7:
        case 0x0228:
        case 0x0286:
        case 0x028C: