[PATCH] Detaching fbcon: remove calls to pci_disable_device()
authorAntonino A. Daplas <adaplas@gmail.com>
Mon, 26 Jun 2006 07:27:04 +0000 (00:27 -0700)
committerLinus Torvalds <torvalds@g5.osdl.org>
Mon, 26 Jun 2006 16:58:32 +0000 (09:58 -0700)
Detaching fbcon allows individual drivers to be unloaded.  However several
drivers call pci_disable_device() upon exit.  This function will disable the
BAR's which will kill VGA text mode and/or affect X/DRM.

To prevent this, remove calls to pci_disable_device() from several drivers.

Signed-off-by: Antonino Daplas <adaplas@pol.net>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
drivers/video/aty/radeon_base.c
drivers/video/cirrusfb.c
drivers/video/geode/gx1fb_core.c
drivers/video/geode/gxfb_core.c
drivers/video/i810/i810_main.c
drivers/video/nvidia/nvidia.c
drivers/video/riva/fbdev.c

index c5ecbb0..68b1564 100644 (file)
@@ -2379,7 +2379,6 @@ err_release_pci0:
 err_release_fb:
         framebuffer_release(info);
 err_disable:
-       pci_disable_device(pdev);
 err_out:
        return ret;
 }
@@ -2436,7 +2435,6 @@ static void __devexit radeonfb_pci_unregister (struct pci_dev *pdev)
 #endif        
        fb_dealloc_cmap(&info->cmap);
         framebuffer_release(info);
-       pci_disable_device(pdev);
 }
 
 
index 1103010..dda240e 100644 (file)
@@ -2227,7 +2227,6 @@ static void cirrusfb_pci_unmap (struct cirrusfb_info *cinfo)
                release_region(0x3C0, 32);
        pci_release_regions(pdev);
        framebuffer_release(cinfo->info);
-       pci_disable_device(pdev);
 }
 #endif /* CONFIG_PCI */
 
@@ -2458,7 +2457,6 @@ err_release_regions:
 err_release_fb:
        framebuffer_release(info);
 err_disable:
-       pci_disable_device(pdev);
 err_out:
        return ret;
 }
index 20e6915..4d3a887 100644 (file)
@@ -376,8 +376,6 @@ static int __init gx1fb_probe(struct pci_dev *pdev, const struct pci_device_id *
                release_mem_region(gx1_gx_base() + 0x8300, 0x100);
        }
 
-       pci_disable_device(pdev);
-
        if (info)
                framebuffer_release(info);
        return ret;
@@ -399,7 +397,6 @@ static void gx1fb_remove(struct pci_dev *pdev)
        iounmap(par->dc_regs);
        release_mem_region(gx1_gx_base() + 0x8300, 0x100);
 
-       pci_disable_device(pdev);
        pci_set_drvdata(pdev, NULL);
 
        framebuffer_release(info);
index 89c34b1..5ef12a3 100644 (file)
@@ -354,8 +354,6 @@ static int __init gxfb_probe(struct pci_dev *pdev, const struct pci_device_id *i
                pci_release_region(pdev, 2);
        }
 
-       pci_disable_device(pdev);
-
        if (info)
                framebuffer_release(info);
        return ret;
@@ -377,7 +375,6 @@ static void gxfb_remove(struct pci_dev *pdev)
        iounmap(par->dc_regs);
        pci_release_region(pdev, 2);
 
-       pci_disable_device(pdev);
        pci_set_drvdata(pdev, NULL);
 
        framebuffer_release(info);
index 44aa2ff..a1f7d80 100644 (file)
@@ -2110,9 +2110,6 @@ static void i810fb_release_resource(struct fb_info *info,
        if (par->res_flags & MMIO_REQ)
                release_mem_region(par->mmio_start_phys, MMIO_SIZE);
 
-       if (par->res_flags & PCI_DEVICE_ENABLED)
-               pci_disable_device(par->dev);
-
        framebuffer_release(info);
 
 }
index 65733e8..7b5cffb 100644 (file)
@@ -1219,7 +1219,7 @@ static int __devinit nvidiafb_probe(struct pci_dev *pd,
 
        if (pci_request_regions(pd, "nvidiafb")) {
                printk(KERN_ERR PFX "cannot request PCI regions\n");
-               goto err_out_request;
+               goto err_out_enable;
        }
 
        par->FlatPanel = flatpanel;
@@ -1338,10 +1338,8 @@ err_out_free_base1:
        nvidia_delete_i2c_busses(par);
 err_out_arch:
        iounmap(par->REGS);
-err_out_free_base0:
+ err_out_free_base0:
        pci_release_regions(pd);
-err_out_request:
-       pci_disable_device(pd);
 err_out_enable:
        kfree(info->pixmap.addr);
 err_out_kfree:
@@ -1371,7 +1369,6 @@ static void __exit nvidiafb_remove(struct pci_dev *pd)
        nvidia_delete_i2c_busses(par);
        iounmap(par->REGS);
        pci_release_regions(pd);
-       pci_disable_device(pd);
        kfree(info->pixmap.addr);
        framebuffer_release(info);
        pci_set_drvdata(pd, NULL);
index d4384ab..12af58c 100644 (file)
@@ -2152,7 +2152,6 @@ err_iounmap_ctrl_base:
 err_release_region:
        pci_release_regions(pd);
 err_disable_device:
-       pci_disable_device(pd);
 err_free_pixmap:
        kfree(info->pixmap.addr);
 err_framebuffer_release:
@@ -2187,7 +2186,6 @@ static void __exit rivafb_remove(struct pci_dev *pd)
        if (par->riva.Architecture == NV_ARCH_03)
                iounmap(par->riva.PRAMIN);
        pci_release_regions(pd);
-       pci_disable_device(pd);
        kfree(info->pixmap.addr);
        framebuffer_release(info);
        pci_set_drvdata(pd, NULL);