[alsa-devel] [RFC v2 3/6] ASoC: core: add code to complete dai init after pcm creation
Jyri Sarha
jsarha at ti.com
Fri Feb 5 10:58:19 CET 2016
On 01/22/16 19:48, Arnaud Pouliquen wrote:
> Some Controls defined in DAI need to be associated to PCM device (e.g. IEC60958).
>
> This allows to perform post initialization in DAI after PCM device creation.
>
Sorry for my late reaction to this series (I was on vacation)...
I do not follow why you need this? The rest of the codecs create their
mixer elements in static struct snd_soc_codec_driver's probe-callback. I
can not see why it could not be used with hdmi-codec (then again I have
not tried it).
I'll try to test the patches that affects my Beaglebone-black hdmia
audio series anyway, I just need to rebase my branch in order to apply
this patch. For some reason "ASoc: hdmi-codec: add IEC control." did not
apply out of the box either...
Best regards,
Jyri
> Signed-off-by: Arnaud Pouliquen <arnaud.pouliquen at st.com>
> ---
> include/sound/soc-dai.h | 7 +++++++
> sound/soc/soc-core.c | 14 ++++++++++++++
> 2 files changed, 21 insertions(+)
>
> diff --git a/include/sound/soc-dai.h b/include/sound/soc-dai.h
> index 964b7de..6969c83 100644
> --- a/include/sound/soc-dai.h
> +++ b/include/sound/soc-dai.h
> @@ -205,6 +205,13 @@ struct snd_soc_dai_ops {
> */
> snd_pcm_sframes_t (*delay)(struct snd_pcm_substream *,
> struct snd_soc_dai *);
> +
> + /*
> + * function called by soc_probe_link_dais to post initialize DAI
> + * after pcm device creation.
> + * As example, can be used to link a controls to the pcm device
> + */
> + int (*pcm_new)(struct snd_soc_pcm_runtime *, struct snd_soc_dai *);
> };
>
> /*
> diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
> index 790ee2b..cf1d312 100644
> --- a/sound/soc/soc-core.c
> +++ b/sound/soc/soc-core.c
> @@ -1587,6 +1587,7 @@ static int soc_probe_link_dais(struct snd_soc_card *card,
> {
> struct snd_soc_dai_link *dai_link = rtd->dai_link;
> struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
> + const struct snd_soc_dai_ops *ops;
> int i, ret;
>
> dev_dbg(card->dev, "ASoC: probe %s dai link %d late %d\n",
> @@ -1662,6 +1663,19 @@ static int soc_probe_link_dais(struct snd_soc_card *card,
> }
> }
>
> + for (i = 0; i < rtd->num_codecs; i++) {
> + ops = rtd->codec_dais[i]->driver->ops;
> + if (ops->pcm_new)
> + ret = ops->pcm_new(rtd, rtd->codec_dais[i]);
> + if (ret)
> + return ret;
> + }
> + ops = cpu_dai->driver->ops;
> + if (ops->pcm_new)
> + ret = ops->pcm_new(rtd, rtd->codec_dais[i]);
> + if (ret)
> + return ret;
> +
> return 0;
> }
>
>
More information about the Alsa-devel
mailing list