浏览代码

ASoC: omap-abe-twl6040: DAI link selection based on platform data

We can have machines without DMIC connected. In this case there is
no need to create amother (unusable) capture PCM on the card.
The existence of the DMIC connection can be checked via
pdata->has_dmic.
Select the correct dai_link structure for the card based on
pdata->has_dmic.

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Peter Ujfalusi 13 年之前
父节点
当前提交
8d946dd7dc
共有 1 个文件被更改,包括 22 次插入3 次删除
  1. 22 3
      sound/soc/omap/omap-abe-twl6040.c

+ 22 - 3
sound/soc/omap/omap-abe-twl6040.c

@@ -212,7 +212,7 @@ static int omap_abe_dmic_init(struct snd_soc_pcm_runtime *rtd)
 }
 }
 
 
 /* Digital audio interface glue - connects codec <--> CPU */
 /* Digital audio interface glue - connects codec <--> CPU */
-static struct snd_soc_dai_link sdp4430_dai[] = {
+static struct snd_soc_dai_link twl6040_dmic_dai[] = {
 	{
 	{
 		.name = "TWL6040",
 		.name = "TWL6040",
 		.stream_name = "TWL6040",
 		.stream_name = "TWL6040",
@@ -235,11 +235,22 @@ static struct snd_soc_dai_link sdp4430_dai[] = {
 	},
 	},
 };
 };
 
 
+static struct snd_soc_dai_link twl6040_only_dai[] = {
+	{
+		.name = "TWL6040",
+		.stream_name = "TWL6040",
+		.cpu_dai_name = "omap-mcpdm",
+		.codec_dai_name = "twl6040-legacy",
+		.platform_name = "omap-pcm-audio",
+		.codec_name = "twl6040-codec",
+		.init = omap_abe_twl6040_init,
+		.ops = &omap_abe_ops,
+	},
+};
+
 /* Audio machine driver */
 /* Audio machine driver */
 static struct snd_soc_card omap_abe_card = {
 static struct snd_soc_card omap_abe_card = {
 	.owner = THIS_MODULE,
 	.owner = THIS_MODULE,
-	.dai_link = sdp4430_dai,
-	.num_links = ARRAY_SIZE(sdp4430_dai),
 
 
 	.dapm_widgets = twl6040_dapm_widgets,
 	.dapm_widgets = twl6040_dapm_widgets,
 	.num_dapm_widgets = ARRAY_SIZE(twl6040_dapm_widgets),
 	.num_dapm_widgets = ARRAY_SIZE(twl6040_dapm_widgets),
@@ -267,6 +278,14 @@ static __devinit int omap_abe_probe(struct platform_device *pdev)
 		return -ENODEV;
 		return -ENODEV;
 	}
 	}
 
 
+	if (pdata->has_dmic) {
+		card->dai_link = twl6040_dmic_dai;
+		card->num_links = ARRAY_SIZE(twl6040_dmic_dai);
+	} else {
+		card->dai_link = twl6040_only_dai;
+		card->num_links = ARRAY_SIZE(twl6040_only_dai);
+	}
+
 	ret = snd_soc_register_card(card);
 	ret = snd_soc_register_card(card);
 	if (ret)
 	if (ret)
 		dev_err(&pdev->dev, "snd_soc_register_card() failed: %d\n",
 		dev_err(&pdev->dev, "snd_soc_register_card() failed: %d\n",