Well, I poked at it a bit and quickly noticed a 'half duplex' option for dsps... While I'm not an ALSA programmer, and don't know if this is the correct fix, I do know it's making things work more like I would expect them to :/
Patch is attached. On Thu, Jul 31, 2003 at 06:57:14AM -0500, Zinx Verituse wrote: > Appologies if this has been answered before, but I have a dsp > with no capture device (it's the primary(secondary?) on a > ens1370), and haven't been able to get quake3 based engines to > open it.. > > echo "quake3.x86 0 0 disable" > /proc/asound/card0/pcm1c/oss > > The above can't work, because no capture device exists, and > it seems to try opening with capture enabled if the capture > device doesn't exist: It returns 'No such device' on the open > of /dev/adsp, though sox will play to /dev/adsp fine. > > I also tried disabling the capture device that does exist > (via /proc/asound/card0/pcm0c/oss) for the game -- It produced > no noticable results (i.e., still returns 'No such device') > > I attempted hacking the binary to open /dev/adsp as O_WRONLY, > but as you can imagine this resulted in the mmap failing.. > > So.. Is there any way to make alsa's OSS emulation realize the > application isn't going to use the capture when there is _no_ > capture device? -- Zinx Verituse
--- linux-2.6.0-test2.orig/sound/pci/ens1370.c 2003-07-27 12:07:27.000000000 -0500 +++ linux-2.6.0-test2/sound/pci/ens1370.c 2003-07-31 07:05:29.000000000 -0500 @@ -1258,7 +1258,7 @@ #endif pcm->private_data = ensoniq; pcm->private_free = snd_ensoniq_pcm_free2; - pcm->info_flags = 0; + pcm->info_flags = SNDRV_PCM_INFO_HALF_DUPLEX; #ifdef CHIP1370 strcpy(pcm->name, "ES1370 DAC1"); #else