[alsa-devel] ASoC Multiple outputs
Liam Girdwood
liam.r.girdwood at linux.intel.com
Tue Jul 14 12:25:55 CEST 2015
Reflowed formatting. Best to always CC maintainers too.
On Mon, 2015-07-13 at 07:39 +0000, Matt Redfearn wrote:
> Hi list,
> I am writing an ALSA driver for an SoC / board which has a single I2S
> source. The source may be connected internally to either a codec
> outputting to analogue headphones, or to an HDMI transmitter.
> At the moment I have set up two snd_soc_dai_link within the same card
> connecting the source to each sink.
>
> static struct snd_soc_dai_link ci20_dai_link[] = {
> {
> .name = "ci20",
> .stream_name = "headphones",
> .cpu_dai_name = "jz4780-i2s",
> .platform_name = "jz4780-i2s",
> .codec_dai_name = "jz4780-hifi",
> .codec_name = "jz4780-codec",
> .init = ci20_init,
> .ops = &ci20_audio_dai_ops,
> .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBM_CFM,
> },
> {
> .name = "ci20 HDMI",
> .stream_name = "hdmi",
> .cpu_dai_name = "jz4780-i2s",
> .platform_name = "jz4780-i2s",
> .codec_dai_name = "dw-hdmi-hifi",
> .codec_name = "dw-hdmi-audio",
> .init = ci20_hdmi_init,
> .ops = &ci20_audio_dai_ops,
> .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS,
> }
> };
>
> This works and creates 2 devices, and I am able to get mplayer to play
> sound out to either the headphones or HDMI using the argument "-ao
> alsa:device=hw=0.0" or "-ao alsa:device=hw=0.1"
>
> aplay -l
> **** List of PLAYBACK Hardware Devices ****
> card 0: ci20 [ci20], device 0: headphones jz4780-hifi-0 []
> Subdevices: 1/1
> Subdevice #0: subdevice #0
> card 0: ci20 [ci20], device 1: hdmi jz4780-hdmi-hifi-1 []
> Subdevices: 1/1
> Subdevice #0: subdevice #0
>
> However, alsamixer does not show anything about the second device
> (HDMI), only the analogue output associated with device 0.
> Please could someone advise what is the "correct" way to set up
> multiple links in such a system such that the headphones / HDMI
> outputs appear in the mixer and are available to pulseaudio.
This looks correct. You have a PCM for each device. The mixers should
all be available for both PCMs unless there are mixer naming
problems/collisions ?
> Should I create multiple cards? Should I create subdevices for the
> different outputs? If so, what structures should be set up within the
> driver to achieve this?
> Suggestions of any documentation / websites that may help would be
> great!
Best to use a single card if the audio HW is shared between HDMI and
analog otherwise you could create separate cards if no audio HW is
shared between either PCM.
Liam
>
> Thanks!
> Matt
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel at alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
More information about the Alsa-devel
mailing list