I messed around with the source a bit trying to get rid of
the pops present in the record of 8bit sound on my es1370
card, and came up with this patch which I doubt is right.
(I suspect it should simply subtract 1 when 16bit, and not
when 8bit.. rather than subtracting 2 when it's 32bit, which
by the way the card doesn't seem to support.. I get lots of
16bit values with the (LE) high byte set to 00)
Anyway, here it is :)
--
Zinx Verituse
diff -rHU 5 alsa-driver-0.9.0beta11.orig/alsa-kernel/pci/ens1370.c
alsa-driver-0.9.0beta11/alsa-kernel/pci/ens1370.c
--- alsa-driver-0.9.0beta11.orig/alsa-kernel/pci/ens1370.c Thu Feb 14 11:40:33
2002
+++ alsa-driver-0.9.0beta11/alsa-kernel/pci/ens1370.c Tue Feb 19 13:38:06 2002
@@ -880,11 +880,11 @@
spin_lock_irqsave(&ensoniq->reg_lock, flags);
ensoniq->ctrl &= ~ES_ADC_EN;
outl(ensoniq->ctrl, ES_REG(ensoniq, CONTROL));
outl(ES_MEM_PAGEO(ES_PAGE_ADC), ES_REG(ensoniq, MEM_PAGE));
outl(runtime->dma_addr, ES_REG(ensoniq, ADC_FRAME));
- outl((ensoniq->c_dma_size >> 2) - 1, ES_REG(ensoniq, ADC_SIZE));
+ outl((ensoniq->c_dma_size >> 2) - snd_ensoniq_sample_shift[mode],
+ES_REG(ensoniq, ADC_SIZE));
ensoniq->sctrl &= ~(ES_R1_LOOP_SEL | ES_R1_MODEM);
ensoniq->sctrl |= ES_R1_INT_EN | ES_R1_MODEO(mode);
outl(ensoniq->sctrl, ES_REG(ensoniq, SERIAL));
outl((ensoniq->c_period_size >> snd_ensoniq_sample_shift[mode]) - 1,
ES_REG(ensoniq, ADC_COUNT));