aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video/nvidia/nv_hw.c
diff options
context:
space:
mode:
authorAlan Cox <alan@redhat.com>2007-05-08 03:39:28 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-05-08 14:15:32 -0400
commitd37363409bacd1142c6e49edfb3e1f8b153d47dc (patch)
tree2aa26a4e06020b714192f746a11c0be4c7b7c5fb /drivers/video/nvidia/nv_hw.c
parentdbe7e429fedb3fbc93b496cc1c3eb4fc28333ac0 (diff)
nvidiafb/rivafb: switch to pci_get refcounting
Switch to pci_get refcounting APIs [adaplas] Fix a long-standing bug where the return value of pci_find_slot()/pci_get_bus_and_slot() is ignored. Signed-off-by: Alan Cox <alan@redhat.com> Signed-off-by: Antonino Daplas <adaplas@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/video/nvidia/nv_hw.c')
-rw-r--r--drivers/video/nvidia/nv_hw.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/drivers/video/nvidia/nv_hw.c b/drivers/video/nvidia/nv_hw.c
index ea426115c6f9..f297c7b14a41 100644
--- a/drivers/video/nvidia/nv_hw.c
+++ b/drivers/video/nvidia/nv_hw.c
@@ -686,7 +686,7 @@ static void nForceUpdateArbitrationSettings(unsigned VClk,
686 686
687 if ((par->Chipset & 0x0FF0) == 0x01A0) { 687 if ((par->Chipset & 0x0FF0) == 0x01A0) {
688 unsigned int uMClkPostDiv; 688 unsigned int uMClkPostDiv;
689 dev = pci_find_slot(0, 3); 689 dev = pci_get_bus_and_slot(0, 3);
690 pci_read_config_dword(dev, 0x6C, &uMClkPostDiv); 690 pci_read_config_dword(dev, 0x6C, &uMClkPostDiv);
691 uMClkPostDiv = (uMClkPostDiv >> 8) & 0xf; 691 uMClkPostDiv = (uMClkPostDiv >> 8) & 0xf;
692 692
@@ -694,11 +694,11 @@ static void nForceUpdateArbitrationSettings(unsigned VClk,
694 uMClkPostDiv = 4; 694 uMClkPostDiv = 4;
695 MClk = 400000 / uMClkPostDiv; 695 MClk = 400000 / uMClkPostDiv;
696 } else { 696 } else {
697 dev = pci_find_slot(0, 5); 697 dev = pci_get_bus_and_slot(0, 5);
698 pci_read_config_dword(dev, 0x4c, &MClk); 698 pci_read_config_dword(dev, 0x4c, &MClk);
699 MClk /= 1000; 699 MClk /= 1000;
700 } 700 }
701 701 pci_dev_put(dev);
702 pll = NV_RD32(par->PRAMDAC0, 0x0500); 702 pll = NV_RD32(par->PRAMDAC0, 0x0500);
703 M = (pll >> 0) & 0xFF; 703 M = (pll >> 0) & 0xFF;
704 N = (pll >> 8) & 0xFF; 704 N = (pll >> 8) & 0xFF;
@@ -707,19 +707,21 @@ static void nForceUpdateArbitrationSettings(unsigned VClk,
707 sim_data.pix_bpp = (char)pixelDepth; 707 sim_data.pix_bpp = (char)pixelDepth;
708 sim_data.enable_video = 0; 708 sim_data.enable_video = 0;
709 sim_data.enable_mp = 0; 709 sim_data.enable_mp = 0;
710 pci_find_slot(0, 1); 710 dev = pci_get_bus_and_slot(0, 1);
711 pci_read_config_dword(dev, 0x7C, &sim_data.memory_type); 711 pci_read_config_dword(dev, 0x7C, &sim_data.memory_type);
712 pci_dev_put(dev);
712 sim_data.memory_type = (sim_data.memory_type >> 12) & 1; 713 sim_data.memory_type = (sim_data.memory_type >> 12) & 1;
713 sim_data.memory_width = 64; 714 sim_data.memory_width = 64;
714 715
715 dev = pci_find_slot(0, 3); 716 dev = pci_get_bus_and_slot(0, 3);
716 pci_read_config_dword(dev, 0, &memctrl); 717 pci_read_config_dword(dev, 0, &memctrl);
718 pci_dev_put(dev);
717 memctrl >>= 16; 719 memctrl >>= 16;
718 720
719 if ((memctrl == 0x1A9) || (memctrl == 0x1AB) || (memctrl == 0x1ED)) { 721 if ((memctrl == 0x1A9) || (memctrl == 0x1AB) || (memctrl == 0x1ED)) {
720 int dimm[3]; 722 int dimm[3];
721 723
722 pci_find_slot(0, 2); 724 dev = pci_get_bus_and_slot(0, 2);
723 pci_read_config_dword(dev, 0x40, &dimm[0]); 725 pci_read_config_dword(dev, 0x40, &dimm[0]);
724 dimm[0] = (dimm[0] >> 8) & 0x4f; 726 dimm[0] = (dimm[0] >> 8) & 0x4f;
725 pci_read_config_dword(dev, 0x44, &dimm[1]); 727 pci_read_config_dword(dev, 0x44, &dimm[1]);
@@ -731,6 +733,7 @@ static void nForceUpdateArbitrationSettings(unsigned VClk,
731 printk("nvidiafb: your nForce DIMMs are not arranged " 733 printk("nvidiafb: your nForce DIMMs are not arranged "
732 "in optimal banks!\n"); 734 "in optimal banks!\n");
733 } 735 }
736 pci_dev_put(dev);
734 } 737 }
735 738
736 sim_data.mem_latency = 3; 739 sim_data.mem_latency = 3;