summaryrefslogtreecommitdiff
path: root/sys/src/9/pc/audioac97.c
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@localhost>2011-07-03 06:33:13 +0200
committercinap_lenrek <cinap_lenrek@localhost>2011-07-03 06:33:13 +0200
commit6888db2820dfcf260a1269b5bad4cd55fd189bf5 (patch)
tree397b3f290661a58185ba15ec3b0e4adcd7646783 /sys/src/9/pc/audioac97.c
parentb274842f5cc186ea254fe61f5866fbc4c494b8c7 (diff)
audio: fill up last buffer with silence on close
Diffstat (limited to 'sys/src/9/pc/audioac97.c')
-rw-r--r--sys/src/9/pc/audioac97.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/sys/src/9/pc/audioac97.c b/sys/src/9/pc/audioac97.c
index 193d31e8a..e0732dd6b 100644
--- a/sys/src/9/pc/audioac97.c
+++ b/sys/src/9/pc/audioac97.c
@@ -326,6 +326,20 @@ ac97write(Audio *adev, void *vp, long n, vlong)
return p - (uchar*)vp;
}
+static void
+ac97close(Audio *adev)
+{
+ Ctlr *ctlr;
+ Ring *ring;
+ uchar z[1];
+
+ z[0] = 0;
+ ctlr = adev->ctlr;
+ ring = &ctlr->outring;
+ while(ring->wi % Blocksize)
+ ac97write(adev, z, sizeof(z), 0);
+}
+
static Pcidev*
ac97match(Pcidev *p)
{
@@ -499,6 +513,7 @@ Found:
ac97mixreset(adev, ac97mixw, ac97mixr);
adev->write = ac97write;
+ adev->close = ac97close;
adev->buffered = ac97buffered;
adev->status = ac97status;