Merge tag 'sound-5.13-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai...
[linux-2.6-microblaze.git] / sound / soc / sof / nocodec.c
index 3b9bb2e..356497f 100644 (file)
@@ -20,16 +20,14 @@ static struct snd_soc_card sof_nocodec_card = {
 };
 
 static int sof_nocodec_bes_setup(struct device *dev,
-                                const struct snd_sof_dsp_ops *ops,
+                                struct snd_soc_dai_driver *drv,
                                 struct snd_soc_dai_link *links,
-                                int link_num, struct snd_soc_card *card,
-                                int (*pcm_dai_link_fixup)(struct snd_soc_pcm_runtime *rtd,
-                                                          struct snd_pcm_hw_params *params))
+                                int link_num, struct snd_soc_card *card)
 {
        struct snd_soc_dai_link_component *dlc;
        int i;
 
-       if (!ops || !links || !card)
+       if (!drv || !links || !card)
                return -EINVAL;
 
        /* set up BE dai_links */
@@ -55,16 +53,16 @@ static int sof_nocodec_bes_setup(struct device *dev,
 
                links[i].id = i;
                links[i].no_pcm = 1;
-               links[i].cpus->dai_name = ops->drv[i].name;
-               links[i].platforms->name = dev_name(dev);
+               links[i].cpus->dai_name = drv[i].name;
+               links[i].platforms->name = dev_name(dev->parent);
                links[i].codecs->dai_name = "snd-soc-dummy-dai";
                links[i].codecs->name = "snd-soc-dummy";
-               if (ops->drv[i].playback.channels_min)
+               if (drv[i].playback.channels_min)
                        links[i].dpcm_playback = 1;
-               if (ops->drv[i].capture.channels_min)
+               if (drv[i].capture.channels_min)
                        links[i].dpcm_capture = 1;
 
-               links[i].be_hw_params_fixup = pcm_dai_link_fixup;
+               links[i].be_hw_params_fixup = sof_pcm_dai_link_fixup;
        }
 
        card->dai_link = links;
@@ -73,29 +71,34 @@ static int sof_nocodec_bes_setup(struct device *dev,
        return 0;
 }
 
-int sof_nocodec_setup(struct device *dev, const struct snd_sof_dsp_ops *ops,
-                     int (*pcm_dai_link_fixup)(struct snd_soc_pcm_runtime *rtd,
-                                               struct snd_pcm_hw_params *params))
+static int sof_nocodec_setup(struct device *dev,
+                            u32 num_dai_drivers,
+                            struct snd_soc_dai_driver *dai_drivers)
 {
        struct snd_soc_dai_link *links;
 
        /* create dummy BE dai_links */
-       links = devm_kzalloc(dev, sizeof(struct snd_soc_dai_link) *
-                            ops->num_drv, GFP_KERNEL);
+       links = devm_kzalloc(dev, sizeof(struct snd_soc_dai_link) * num_dai_drivers, GFP_KERNEL);
        if (!links)
                return -ENOMEM;
 
-       return sof_nocodec_bes_setup(dev, ops, links, ops->num_drv,
-                                    &sof_nocodec_card, pcm_dai_link_fixup);
+       return sof_nocodec_bes_setup(dev, dai_drivers, links, num_dai_drivers, &sof_nocodec_card);
 }
-EXPORT_SYMBOL(sof_nocodec_setup);
 
 static int sof_nocodec_probe(struct platform_device *pdev)
 {
        struct snd_soc_card *card = &sof_nocodec_card;
+       struct snd_soc_acpi_mach *mach;
+       int ret;
 
        card->dev = &pdev->dev;
        card->topology_shortname_created = true;
+       mach = pdev->dev.platform_data;
+
+       ret = sof_nocodec_setup(card->dev, mach->mach_params.num_dai_drivers,
+                               mach->mach_params.dai_drivers);
+       if (ret < 0)
+               return ret;
 
        return devm_snd_soc_register_card(&pdev->dev, card);
 }