]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/video/nvidia/nv_setup.c
r8169: revert "read MAC address from EEPROM on init"
[linux-2.6-omap-h63xx.git] / drivers / video / nvidia / nv_setup.c
index eab3e282a4de17f6bb736f64d3aa3aa78104a11c..d9627b57eb4d27e12242116f2fc77c99516ab0dd 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);
@@ -261,14 +263,14 @@ static void nv10GetConfig(struct nvidia_par *par)
        }
 #endif
 
-       dev = pci_find_slot(0, 1);
+       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;
@@ -276,6 +278,7 @@ static void nv10GetConfig(struct nvidia_par *par)
                par->RamAmountKBytes =
                    (NV_RD32(par->PFB, 0x020C) & 0xFFF00000) >> 10;
        }
+       pci_dev_put(dev);
 
        par->CrystalFreqKHz = (NV_RD32(par->PEXTDEV, 0x0000) & (1 << 6)) ?
            14318 : 13500;
@@ -656,7 +659,7 @@ int NVCommonSetup(struct fb_info *info)
        par->LVDS = 0;
        if (par->FlatPanel && par->twoHeads) {
                NV_WR32(par->PRAMDAC0, 0x08B0, 0x00010004);
-               if (par->PRAMDAC0[0x08b4] & 1)
+               if (NV_RD32(par->PRAMDAC0, 0x08b4) & 1)
                        par->LVDS = 1;
                printk("nvidiafb: Panel is %s\n", par->LVDS ? "LVDS" : "TMDS");
        }