From: Rostislav Lisovy Date: Tue, 22 Mar 2011 17:03:55 +0000 (+0100) Subject: Important bugfixes. Module is able to load & unload. Everything seems to be ok. X-Git-Url: http://rtime.felk.cvut.cz/gitweb/mf6xx.git/commitdiff_plain/8b2490fdf39196b86ab0c3f1aeb572d545591918 Important bugfixes. Module is able to load & unload. Everything seems to be ok. --- diff --git a/src/uio/mf624/kernel/mf624.c b/src/uio/mf624/kernel/mf624.c index a275db5..bbde9cd 100755 --- a/src/uio/mf624/kernel/mf624.c +++ b/src/uio/mf624/kernel/mf624.c @@ -10,7 +10,7 @@ #define PCI_VENDOR_ID_HUMUSOFT 0x186c #define PCI_DEVICE_ID_MF624 0x0624 #define PCI_SUBVENDOR_ID_HUMUSOFT 0x186c -#define PCI_SUBDEVICE_DEVICE 0x0000 +#define PCI_SUBDEVICE_DEVICE 0x0624 #define INTCSR 0x4C #define INTCSR_ADINT_ENABLE (1 << 0) @@ -66,14 +66,14 @@ static irqreturn_t mf624_irq_handler(int irq, struct uio_info *info) { u32 *INTCSR_reg = ((u32*) info->mem[0].internal_addr) + INTCSR; - if ((*INTCSR_reg & INTCSR_ADINT_ENABLE) && (*INTCSR_reg & INTCSR_ADINT_STATUS)) + if (((*INTCSR_reg & INTCSR_ADINT_ENABLE) > 0) && ((*INTCSR_reg & INTCSR_ADINT_STATUS) > 0)) { //disable interrupt mf624_disable_interrupt(ADC, info); return IRQ_HANDLED; } - if ((*INTCSR_reg & INTCSR_CTR4INT_ENABLE) && (*INTCSR_reg & INTCSR_CTR4INT_STATUS)) + if (((*INTCSR_reg & INTCSR_CTR4INT_ENABLE) > 0) && ((*INTCSR_reg & INTCSR_CTR4INT_STATUS) > 0)) { //disable interrupt mf624_disable_interrupt(CTR4, info); @@ -113,7 +113,6 @@ static int __devinit mf624_pci_probe(struct pci_dev *dev, info->name = "MF624"; info->version = "0.0.1"; - info->mem[0].name = "PCI chipset, interrupts, status bits, special functions"; info->mem[0].addr = pci_resource_start(dev, 0); if (!info->mem[0].addr) @@ -131,7 +130,7 @@ static int __devinit mf624_pci_probe(struct pci_dev *dev, goto out_release; info->mem[1].size = pci_resource_len(dev, 1); info->mem[1].memtype = UIO_MEM_PHYS; - info->mem[1].internal_addr = pci_ioremap_bar(dev, 1); + info->mem[1].internal_addr = pci_ioremap_bar(dev, 2); if (!info->mem[1].internal_addr) goto out_release; @@ -142,7 +141,7 @@ static int __devinit mf624_pci_probe(struct pci_dev *dev, goto out_release; info->mem[2].size = pci_resource_len(dev, 2); info->mem[2].memtype = UIO_MEM_PHYS; - info->mem[2].internal_addr = pci_ioremap_bar(dev, 2); + info->mem[2].internal_addr = pci_ioremap_bar(dev, 4); if (!info->mem[2].internal_addr) goto out_release; @@ -154,12 +153,17 @@ static int __devinit mf624_pci_probe(struct pci_dev *dev, info->irqcontrol = mf624_irqcontrol; if(uio_register_device(&dev->dev, info)) - goto out_release; + goto out_unmap; pci_set_drvdata(dev, info); return 0; + +out_unmap: + iounmap(info->mem[0].internal_addr); + iounmap(info->mem[1].internal_addr); + iounmap(info->mem[2].internal_addr); out_release: pci_release_regions(dev); out_disable: