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