Merge remote-tracking branch 'asoc/for-5.9' into asoc-next
[linux-2.6-microblaze.git] / sound / soc / meson / axg-card.c
index 89f7f64..2b77010 100644 (file)
@@ -40,7 +40,7 @@ static const struct snd_soc_pcm_stream codec_params = {
 static int axg_card_tdm_be_hw_params(struct snd_pcm_substream *substream,
                                     struct snd_pcm_hw_params *params)
 {
-       struct snd_soc_pcm_runtime *rtd = substream->private_data;
+       struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
        struct meson_card *priv = snd_soc_card_get_drvdata(rtd->card);
        struct axg_dai_link_tdm_data *be =
                (struct axg_dai_link_tdm_data *)priv->link_data[rtd->num];
@@ -116,7 +116,7 @@ static int axg_card_add_tdm_loopback(struct snd_soc_card *card,
 
        lb = &card->dai_link[*index + 1];
 
-       lb->name = kasprintf(GFP_KERNEL, "%s-lb", pad->name);
+       lb->name = devm_kasprintf(card->dev, GFP_KERNEL, "%s-lb", pad->name);
        if (!lb->name)
                return -ENOMEM;
 
@@ -327,20 +327,22 @@ static int axg_card_add_link(struct snd_soc_card *card, struct device_node *np,
                return ret;
 
        if (axg_card_cpu_is_playback_fe(dai_link->cpus->of_node))
-               ret = meson_card_set_fe_link(card, dai_link, np, true);
+               return meson_card_set_fe_link(card, dai_link, np, true);
        else if (axg_card_cpu_is_capture_fe(dai_link->cpus->of_node))
-               ret = meson_card_set_fe_link(card, dai_link, np, false);
-       else
-               ret = meson_card_set_be_link(card, dai_link, np);
+               return meson_card_set_fe_link(card, dai_link, np, false);
 
+
+       ret = meson_card_set_be_link(card, dai_link, np);
        if (ret)
                return ret;
 
-       if (axg_card_cpu_is_tdm_iface(dai_link->cpus->of_node))
-               ret = axg_card_parse_tdm(card, np, index);
-       else if (axg_card_cpu_is_codec(dai_link->cpus->of_node)) {
+       if (axg_card_cpu_is_codec(dai_link->cpus->of_node)) {
                dai_link->params = &codec_params;
-               dai_link->no_pcm = 0; /* link is not a DPCM BE */
+       } else {
+               dai_link->no_pcm = 1;
+               snd_soc_dai_link_set_capabilities(dai_link);
+               if (axg_card_cpu_is_tdm_iface(dai_link->cpus->of_node))
+                       ret = axg_card_parse_tdm(card, np, index);
        }
 
        return ret;