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@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; }