At Wed, 29 Apr 2009 10:37:17 -0400, Jon Smirl wrote: > > On Wed, Apr 29, 2009 at 10:35 AM, Jon Smirl <jonsmirl@xxxxxxxxx> wrote: > > On Wed, Apr 29, 2009 at 9:04 AM, Takashi Iwai <tiwai@xxxxxxx> wrote: > >> At Wed, 29 Apr 2009 08:58:52 -0400, > >> Jon Smirl wrote: > >>> > >>> My hardware was has three stereo i2s lines. These three lines are all > >>> tied to the same external clock so they are synchronized. Because > >>> there are three i2s lines, each with it's own DMA queue and FIFO, I > >>> need three independent output buffers. What is the correct way to set > >>> this up in ALSA? > >> > >> So I suppose it's three streams of 2-ch interleaved format? > > > > Yes > > > >> If so, an easier way would be to provide three substreams in a PCM, > >> and bind 6 channels with alsa-lib plugin. > > > > How does ALSA start the streams synchronously? > > I can start the streams synchronously at the low level by waiting for > the frame clock and then enabling the three DMA channels. If the hardware supports the simultaneous triggering of multiple streams, add the sync support to the driver. Namely, - Add SNDRV_PCM_INFO_SYNC_START flag to PCM info field - Call snd_pcm_set_sync(substream) at each open callback - In the trigger callback, check all bundled streams via snd_pcm_group_for_each_entry(). Mark all the streams but the current one via snd_pcm_trigger_done(). Then start all streams at once. Ditto for stop and pause. Takashi _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel