ASoC: mediatek: Add HDMI dai-links to the mt8173-rt5650 machine driver
authorPC Liao <pc.liao@mediatek.com>
Tue, 5 Jul 2016 09:26:21 +0000 (11:26 +0200)
committerMark Brown <broonie@kernel.org>
Thu, 14 Jul 2016 16:31:18 +0000 (17:31 +0100)
This patch adds HDMI audio output support to the MT8173 RT5650 machine
driver.

Signed-off-by: PC Liao <pc.liao@mediatek.com>
Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: Mark Brown <broonie@kernel.org>
Documentation/devicetree/bindings/sound/mt8173-rt5650.txt
sound/soc/mediatek/Kconfig
sound/soc/mediatek/mt8173/mt8173-rt5650.c

index f250fc7..29dce2a 100644 (file)
@@ -1,8 +1,9 @@
-MT8173 with RT5650 CODECS
+MT8173 with RT5650 CODECS and HDMI via I2S
 
 Required properties:
 - compatible : "mediatek,mt8173-rt5650"
 - mediatek,audio-codec: the phandles of rt5650 codecs
 
 Required properties:
 - compatible : "mediatek,mt8173-rt5650"
 - mediatek,audio-codec: the phandles of rt5650 codecs
+                        and of the hdmi encoder node
 - mediatek,platform: the phandle of MT8173 ASoC platform
 
 Optional subnodes:
 - mediatek,platform: the phandle of MT8173 ASoC platform
 
 Optional subnodes:
@@ -20,7 +21,7 @@ Example:
 
        sound {
                compatible = "mediatek,mt8173-rt5650";
 
        sound {
                compatible = "mediatek,mt8173-rt5650";
-               mediatek,audio-codec = <&rt5650>;
+               mediatek,audio-codec = <&rt5650 &hdmi0>;
                mediatek,platform = <&afe>;
                mediatek,mclk = <0>;
                codec-capture {
                mediatek,platform = <&afe>;
                mediatek,mclk = <0>;
                codec-capture {
index 2fbe543..05cf809 100644 (file)
@@ -46,6 +46,7 @@ config SND_SOC_MT8173_RT5650
        tristate "ASoC Audio driver for MT8173 with RT5650 codec"
        depends on SND_SOC_MT8173 && I2C
        select SND_SOC_RT5645
        tristate "ASoC Audio driver for MT8173 with RT5650 codec"
        depends on SND_SOC_MT8173 && I2C
        select SND_SOC_RT5645
+       select SND_SOC_HDMI_CODEC
        help
          This adds ASoC driver for Mediatek MT8173 boards
          with the RT5650 audio codec.
        help
          This adds ASoC driver for Mediatek MT8173 boards
          with the RT5650 audio codec.
index d478976..ba65f41 100644 (file)
@@ -169,7 +169,9 @@ static struct snd_soc_dai_link_component mt8173_rt5650_codecs[] = {
 enum {
        DAI_LINK_PLAYBACK,
        DAI_LINK_CAPTURE,
 enum {
        DAI_LINK_PLAYBACK,
        DAI_LINK_CAPTURE,
+       DAI_LINK_HDMI,
        DAI_LINK_CODEC_I2S,
        DAI_LINK_CODEC_I2S,
+       DAI_LINK_HDMI_I2S,
 };
 
 /* Digital audio interface glue - connects codec <---> CPU */
 };
 
 /* 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,
        },
                .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",
        /* 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,
        },
                .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 = {
 };
 
 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);
 
        card->dev = &pdev->dev;
        platform_set_drvdata(pdev, card);