diff options
author | cg <cg@FreeBSD.org> | 2000-03-05 15:51:09 +0000 |
---|---|---|
committer | cg <cg@FreeBSD.org> | 2000-03-05 15:51:09 +0000 |
commit | 3e2fdbb2dd8aef2ecdcb4a5026733773122121aa (patch) | |
tree | 6641334c6ba0c726ba0e85ce1ed61a4171bc1948 | |
parent | 0df8e6120e0d92519d5fa0a0ed2e248fa25a5035 (diff) | |
download | FreeBSD-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.c | 6 |
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); |