diff options
Diffstat (limited to 'drivers/sound/i810_audio.c')
-rw-r--r-- | drivers/sound/i810_audio.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/sound/i810_audio.c b/drivers/sound/i810_audio.c index 10438f115..76bfcc3c0 100644 --- a/drivers/sound/i810_audio.c +++ b/drivers/sound/i810_audio.c @@ -924,7 +924,10 @@ static void i810_interrupt(int irq, void *dev_id, struct pt_regs *regs) status = inl(card->iobase + GLOB_STA); if(!(status & INT_MASK)) + { + spin_unlock(&card->lock); return; /* not for us */ + } // printk("Interrupt %X: ", status); if(status & (INT_PO|INT_PI|INT_MC)) @@ -1735,14 +1738,16 @@ static int __init i810_probe(struct pci_dev *pci_dev, const struct pci_device_id return -ENODEV; } + if (pci_enable_device(pci_dev)) + return -EIO; if ((card = kmalloc(sizeof(struct i810_card), GFP_KERNEL)) == NULL) { printk(KERN_ERR "i810_audio: out of memory\n"); return -ENOMEM; } memset(card, 0, sizeof(*card)); - card->iobase = pci_dev->resource[1].start; - card->ac97base = pci_dev->resource[0].start; + card->iobase = pci_resource_start (pci_dev, 1); + card->ac97base = pci_resource_start (pci_dev, 0); card->pci_dev = pci_dev; card->pci_id = pci_id->device; card->irq = pci_dev->irq; @@ -1752,7 +1757,6 @@ static int __init i810_probe(struct pci_dev *pci_dev, const struct pci_device_id devs = card; pci_set_master(pci_dev); - pci_enable_device(pci_dev); printk(KERN_INFO "i810: %s found at IO 0x%04lx and 0x%04lx, IRQ %d\n", card_names[pci_id->driver_data], card->iobase, card->ac97base, |