[alsa-devel] [PATCH 1/5] ASoC: tlv320dac33: Fix for early interrupt in FIFO Mode1

Peter Ujfalusi peter.ujfalusi at nokia.com
Thu Apr 22 15:57:46 CEST 2010

Alarm threshold interrupt is triggered right after the
playback start.
This interrupt is recieved during the first burst period,
and caused the state machine to write additional nSample
command, which has to be avoided.
To fix this issue move the DAC33 interrupt unmasking
after we configured the PREFILL register with a small

Signed-off-by: Peter Ujfalusi <peter.ujfalusi at nokia.com>
 sound/soc/codecs/tlv320dac33.c |    6 ++++--
 1 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/sound/soc/codecs/tlv320dac33.c b/sound/soc/codecs/tlv320dac33.c
index 824bb35..8a7265f 100644
--- a/sound/soc/codecs/tlv320dac33.c
+++ b/sound/soc/codecs/tlv320dac33.c
@@ -557,9 +557,12 @@ static inline void dac33_prefill_handler(struct tlv320dac33_priv *dac33)
 	switch (dac33->fifo_mode) {
 	case DAC33_FIFO_MODE1:
 		dac33_write16(codec, DAC33_NSAMPLE_MSB,
-				DAC33_THRREG(dac33->nsample));
+			DAC33_THRREG(dac33->nsample + dac33->alarm_threshold));
 		dac33_write16(codec, DAC33_PREFILL_MSB,
+		/* Enable Alarm Threshold IRQ */
+		msleep(2);
+		dac33_write(codec, DAC33_FIFO_IRQ_MASK, DAC33_MAT);
 	case DAC33_FIFO_MODE7:
 		dac33_write16(codec, DAC33_PREFILL_MSB,
@@ -782,7 +785,6 @@ static int dac33_prepare_chip(struct snd_pcm_substream *substream)
 	case DAC33_FIFO_MODE1:
 		dac33_write(codec, DAC33_FIFO_IRQ_MODE_B,
-		dac33_write(codec, DAC33_FIFO_IRQ_MASK, DAC33_MAT);
 	case DAC33_FIFO_MODE7:
 		/* Disable all interrupts */

More information about the Alsa-devel mailing list