ASoC: mediatek: Add HDMI dai-links to the mt8173-rt5650 machine driver
[sfrench/cifs-2.6.git] / sound / soc / mediatek / mt8173 / mt8173-rt5650.c
index d47897618cb5f2b2dd5ff843e03aa54b3fa17b5b..ba65f4157a7e0ef6a60e5406e2570cfb1aaa14d9 100644 (file)
@@ -169,7 +169,9 @@ static struct snd_soc_dai_link_component mt8173_rt5650_codecs[] = {
 enum {
        DAI_LINK_PLAYBACK,
        DAI_LINK_CAPTURE,
+       DAI_LINK_HDMI,
        DAI_LINK_CODEC_I2S,
+       DAI_LINK_HDMI_I2S,
 };
 
 /* Digital audio interface glue - connects codec <---> CPU */
@@ -195,6 +197,16 @@ static struct snd_soc_dai_link mt8173_rt5650_dais[] = {
                .dynamic = 1,
                .dpcm_capture = 1,
        },
+       [DAI_LINK_HDMI] = {
+               .name = "HDMI",
+               .stream_name = "HDMI PCM",
+               .cpu_dai_name = "HDMI",
+               .codec_name = "snd-soc-dummy",
+               .codec_dai_name = "snd-soc-dummy-dai",
+               .trigger = {SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
+               .dynamic = 1,
+               .dpcm_playback = 1,
+       },
        /* Back End DAI links */
        [DAI_LINK_CODEC_I2S] = {
                .name = "Codec",
@@ -210,6 +222,13 @@ static struct snd_soc_dai_link mt8173_rt5650_dais[] = {
                .dpcm_playback = 1,
                .dpcm_capture = 1,
        },
+       [DAI_LINK_HDMI_I2S] = {
+               .name = "HDMI BE",
+               .cpu_dai_name = "HDMIO",
+               .no_pcm = 1,
+               .codec_dai_name = "i2s-hifi",
+               .dpcm_playback = 1,
+       },
 };
 
 static struct snd_soc_card mt8173_rt5650_card = {
@@ -284,6 +303,13 @@ static int mt8173_rt5650_dev_probe(struct platform_device *pdev)
                }
        }
 
+       mt8173_rt5650_dais[DAI_LINK_HDMI_I2S].codec_of_node =
+               of_parse_phandle(pdev->dev.of_node, "mediatek,audio-codec", 1);
+       if (!mt8173_rt5650_dais[DAI_LINK_HDMI_I2S].codec_of_node) {
+               dev_err(&pdev->dev,
+                       "Property 'audio-codec' missing or invalid\n");
+               return -EINVAL;
+       }
        card->dev = &pdev->dev;
        platform_set_drvdata(pdev, card);