Fix panic caused by full duplex operation.
From the PR: ---snip--- The vibra16X supports full duplex. I traced the Windows driver, and what is does is that it programs one DMA channel 8-bit, and the other 16-bit. There might be some kind of auto detection logic here, because it always uses 8-bit for playback, even if I play 16-bit sound ... ---snip--- PR: 80977 Submitted by: Hans Petter Selasky <hselasky@c2i.net>
This commit is contained in:
parent
fe0fc7efe3
commit
0725262365
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=149948
@ -494,7 +494,7 @@ static void
|
|||||||
sb_intr(void *arg)
|
sb_intr(void *arg)
|
||||||
{
|
{
|
||||||
struct sb_info *sb = (struct sb_info *)arg;
|
struct sb_info *sb = (struct sb_info *)arg;
|
||||||
int reason = 3, c;
|
int reason, c;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The Vibra16X has separate flags for 8 and 16 bit transfers, but
|
* The Vibra16X has separate flags for 8 and 16 bit transfers, but
|
||||||
@ -570,8 +570,9 @@ sb_setup(struct sb_info *sb)
|
|||||||
sb_reset_dsp(sb);
|
sb_reset_dsp(sb);
|
||||||
|
|
||||||
if (sb->bd_flags & BD_F_SB16X) {
|
if (sb->bd_flags & BD_F_SB16X) {
|
||||||
|
/* full-duplex doesn't work! */
|
||||||
pprio = sb->pch.run? 1 : 0;
|
pprio = sb->pch.run? 1 : 0;
|
||||||
sndbuf_dmasetup(sb->pch.buffer, pprio? sb->drq1 : NULL);
|
sndbuf_dmasetup(sb->pch.buffer, pprio? sb->drq1 : sb->drq2);
|
||||||
sb->pch.dch = pprio? 1 : 0;
|
sb->pch.dch = pprio? 1 : 0;
|
||||||
sndbuf_dmasetup(sb->rch.buffer, pprio? sb->drq2 : sb->drq1);
|
sndbuf_dmasetup(sb->rch.buffer, pprio? sb->drq2 : sb->drq1);
|
||||||
sb->rch.dch = pprio? 2 : 1;
|
sb->rch.dch = pprio? 2 : 1;
|
||||||
|
Loading…
Reference in New Issue
Block a user