MFS: make SNDCTL_DSP_SETTRIGGER work

This commit is contained in:
Cameron Grant 2001-08-23 11:58:38 +00:00
parent 1662598f0c
commit 92f39b2c05
2 changed files with 5 additions and 7 deletions
sys/dev/sound/pcm

@ -422,7 +422,7 @@ chn_start(struct pcm_channel *c, int force)
CHN_LOCKASSERT(c);
/* if we're running, or if we're prevented from triggering, bail */
if ((c->flags & CHN_F_TRIGGERED) || (c->flags & CHN_F_NOTRIGGER))
if ((c->flags & CHN_F_TRIGGERED) || ((c->flags & CHN_F_NOTRIGGER) && !force))
return EINVAL;
i = (c->direction == PCMDIR_PLAY)? sndbuf_getready(bs) : sndbuf_getfree(bs);

@ -882,20 +882,18 @@ dsp_ioctl(dev_t i_dev, u_long cmd, caddr_t arg, int mode, struct proc *p)
if (rdch) {
CHN_LOCK(rdch);
rdch->flags &= ~(CHN_F_TRIGGERED | CHN_F_NOTRIGGER);
if (*arg_i & PCM_ENABLE_INPUT) {
rdch->flags |= CHN_F_TRIGGERED;
if (*arg_i & PCM_ENABLE_INPUT)
chn_start(rdch, 1);
} else
else
rdch->flags |= CHN_F_NOTRIGGER;
CHN_UNLOCK(rdch);
}
if (wrch) {
CHN_LOCK(wrch);
wrch->flags &= ~(CHN_F_TRIGGERED | CHN_F_NOTRIGGER);
if (*arg_i & PCM_ENABLE_OUTPUT) {
wrch->flags |= CHN_F_TRIGGERED;
if (*arg_i & PCM_ENABLE_OUTPUT)
chn_start(wrch, 1);
} else
else
wrch->flags |= CHN_F_NOTRIGGER;
CHN_UNLOCK(wrch);
}