V4L/DVB: ngene: Fix unloading of module
authorRoland Praml <pram@gmx.de>
Sun, 20 Dec 2009 01:48:14 +0000 (22:48 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Fri, 26 Feb 2010 18:10:54 +0000 (15:10 -0300)
Fixed unloading of module ngene.

Signed-off-by: Roland Praml <pram@gmx.de>
Signed-off-by: Matthias Benesch <twoof7@freenet.de>
Signed-off-by: Oliver Endriss <o.endriss@gmx.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/dvb/ngene/ngene-core.c

index cf12bff57440adb1391d4845919b06a159539b0c..52798b7c8d965838d671e348a40aebd9eaca0c7b 100644 (file)
@@ -2445,7 +2445,7 @@ static void release_channel(struct ngene_channel *chan)
 #endif
                if (chan->fe) {
                        dvb_unregister_frontend(chan->fe);
-                       /*dvb_frontend_detach(chan->fe); */
+                       dvb_frontend_detach(chan->fe);
                        chan->fe = 0;
                }
                dvbdemux->dmx.close(&dvbdemux->dmx);
@@ -2577,8 +2577,10 @@ static int __devinit ngene_probe(struct pci_dev *pci_dev,
                return -ENODEV;
 
        dev = vmalloc(sizeof(struct ngene));
-       if (dev == NULL)
-               return -ENOMEM;
+       if (dev == NULL) {
+               stat = -ENOMEM;
+               goto fail0;
+       }
        memset(dev, 0, sizeof(struct ngene));
 
        dev->pci_dev = pci_dev;
@@ -2618,6 +2620,8 @@ fail2:
        ngene_stop(dev);
 fail1:
        ngene_release_buffers(dev);
+fail0:
+       pci_disable_device(pci_dev);
        pci_set_drvdata(pci_dev, 0);
        return stat;
 }
@@ -2743,7 +2747,7 @@ static struct pci_driver ngene_pci_driver = {
        .name        = "ngene",
        .id_table    = ngene_id_tbl,
        .probe       = ngene_probe,
-       .remove      = ngene_remove,
+       .remove      = __devexit_p(ngene_remove),
        .err_handler = &ngene_errors,
 };