Mark Brown wrote:
On Fri, Dec 17, 2010 at 02:41:26PM -0700, Stephen Warren wrote:
/*
- Terminology:
- DAS: Digital audio switch (HW module controlled by this driver)
- DAP: Digital audio port (port/pins on Tegra device)
- DAC: Digital audio controller (e.g. I2S or AC97 controller elsewhere)
- The Tegra DAS is a mux/cross-bar which can connect each DAP to a specific
- DAC, or another DAP. When DAPs are connected, one must be the master and
- one the slave. Each DAC allows selection of a specific DAP for input, to
- cater for the case where N DAPs are connected to 1 DAC for broadcast
- output.
- This driver is dumb; no attempt is made to ensure that a valid routing
- configuration is programmed.
*/
Reading this it's essentially just exporting point to point switches within the DAS block. This really feels like it ought to be represented as a CODEC driver to give runtime flexibility to userspace to control the mux - it looks like the AP part of the system streams data into this block which then has very flexible switching on to the externally connected audio devices.
Hmm. I don't see any examples of anything like Tegra's DAS in the existing ASoC code-base. So, I'm slightly unsure how to recast the DAS driver as a codec. In particular, in the machine driver, would I do something like:
static struct snd_soc_dai_link harmony_i2s_das_link = { .name = "WM8903", .stream_name = "WM8903 PCM", .cpu_dai_name = "tegra-i2s-dai.0", .platform_name = "tegra-pcm-audio", .codec_name = "tegra-das.0", .codec_dai_name = "tegra-das.0-in", .ops = &harmony_i2s_das_ops, };
static struct snd_soc_dai_link harmony_das_wm8903_link = { .cpu_dai_name = "tegra-das.0-out", .codec_name = "wm8903-codec.0-001a", .codec_dai_name = "wm8903-hifi", .ops = &harmony_das_codec_ops, };
static struct snd_soc_dai_link *harmony_links[] = { & harmony_i2s_das_link, & harmony_das_wm8903_link, };
static struct snd_soc_card snd_soc_harmony = { .name = "tegra-harmony", .dai_link = &harmony_links, .num_links = ARRAY_SIZE(harmony_links), };
And then re-write the tegra-das driver to expose two DAIs somehow?
Wouldn't that end up exposing two streams to user-space, one for each entry in harmony_links[]?