Module: xenomai-abe
Branch: analogy
Commit: 1d2d631a531568d3228ba6e642602f3d1cc10635
URL:    
http://git.xenomai.org/?p=xenomai-abe.git;a=commit;h=1d2d631a531568d3228ba6e642602f3d1cc10635

Author: Anders Blomdell <anders.blomd...@control.lth.se>
Date:   Tue Jun 28 23:56:27 2011 +0200

analogy: [pcimio] fix wrong IRQ setup after reboot

---

 ksrc/drivers/analogy/national_instruments/mite.c |   20 ++++++++++++--------
 1 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/ksrc/drivers/analogy/national_instruments/mite.c 
b/ksrc/drivers/analogy/national_instruments/mite.c
index d3969b0..a28295a 100644
--- a/ksrc/drivers/analogy/national_instruments/mite.c
+++ b/ksrc/drivers/analogy/national_instruments/mite.c
@@ -61,7 +61,7 @@ static struct pci_device_id mite_id[] = {
 
 static int mite_probe(struct pci_dev *dev, const struct pci_device_id *id)
 {
-       int i;
+       int i, err = 0;
        struct mite_struct *mite;
 
        mite = kmalloc(sizeof(struct mite_struct), GFP_KERNEL);
@@ -71,7 +71,13 @@ static int mite_probe(struct pci_dev *dev, const struct 
pci_device_id *id)
        memset(mite, 0, sizeof(struct mite_struct));
 
        a4l_lock_init(&mite->lock);
+
        mite->pcidev = dev;
+       if (pci_enable_device(dev) < 0) {
+               __a4l_err("error enabling mite\n");
+               err = -EIO;
+               goto out;
+       }
 
        for(i = 0; i < MAX_MITE_DMA_CHANNELS; i++) {
                mite->channels[i].mite = mite;
@@ -81,7 +87,11 @@ static int mite_probe(struct pci_dev *dev, const struct 
pci_device_id *id)
 
        list_add(&mite->list, &mite_devices);
 
-       return 0;
+out:
+       if (err < 0)
+               kfree(mite);
+
+       return err;
 }
 
 static void mite_remove(struct pci_dev *dev)
@@ -117,11 +127,6 @@ int a4l_mite_setup(struct mite_struct *mite, int 
use_iodwbsr_1)
 
        __a4l_dbg(1, drv_dbg, "mite: starting setup...\n");
 
-       if(pci_enable_device(mite->pcidev)){
-               __a4l_err("error enabling mite\n");
-               return -EIO;
-       }
-
        pci_set_master(mite->pcidev);
 
        if (pci_request_regions( mite->pcidev, "mite")) {
@@ -129,7 +134,6 @@ int a4l_mite_setup(struct mite_struct *mite, int 
use_iodwbsr_1)
                return -EIO;
        };
 
-
        /* The PCI BAR0 is the Mite */
        addr = pci_resource_start(mite->pcidev, 0);
        length = pci_resource_len(mite->pcidev, 0);


_______________________________________________
Xenomai-git mailing list
Xenomai-git@gna.org
https://mail.gna.org/listinfo/xenomai-git

Reply via email to