summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcg <cg@FreeBSD.org>2000-03-05 15:51:09 +0000
committercg <cg@FreeBSD.org>2000-03-05 15:51:09 +0000
commit3e2fdbb2dd8aef2ecdcb4a5026733773122121aa (patch)
tree6641334c6ba0c726ba0e85ce1ed61a4171bc1948
parent0df8e6120e0d92519d5fa0a0ed2e248fa25a5035 (diff)
downloadFreeBSD-src-3e2fdbb2dd8aef2ecdcb4a5026733773122121aa.zip
FreeBSD-src-3e2fdbb2dd8aef2ecdcb4a5026733773122121aa.tar.gz
Partial fix: the following patch correctly configures the card for dual
channel DMA. The problem was that the SDC bit (0x04) can only be set in the MCE state. PR: kern/16587 Submitted by: Matthew Reimer <mreimer@vpop.net> Approved by: jkh (in person)
-rw-r--r--sys/dev/sound/isa/mss.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/sys/dev/sound/isa/mss.c b/sys/dev/sound/isa/mss.c
index 6a1a3ed..400c8b8 100644
--- a/sys/dev/sound/isa/mss.c
+++ b/sys/dev/sound/isa/mss.c
@@ -92,6 +92,8 @@ static int ad_wait_init(struct mss_info *mss, int x);
static int ad_read(struct mss_info *mss, int reg);
static void ad_write(struct mss_info *mss, int reg, u_char data);
static void ad_write_cnt(struct mss_info *mss, int reg, u_short data);
+static void ad_enter_MCE(struct mss_info *mss);
+static void ad_leave_MCE(struct mss_info *mss);
/* io primitives */
static void conf_wr(struct mss_info *mss, u_char reg, u_char data);
@@ -465,8 +467,10 @@ mss_init(struct mss_info *mss, device_t dev)
}
if (FULL_DUPLEX(mss) && mss->bd_id != MD_OPTI931)
ad_write(mss, 12, ad_read(mss, 12) | 0x40); /* mode 2 */
+ ad_enter_MCE(mss);
ad_write(mss, 9, FULL_DUPLEX(mss)? 0 : 4);
- ad_write(mss, 10, 2); /* int enable */
+ ad_leave_MCE(mss);
+ ad_write(mss, 10, 2); /* int enable */
io_wr(mss, MSS_STATUS, 0); /* Clear interrupt status */
/* the following seem required on the CS4232 */
ad_unmute(mss);
OpenPOWER on IntegriCloud