[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