diff options
Diffstat (limited to 'sound/soc/omap/dra7-evm.c')
-rw-r--r-- | sound/soc/omap/dra7-evm.c | 39 |
1 files changed, 32 insertions, 7 deletions
diff --git a/sound/soc/omap/dra7-evm.c b/sound/soc/omap/dra7-evm.c index 2f5d1e87b0f9..6c5af2df8a8d 100644 --- a/sound/soc/omap/dra7-evm.c +++ b/sound/soc/omap/dra7-evm.c | |||
@@ -169,6 +169,10 @@ static int dra7_snd_media_hw_params(struct snd_pcm_substream *substream, | |||
169 | return ret; | 169 | return ret; |
170 | } | 170 | } |
171 | 171 | ||
172 | /* Skip settings for the dummy CODEC as it doesn't implement any DAI ops */ | ||
173 | if (!strcmp(codec_dai->name, "snd-soc-dummy-dai")) | ||
174 | return 0; | ||
175 | |||
172 | ret = snd_soc_dai_set_fmt(codec_dai, fmt | SND_SOC_DAIFMT_NB_NF); | 176 | ret = snd_soc_dai_set_fmt(codec_dai, fmt | SND_SOC_DAIFMT_NB_NF); |
173 | if (ret < 0) { | 177 | if (ret < 0) { |
174 | dev_err(card->dev, "can't set CODEC DAI format %d\n", ret); | 178 | dev_err(card->dev, "can't set CODEC DAI format %d\n", ret); |
@@ -481,6 +485,15 @@ static struct snd_soc_dai_link dra7_snd_dai[] = { | |||
481 | .codec_dai_name = "snd-soc-dummy-dai", | 485 | .codec_dai_name = "snd-soc-dummy-dai", |
482 | .ops = &dra7_snd_bt_ops, | 486 | .ops = &dra7_snd_bt_ops, |
483 | }, | 487 | }, |
488 | { | ||
489 | /* Media: McASP5 in loopback mode */ | ||
490 | .name = "Loopback", | ||
491 | .platform_name = "omap-pcm-audio", | ||
492 | .codec_name = "snd-soc-dummy", | ||
493 | .codec_dai_name = "snd-soc-dummy-dai", | ||
494 | .ops = &dra7_snd_media_ops, | ||
495 | .init = dra7_snd_media_init, | ||
496 | }, | ||
484 | }; | 497 | }; |
485 | 498 | ||
486 | static int dra7_snd_bt_get_mode(struct snd_kcontrol *kcontrol, | 499 | static int dra7_snd_bt_get_mode(struct snd_kcontrol *kcontrol, |
@@ -554,14 +567,16 @@ static int dra7_snd_add_dai_link(struct snd_soc_card *card, | |||
554 | 567 | ||
555 | dai_link->cpu_of_node = dai_node; | 568 | dai_link->cpu_of_node = dai_node; |
556 | 569 | ||
557 | snprintf(prop, sizeof(prop), "%s-codec", prefix); | 570 | if (!dai_link->codec_name || !dai_link->codec_dai_name) { |
558 | dai_node = of_parse_phandle(node, prop, 0); | 571 | snprintf(prop, sizeof(prop), "%s-codec", prefix); |
559 | if (!dai_node) { | 572 | dai_node = of_parse_phandle(node, prop, 0); |
560 | dev_err(card->dev, "codec dai node is invalid\n"); | 573 | if (!dai_node) { |
561 | return -EINVAL; | 574 | dev_err(card->dev, "codec dai node is invalid\n"); |
562 | } | 575 | return -EINVAL; |
576 | } | ||
563 | 577 | ||
564 | dai_link->codec_of_node = dai_node; | 578 | dai_link->codec_of_node = dai_node; |
579 | } | ||
565 | 580 | ||
566 | snprintf(prop, sizeof(prop), "%s-slots", prefix); | 581 | snprintf(prop, sizeof(prop), "%s-slots", prefix); |
567 | of_property_read_u32(node, prop, &card_data->media_slots); | 582 | of_property_read_u32(node, prop, &card_data->media_slots); |
@@ -811,6 +826,10 @@ static int dra7_snd_probe(struct platform_device *pdev) | |||
811 | dev_err(card->dev, "failed to add bluetooth dai link %d\n", | 826 | dev_err(card->dev, "failed to add bluetooth dai link %d\n", |
812 | ret); | 827 | ret); |
813 | 828 | ||
829 | ret = dra7_snd_add_dai_link(card, &dra7_snd_dai[3], "ti,loopback"); | ||
830 | if (ret) | ||
831 | dev_err(card->dev, "failed to add loopback dai link %d\n", ret); | ||
832 | |||
814 | ret = snd_soc_register_card(card); | 833 | ret = snd_soc_register_card(card); |
815 | if (ret) { | 834 | if (ret) { |
816 | dev_err(card->dev, "failed to register sound card %d\n", ret); | 835 | dev_err(card->dev, "failed to register sound card %d\n", ret); |
@@ -830,6 +849,12 @@ static int dra7_snd_probe(struct platform_device *pdev) | |||
830 | goto err_reparent; | 849 | goto err_reparent; |
831 | } | 850 | } |
832 | 851 | ||
852 | ret = dra7_mcasp_reparent(card, "mcasp5_ahclkx_mux", "atl_clkin2_ck"); | ||
853 | if (ret) { | ||
854 | dev_err(card->dev, "failed to reparent McASP5 %d\n", ret); | ||
855 | goto err_reparent; | ||
856 | } | ||
857 | |||
833 | ret = dra7_mcasp_reparent(card, "mcasp6_ahclkx_mux", "atl_clkin1_ck"); | 858 | ret = dra7_mcasp_reparent(card, "mcasp6_ahclkx_mux", "atl_clkin1_ck"); |
834 | if (ret) { | 859 | if (ret) { |
835 | dev_err(card->dev, "failed to reparent McASP6 %d\n", ret); | 860 | dev_err(card->dev, "failed to reparent McASP6 %d\n", ret); |