summaryrefslogtreecommitdiffstats
path: root/sys/dev/sound/pci/csa.c
diff options
context:
space:
mode:
authorcg <cg@FreeBSD.org>2001-08-27 00:54:26 +0000
committercg <cg@FreeBSD.org>2001-08-27 00:54:26 +0000
commit2c0e81585db7ef98958dab88acd60685771f7291 (patch)
treecc65f3906aef8ff9fed04f02f24b2addf99767d9 /sys/dev/sound/pci/csa.c
parentc07859c916909808f7cff6785361d52752a25bf6 (diff)
downloadFreeBSD-src-2c0e81585db7ef98958dab88acd60685771f7291.zip
FreeBSD-src-2c0e81585db7ef98958dab88acd60685771f7291.tar.gz
MFS rev 1.8.2.8:
release resources on detach Submitted by: "Christopher N . Harrell" <cnh@netvmg.com>
Diffstat (limited to 'sys/dev/sound/pci/csa.c')
-rw-r--r--sys/dev/sound/pci/csa.c24
1 files changed, 22 insertions, 2 deletions
diff --git a/sys/dev/sound/pci/csa.c b/sys/dev/sound/pci/csa.c
index 4d2e506..3a026cb 100644
--- a/sys/dev/sound/pci/csa.c
+++ b/sys/dev/sound/pci/csa.c
@@ -333,11 +333,31 @@ err_io:
static int
csa_detach(device_t dev)
{
+ csa_res *resp;
sc_p scp;
+ int err;
scp = device_get_softc(dev);
- device_delete_child(dev, scp->midi);
- device_delete_child(dev, scp->pcm);
+ resp = &scp->res;
+
+ err = 0;
+ if (scp->midi != NULL)
+ err = device_delete_child(dev, scp->midi);
+ if (err)
+ return err;
+ scp->midi = NULL;
+
+ if (scp->pcm != NULL)
+ err = device_delete_child(dev, scp->pcm);
+ if (err)
+ return err;
+ scp->pcm = NULL;
+
+ bus_teardown_intr(dev, resp->irq, scp->ih);
+ bus_release_resource(dev, SYS_RES_IRQ, resp->irq_rid, resp->irq);
+ bus_release_resource(dev, SYS_RES_MEMORY, resp->mem_rid, resp->mem);
+ bus_release_resource(dev, SYS_RES_MEMORY, resp->io_rid, resp->io);
+
return bus_generic_detach(dev);
}
OpenPOWER on IntegriCloud