From alsa-devel-owner@alsa.jcu.cz  Thu Nov 26 12:43:35 1998
Received: from mbox.queen.it (root@mbox.queen.it [195.31.228.37])
	by marvin.jcu.cz (8.9.1a/8.9.1) with ESMTP id MAA04441
	for <alsa-devel@jcu.cz>; Thu, 26 Nov 1998 12:43:06 +0100
Received: from igor.opun.it (isdn12-fae.e-mind.com [195.223.140.161])
          by mbox.queen.it (8.8.7/8.8.4) with ESMTP
	  id MAA32003; Thu, 26 Nov 1998 12:42:58 +0100
Received: from racine.ra.it (localhost [127.0.0.1])
	by igor.opun.it (8.8.8/8.8.8) with ESMTP id MAA10154;
	Thu, 26 Nov 1998 12:39:48 +0100
Message-ID: <365D3E04.1CDCFE3E@racine.ra.it>
Date: Thu, 26 Nov 1998 12:39:48 +0100
From: Abramo Bagnara <abbagnara@racine.ra.it>
MIME-Version: 1.0
To: Christian Fischbach <fishbach@eucmos.sim.ucm.es>
CC: alsa-devel@jcu.cz
Subject: Re: Es1869 fist running version ...
References: <Pine.OSF.3.96.981124112612.17190B-100000@eucmos.sim.ucm.es>
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Reply-To: alsa-devel@alsa.jcu.cz
Sender: alsa-devel-owner@alsa.jcu.cz
Precedence: list

I've tested your first version.
It works for me too.

There's a problem that you can verify giving this sequence of commands:
$ exec 3> /dev/audio
$ cat ring.au >&3

As you'll hear the sound is repeated many times.

This is a patch for this problem:
Note that the argumens to snd_delay need to be fixed 

--- es1869.c.~1~	Sun Nov 22 22:01:55 1998
+++ es1869.c	Thu Nov 26 11:27:47 1998
@@ -434,31 +434,45 @@
 	/* Set DMA controler */
 	snd_dma_program(codec->dma2, buffer, size, DMA_MODE_WRITE |
DMA_MODE_AUTOINIT);
 
-	snd_spin_lock(codec, mixer, &flags);
-
-	/* Start DMA */
-	snd_es1869_mixer_bits(codec, 0x78, 0x03, 0x00);
-	
-	/* avoid pops */
-	snd_delay(10);
-
-	/* Enable Audio 2 (this register is set to 0 by reset) */
-	snd_es1869_mixer_write(codec, 0x7C, codec->audio2_vol);
-
-	snd_spin_unlock(codec, mixer, &flags);
-
 	printk("Playback prepare! Voices = 0x%x\n", pchn->voices);
 }
 
 static void snd_es1869_playback_trigger(snd_pcm1_t * pcm1, int up)
 {
 	es1869_t *codec;
+	unsigned long flags;
 
 	codec = (es1869_t *) pcm1->private_data;
 	if(up)
 		codec->trigger_value |= 0x01;
 	else
 		codec->trigger_value &= ~0x01;
+
+	snd_spin_lock(codec, reg, &flags);
+
+	if (up) {
+	  /* Start DMA */
+	  snd_es1869_mixer_bits(codec, 0x78, 0x03, 0x00);
+	  
+	  /* avoid pops */
+	  snd_delay(10);
+
+	  /* Enable Audio 2 (this register is set to 0 by reset) */
+	  snd_es1869_mixer_write(codec, 0x7C, codec->audio2_vol);
+	}
+	else {
+	  /* Stop DMA */
+	  snd_es1869_mixer_bits(codec, 0x78, 0x00, 0x03);
+
+	  snd_delay(3);
+
+	  /* Disable Audio 2 (this register is set to 0 by reset) */
+	  snd_es1869_mixer_write(codec, 0x7C, 0);
+	}
+
+	snd_spin_unlock(codec, reg, &flags);
+
+	printk("Playback trigger! Up = %d\n", up);
 }
 
 static void snd_es1869_record_prepare(snd_pcm1_t *pcm1,
@@ -530,25 +544,34 @@
 	/* avoid pops */
 	snd_delay(10);
 
-	snd_spin_lock(codec, reg, &flags);
-
-	/* Start DMA */
-	snd_es1869_bits(codec, 0xB8, 0x01, 0x00);
-
-	snd_spin_unlock(codec, reg, &flags);
-
 	printk("Record prepare! Voices = 0x%x\n", pchn->voices);
 }
 
 static void snd_es1869_record_trigger(snd_pcm1_t *pcm1, int up)
 {
 	es1869_t *codec;
+	unsigned long flags;
 
 	codec = (es1869_t *) pcm1->private_data;
 	if(up)
 		codec->trigger_value |= 0x02;
 	else
 		codec->trigger_value &= ~0x02;
+
+	snd_spin_lock(codec, reg, &flags);
+
+	if (up) {
+	  /* Start DMA */
+	  snd_es1869_bits(codec, 0xB8, 0x01, 0x00);
+	}
+	else {
+	  /* Stop DMA */
+	  snd_es1869_bits(codec, 0xB8, 0x00, 0x01);
+	}
+
+	snd_spin_unlock(codec, reg, &flags);
+
+	printk("Record trigger! Up = %d\n", up);
 }
 
 void snd_es1869_interrupt(snd_pcm_t *pcm)

