Date: Tue, 25 Jan 2000 19:30:07 -0500 (EST) From: Andrew Gallatin <gallatin@cs.duke.edu> To: current@freebsd.org Cc: cg@freebsd.org Subject: newpcm: ESS1688, simplex problems, stuttering Message-ID: <14478.15418.821563.496512@grasshopper.cs.duke.edu>
index | next in thread | raw e-mail
I've just upgraded my wheezing P120Mhz Dell Lattitude LM to a recent
-current (Jan24 snap) & the sound *almost* works!
The first problem I had was to get the card recognized. I needed to
patch the sbc bridge driver to recognize the ESS 1688:
Index: sys/dev/sound/isa/sbc.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/sound/isa/sbc.c,v
retrieving revision 1.16
diff -u -r1.16 sbc.c
--- sbc.c 2000/01/12 11:16:23 1.16
+++ sbc.c 2000/01/25 04:29:06
@@ -205,6 +205,7 @@
{0x01100000, "Avance Asound 110"}, /* @@@1001 */
{0x01200000, "Avance Logic ALS120"}, /* @@@2001 */
+ {0x02017316, "ESS ES1688"}, /* ESS1688 */
{0x68187316, "ESS ES1868"}, /* ESS1868 */
{0x69187316, "ESS ES1869"}, /* ESS1869 */
{0xacb0110e, "ESS ES1869 (Compaq OEM)"}, /* CPQb0ac */
The second problem I had was that this laptop gives its sound card
only one DMA channel (drq 1). Newpcm seems to have horrible problems
on simplex cards:
The sound card is now recognized & when I run amp I don't hear any
output. If I run ktrace on the amp session, it doesn't look like any
writes are initiated to /dev/dsp from the child process. I don't see
any interrupts on irq5 nor do I hear any sound.
The problem is that in getchns() (in dsp.c), the channel is set to
fakechan if the channel is simplex (eg, 1 DMA channel) and if the
priority hasn't been set. It looks like SD_F_PRIO_WR is only set on
the channel in dsp_write(). But apparently dsp_write() never gets
called (or gets called after getchns()), so this prevents newpcm from
working on a simplex channel. I have the following crude hack in
place:
Index: sys/dev/sound/pcm/dsp.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/sound/pcm/dsp.c,v
retrieving revision 1.14
diff -u -r1.14 dsp.c
--- dsp.c 2000/01/10 07:05:15 1.14
+++ dsp.c 2000/01/25 04:27:12
@@ -54,6 +54,8 @@
KASSERT((d->flags & SD_F_PRIO_SET) != SD_F_PRIO_SET, \
("getchns: read and write both prioritised"));
+if(!(d->flags & (SD_F_PRIO_RD | SD_F_PRIO_WR))) d->flags |= SD_F_PRIO_WR;
+
if (d->flags & SD_F_SIMPLEX) {
*rdch = (d->flags & SD_F_PRIO_RD)? d->arec[chan] : &d->fakechan;
*wrch = (d->flags & SD_F_PRIO_WR)? d->aplay[chan] : &d->fakechan;
This gets me to the point where I can actually hear my laptop make
noise! Unfortunately, I seem to be having the same symptoms as Nick
Hibma & Donn Miller are reporting in the "pcm - stutters" thread.
Since my box is dog-slow, I only hear stuttering from amp. It is a
little better with RealPlayerG2, but not great.
Thanks for any help!
Drew
------------------------------------------------------------------------------
Andrew Gallatin, Sr Systems Programmer http://www.cs.duke.edu/~gallatin
Duke University Email: gallatin@cs.duke.edu
Department of Computer Science Phone: (919) 660-6590
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message
help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?14478.15418.821563.496512>
