summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorcg <cg@FreeBSD.org>2000-10-26 01:34:54 +0000
committercg <cg@FreeBSD.org>2000-10-26 01:34:54 +0000
commitfaddab638dfbab0c80d33099925fe84532d44ee9 (patch)
treeb439109e0661481cc32185ee1bd9279020d83b76 /sys
parent066ba04e21867adcf864439a389b585cddd619c9 (diff)
downloadFreeBSD-src-faddab638dfbab0c80d33099925fe84532d44ee9.zip
FreeBSD-src-faddab638dfbab0c80d33099925fe84532d44ee9.tar.gz
handle AFMT_QUERY right
Diffstat (limited to 'sys')
-rw-r--r--sys/dev/sound/pcm/dsp.c21
1 files changed, 15 insertions, 6 deletions
diff --git a/sys/dev/sound/pcm/dsp.c b/sys/dev/sound/pcm/dsp.c
index 9bd8bc5..ae8ed0b 100644
--- a/sys/dev/sound/pcm/dsp.c
+++ b/sys/dev/sound/pcm/dsp.c
@@ -141,7 +141,7 @@ dsp_close(snddev_info *d, int chan, int devtype)
{
pcm_channel *rdch, *wrch;
- d->ref[chan]--;
+ d->ref[chan] = 0;
#if 0
/* enable this if/when every close() is propagated here */
if (d->ref[chan]) return 0;
@@ -411,10 +411,12 @@ dsp_ioctl(snddev_info *d, int chan, u_long cmd, caddr_t arg)
case SNDCTL_DSP_SETFMT: /* sets _one_ format */
splx(s);
- if (wrch)
- ret = chn_setformat(wrch, (*arg_i) | (wrch->format & AFMT_STEREO));
- if (rdch && ret == 0)
- ret = chn_setformat(rdch, (*arg_i) | (rdch->format & AFMT_STEREO));
+ if ((*arg_i != AFMT_QUERY)) {
+ if (wrch)
+ ret = chn_setformat(wrch, (*arg_i) | (wrch->format & AFMT_STEREO));
+ if (rdch && ret == 0)
+ ret = chn_setformat(rdch, (*arg_i) | (rdch->format & AFMT_STEREO));
+ }
*arg_i = (wrch? wrch->format: rdch->format) & ~AFMT_STEREO;
break;
@@ -597,7 +599,14 @@ dsp_ioctl(snddev_info *d, int chan, u_long cmd, caddr_t arg)
} else
ret = EINVAL;
break;
-
+/*
+ case SNDCTL_DSP_POST:
+ if (wrch) {
+ wrch->flags &= ~CHN_F_NOTRIGGER;
+ chn_start(wrch, 1);
+ }
+ break;
+*/
case SNDCTL_DSP_MAPINBUF:
case SNDCTL_DSP_MAPOUTBUF:
case SNDCTL_DSP_SETSYNCRO:
OpenPOWER on IntegriCloud