From: Bjorn Helgaas Call pci_enable_device() before looking at pci_dev. Also, call pci_disable_device() when releasing the device. Signed-off-by: Bjorn Helgaas Signed-off-by: Andrew Morton --- 25-akpm/drivers/media/dvb/bt8xx/bt878.c | 10 +++++++--- 1 files changed, 7 insertions(+), 3 deletions(-) diff -puN drivers/media/dvb/bt8xx/bt878.c~dvb-pci_enable_device-fix drivers/media/dvb/bt8xx/bt878.c --- 25/drivers/media/dvb/bt8xx/bt878.c~dvb-pci_enable_device-fix Tue Aug 24 15:23:38 2004 +++ 25-akpm/drivers/media/dvb/bt8xx/bt878.c Tue Aug 24 15:23:38 2004 @@ -417,6 +417,8 @@ static int __devinit bt878_probe(struct printk(KERN_INFO "bt878: Bt878 AUDIO function found (%d).\n", bt878_num); + if (pci_enable_device(dev)) + return -EIO; bt = &bt878[bt878_num]; bt->dev = dev; @@ -426,11 +428,10 @@ static int __devinit bt878_probe(struct bt->id = dev->device; bt->irq = dev->irq; bt->bt878_adr = pci_resource_start(dev, 0); - if (pci_enable_device(dev)) - return -EIO; if (!request_mem_region(pci_resource_start(dev, 0), pci_resource_len(dev, 0), "bt878")) { - return -EBUSY; + result = -EBUSY; + goto fail0; } pci_read_config_byte(dev, PCI_CLASS_REVISION, &bt->revision); @@ -501,6 +502,8 @@ static int __devinit bt878_probe(struct fail1: release_mem_region(pci_resource_start(bt->dev, 0), pci_resource_len(bt->dev, 0)); + fail0: + pci_disable_device(dev); return result; } @@ -540,6 +543,7 @@ static void __devexit bt878_remove(struc bt878_mem_free(bt); pci_set_drvdata(pci_dev, NULL); + pci_disable_device(pci_dev); return; } _