On Wed, Mar 28, 2007 at 10:03:30PM +0200, Rask Ingemann Lambertsen wrote:
# echo 'set irq 10 dma 5 dma 1' > /sys/bus/pnp/devices/03:01/resources # modprobe snd-jazz16 $ cat /proc/asound/cards 0 [CMI8738 ]: CMI8738 - C-Media PCI CMI8738 C-Media PCI CMI8738 (model 37) at 0xd800, irq 9 1 [Jazz16 ]: Jazz16 - Media Vision Jazz16 Sound Blaster Pro (Jazz16) at 0x220, irq 10, dma8 5, dma16 1
Notice the dma16 = 1 setting.
[Trying to play 16-bit sound through an 8-bit DMA channel]
$ aplay -v -D hw:Jazz16,0 /tmp/male.wav Playing WAVE '/tmp/male.wav' : Signed 16 bit Little Endian, Rate 8000 Hz, Mono Hardware PCM card 1 'Media Vision Jazz16' device 0 subdevice 0 Its setup is: stream : PLAYBACK access : RW_INTERLEAVED format : S16_LE subformat : STD channels : 1 rate : 8000 exact rate : 8000 (1000000/125) msbits : 16 buffer_size : 4000 period_size : 1000 period_time : 125000 tick_time : 4000 tstamp_mode : NONE period_step : 1 sleep_min : 0 avail_min : 1000 xfer_align : 1000 start_threshold : 4000 stop_threshold : 4000 silence_threshold: 0 silence_size : 0 boundary : 2097152000 aplay: pcm_write:1257: write error: Ind/ud-fejl
No sound, no interrupts and this message from /var/log/kernel: kernel: playback write error (DMA or IRQ trouble?)
The root cause is that snd_sbdsp_create() only supports dma16 set to 5, 6 or 7. Any other value is changed to -1, which is what happens in this case. It is a hack to avoid trouble with recent SoundBlaster 16 cards (Vibra16VX) using two 8-bit DMA channels, which the SB16 doesn't support.
Fix: Use only dma8.