]> rtime.felk.cvut.cz Git - mf6xx.git/commitdiff
Initialization sequence should be complete
authorRostislav Lisovy <lisovy@gmail.com>
Thu, 25 Nov 2010 14:39:12 +0000 (15:39 +0100)
committerRostislav Lisovy <lisovy@gmail.com>
Thu, 25 Nov 2010 14:39:12 +0000 (15:39 +0100)
mf614.c

diff --git a/mf614.c b/mf614.c
index 37864cfc3e550fc857ec534f10306dd6e48d7b9c..37db77b9467b02026e04cd8276a1b534a0d2e9ba 100644 (file)
--- a/mf614.c
+++ b/mf614.c
@@ -8,6 +8,8 @@
 #define PCI_SUBDEVICE_DEVICE           0x0000
 
 
+static irqreturn_t mf614_irq_handler(int irq, struct uio_info *dev_info)
+
 static int __devinit mf614_pci_probe(struct pci_dev *dev,
                                      const struct pci_device_id *id)
 {
@@ -17,17 +19,45 @@ static int __devinit mf614_pci_probe(struct pci_dev *dev,
        if (!info)
                return -ENOMEM;
        
-       if (pci_enable_device(dev)) //FIXME return value??
+       if (pci_enable_device(dev)) //FIXME what is return value??
                goto out_free
 
        if (pci_request_regions(dev, "mf614"))
                goto out_disable
        
+       info->name = "MF614";
+       info->version = "0.0.1";
+       
+       info->port[0].porttype = UIO_PORT_X86;
+       info->port[0].start = pci_resource_start(dev, 0);
+       if (!info->port[0].start)
+               goto out_release;
+       info->port[0].size = pci_resource_len(dev, 0);
        
+       info->mem[1].addr = pci_resource_start(dev, 4);
+       if (!info->mem[1].addr)
+               goto out_release;
+       info->mem[1].size = pci_resource_len(dev, 4);
+       info->mem[1].memtype = UIO_MEM_PHYS;
+       info->mem[1].internal_addr = pci_ioremap_bar(dev, 4);
+       if (!info->mem[1].internal_addr)
+               goto out_release;
        
+       info->irq = dev->irq;
+       info->irq_flags = IRQF_SHARED;
+       info->handler = mf614_irq_handler;
+
+       if(uio_register_device(&dev->dev, info))
+               goto out_unmap;
 
+       pci_set_drvdata(dev, info);
 
+       return 0;
 
+out_unmap:
+       iounmap(info->mem[1].internal_addr);
+out_release:
+       pci_release_regions(dev);
 out_disable:
        pci_disable_device(dev);
 out_free: