ASoC: fsl: Restore configuration of platform
authorShengjiu Wang <shengjiu.wang@nxp.com>
Wed, 19 Apr 2023 10:29:18 +0000 (18:29 +0800)
committerMark Brown <broonie@kernel.org>
Wed, 19 Apr 2023 14:36:30 +0000 (15:36 +0100)
This reverts commit 33683cbf49b54 ("ASoC: fsl: remove unnecessary
dai_link->platform").

dai_link->platform is needed. The platform component is
"snd_dmaengine_pcm", which is registered from cpu driver,

If dai_link->platform is not assigned, then platform
component will not be probed, then there will be issue:

aplay: main:831: audio open error: Invalid argument

Signed-off-by: Shengjiu Wang <shengjiu.wang@nxp.com>
Link: https://lore.kernel.org/r/1681900158-17428-1-git-send-email-shengjiu.wang@nxp.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/fsl/imx-audmix.c
sound/soc/fsl/imx-spdif.c

index 2c57fe9d2d0870615b7b495eac2960dfd94a65a0..1292a845c42446797de09105d49d953998d9752c 100644 (file)
@@ -207,8 +207,8 @@ static int imx_audmix_probe(struct platform_device *pdev)
        for (i = 0; i < num_dai; i++) {
                struct snd_soc_dai_link_component *dlc;
 
-               /* for CPU/Codec x 2 */
-               dlc = devm_kcalloc(&pdev->dev, 4, sizeof(*dlc), GFP_KERNEL);
+               /* for CPU/Codec/Platform x 2 */
+               dlc = devm_kcalloc(&pdev->dev, 6, sizeof(*dlc), GFP_KERNEL);
                if (!dlc)
                        return -ENOMEM;
 
@@ -240,9 +240,11 @@ static int imx_audmix_probe(struct platform_device *pdev)
 
                priv->dai[i].cpus = &dlc[0];
                priv->dai[i].codecs = &dlc[1];
+               priv->dai[i].platforms = &dlc[2];
 
                priv->dai[i].num_cpus = 1;
                priv->dai[i].num_codecs = 1;
+               priv->dai[i].num_platforms = 1;
 
                priv->dai[i].name = dai_name;
                priv->dai[i].stream_name = "HiFi-AUDMIX-FE";
@@ -250,6 +252,7 @@ static int imx_audmix_probe(struct platform_device *pdev)
                priv->dai[i].codecs->name = "snd-soc-dummy";
                priv->dai[i].cpus->of_node = args.np;
                priv->dai[i].cpus->dai_name = dev_name(&cpu_pdev->dev);
+               priv->dai[i].platforms->of_node = args.np;
                priv->dai[i].dynamic = 1;
                priv->dai[i].dpcm_playback = 1;
                priv->dai[i].dpcm_capture = (i == 0 ? 1 : 0);
@@ -264,17 +267,20 @@ static int imx_audmix_probe(struct platform_device *pdev)
                be_cp = devm_kasprintf(&pdev->dev, GFP_KERNEL,
                                       "AUDMIX-Capture-%d", i);
 
-               priv->dai[num_dai + i].cpus = &dlc[2];
-               priv->dai[num_dai + i].codecs = &dlc[3];
+               priv->dai[num_dai + i].cpus = &dlc[3];
+               priv->dai[num_dai + i].codecs = &dlc[4];
+               priv->dai[num_dai + i].platforms = &dlc[5];
 
                priv->dai[num_dai + i].num_cpus = 1;
                priv->dai[num_dai + i].num_codecs = 1;
+               priv->dai[num_dai + i].num_platforms = 1;
 
                priv->dai[num_dai + i].name = be_name;
                priv->dai[num_dai + i].codecs->dai_name = "snd-soc-dummy-dai";
                priv->dai[num_dai + i].codecs->name = "snd-soc-dummy";
                priv->dai[num_dai + i].cpus->of_node = audmix_np;
                priv->dai[num_dai + i].cpus->dai_name = be_name;
+               priv->dai[num_dai + i].platforms->name = "snd-soc-dummy";
                priv->dai[num_dai + i].no_pcm = 1;
                priv->dai[num_dai + i].dpcm_playback = 1;
                priv->dai[num_dai + i].dpcm_capture  = 1;
index 114b49660193e0d284dccae6da0dac2b2c964c9a..4446fba755b9afbac7b8a1cc254a65e54419aa7a 100644 (file)
@@ -26,7 +26,7 @@ static int imx_spdif_audio_probe(struct platform_device *pdev)
        }
 
        data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL);
-       comp = devm_kzalloc(&pdev->dev, 2 * sizeof(*comp), GFP_KERNEL);
+       comp = devm_kzalloc(&pdev->dev, 3 * sizeof(*comp), GFP_KERNEL);
        if (!data || !comp) {
                ret = -ENOMEM;
                goto end;
@@ -34,15 +34,18 @@ static int imx_spdif_audio_probe(struct platform_device *pdev)
 
        data->dai.cpus          = &comp[0];
        data->dai.codecs        = &comp[1];
+       data->dai.platforms     = &comp[2];
 
        data->dai.num_cpus      = 1;
        data->dai.num_codecs    = 1;
+       data->dai.num_platforms = 1;
 
        data->dai.name = "S/PDIF PCM";
        data->dai.stream_name = "S/PDIF PCM";
        data->dai.codecs->dai_name = "snd-soc-dummy-dai";
        data->dai.codecs->name = "snd-soc-dummy";
        data->dai.cpus->of_node = spdif_np;
+       data->dai.platforms->of_node = spdif_np;
        data->dai.playback_only = true;
        data->dai.capture_only = true;