From 8c0b45adc575bb504a8adff17496220f2bc0c35a Mon Sep 17 00:00:00 2001 From: Rostislav Lisovy Date: Thu, 25 Nov 2010 15:39:12 +0100 Subject: [PATCH] Initialization sequence should be complete --- mf614.c | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/mf614.c b/mf614.c index 37864cf..37db77b 100644 --- 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: -- 2.39.2