ASoC: SOF: topology: parse and store d0i3_compatible flag
authorKeyon Jie <yang.jie@linux.intel.com>
Fri, 25 Oct 2019 22:41:05 +0000 (17:41 -0500)
committerMark Brown <broonie@kernel.org>
Mon, 28 Oct 2019 14:42:26 +0000 (14:42 +0000)
Parses the token from tplg file and store it to snd_sof_pcm_stream
d0i3_compatible flag, which can be used later for d0ix transition
management.

Signed-off-by: Keyon Jie <yang.jie@linux.intel.com>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://lore.kernel.org/r/20191025224122.7718-10-pierre-louis.bossart@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sof/topology.c

index 121e5d6..cc138ac 100644 (file)
@@ -2307,6 +2307,7 @@ static int sof_dai_load(struct snd_soc_component *scomp, int index,
 {
        struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(scomp);
        struct snd_soc_tplg_stream_caps *caps;
+       struct snd_soc_tplg_private *private = &pcm->priv;
        struct snd_sof_pcm *spcm;
        int stream = SNDRV_PCM_STREAM_PLAYBACK;
        int ret = 0;
@@ -2329,10 +2330,22 @@ static int sof_dai_load(struct snd_soc_component *scomp, int index,
        dai_drv->dobj.private = spcm;
        list_add(&spcm->list, &sdev->pcm_list);
 
+       ret = sof_parse_tokens(scomp, spcm, stream_tokens,
+                              ARRAY_SIZE(stream_tokens), private->array,
+                              le32_to_cpu(private->size));
+       if (ret) {
+               dev_err(sdev->dev, "error: parse stream tokens failed %d\n",
+                       le32_to_cpu(private->size));
+               return ret;
+       }
+
        /* do we need to allocate playback PCM DMA pages */
        if (!spcm->pcm.playback)
                goto capture;
 
+       dev_vdbg(sdev->dev, "tplg: pcm %s stream tokens: playback d0i3:%d\n",
+                spcm->pcm.pcm_name, spcm->stream[0].d0i3_compatible);
+
        caps = &spcm->pcm.caps[stream];
 
        /* allocate playback page table buffer */
@@ -2360,6 +2373,9 @@ capture:
        if (!spcm->pcm.capture)
                return ret;
 
+       dev_vdbg(sdev->dev, "tplg: pcm %s stream tokens: capture d0i3:%d\n",
+                spcm->pcm.pcm_name, spcm->stream[1].d0i3_compatible);
+
        caps = &spcm->pcm.caps[stream];
 
        /* allocate capture page table buffer */