1 // SPDX-License-Identifier: GPL-2.0
3 // mt6797-mt6351.c -- MT6797 MT6351 ALSA SoC machine driver
5 // Copyright (c) 2018 MediaTek Inc.
6 // Author: KaiChieh Chuang <kaichieh.chuang@mediatek.com>
8 #include <linux/module.h>
11 #include "mt6797-afe-common.h"
13 static struct snd_soc_dai_link mt6797_mt6351_dai_links[] = {
17 .stream_name = "Playback_1",
18 .cpu_dai_name = "DL1",
19 .codec_name = "snd-soc-dummy",
20 .codec_dai_name = "snd-soc-dummy-dai",
21 .trigger = {SND_SOC_DPCM_TRIGGER_PRE,
22 SND_SOC_DPCM_TRIGGER_PRE},
28 .stream_name = "Playback_2",
29 .cpu_dai_name = "DL2",
30 .codec_name = "snd-soc-dummy",
31 .codec_dai_name = "snd-soc-dummy-dai",
32 .trigger = {SND_SOC_DPCM_TRIGGER_PRE,
33 SND_SOC_DPCM_TRIGGER_PRE},
39 .stream_name = "Playback_3",
40 .cpu_dai_name = "DL3",
41 .codec_name = "snd-soc-dummy",
42 .codec_dai_name = "snd-soc-dummy-dai",
43 .trigger = {SND_SOC_DPCM_TRIGGER_PRE,
44 SND_SOC_DPCM_TRIGGER_PRE},
50 .stream_name = "Capture_1",
51 .cpu_dai_name = "UL1",
52 .codec_name = "snd-soc-dummy",
53 .codec_dai_name = "snd-soc-dummy-dai",
54 .trigger = {SND_SOC_DPCM_TRIGGER_PRE,
55 SND_SOC_DPCM_TRIGGER_PRE},
61 .stream_name = "Capture_2",
62 .cpu_dai_name = "UL2",
63 .codec_name = "snd-soc-dummy",
64 .codec_dai_name = "snd-soc-dummy-dai",
65 .trigger = {SND_SOC_DPCM_TRIGGER_PRE,
66 SND_SOC_DPCM_TRIGGER_PRE},
72 .stream_name = "Capture_3",
73 .cpu_dai_name = "UL3",
74 .codec_name = "snd-soc-dummy",
75 .codec_dai_name = "snd-soc-dummy-dai",
76 .trigger = {SND_SOC_DPCM_TRIGGER_PRE,
77 SND_SOC_DPCM_TRIGGER_PRE},
82 .name = "Capture_Mono_1",
83 .stream_name = "Capture_Mono_1",
84 .cpu_dai_name = "UL_MONO_1",
85 .codec_name = "snd-soc-dummy",
86 .codec_dai_name = "snd-soc-dummy-dai",
87 .trigger = {SND_SOC_DPCM_TRIGGER_PRE,
88 SND_SOC_DPCM_TRIGGER_PRE},
93 .name = "Hostless_LPBK",
94 .stream_name = "Hostless_LPBK",
95 .cpu_dai_name = "Hostless LPBK DAI",
96 .codec_name = "snd-soc-dummy",
97 .codec_dai_name = "snd-soc-dummy-dai",
98 .trigger = {SND_SOC_DPCM_TRIGGER_PRE,
99 SND_SOC_DPCM_TRIGGER_PRE},
106 .name = "Hostless_Speech",
107 .stream_name = "Hostless_Speech",
108 .cpu_dai_name = "Hostless Speech DAI",
109 .codec_name = "snd-soc-dummy",
110 .codec_dai_name = "snd-soc-dummy-dai",
111 .trigger = {SND_SOC_DPCM_TRIGGER_PRE,
112 SND_SOC_DPCM_TRIGGER_PRE},
120 .name = "Primary Codec",
121 .cpu_dai_name = "ADDA",
122 .codec_dai_name = "mt6351-snd-codec-aif1",
130 .cpu_dai_name = "PCM 1",
131 .codec_name = "snd-soc-dummy",
132 .codec_dai_name = "snd-soc-dummy-dai",
140 .cpu_dai_name = "PCM 2",
141 .codec_name = "snd-soc-dummy",
142 .codec_dai_name = "snd-soc-dummy-dai",
150 static struct snd_soc_card mt6797_mt6351_card = {
151 .name = "mt6797-mt6351",
152 .owner = THIS_MODULE,
153 .dai_link = mt6797_mt6351_dai_links,
154 .num_links = ARRAY_SIZE(mt6797_mt6351_dai_links),
157 static int mt6797_mt6351_dev_probe(struct platform_device *pdev)
159 struct snd_soc_card *card = &mt6797_mt6351_card;
160 struct device_node *platform_node, *codec_node;
163 card->dev = &pdev->dev;
165 platform_node = of_parse_phandle(pdev->dev.of_node,
166 "mediatek,platform", 0);
167 if (!platform_node) {
168 dev_err(&pdev->dev, "Property 'platform' missing or invalid\n");
171 for (i = 0; i < card->num_links; i++) {
172 if (mt6797_mt6351_dai_links[i].platform_name)
174 mt6797_mt6351_dai_links[i].platform_of_node = platform_node;
177 codec_node = of_parse_phandle(pdev->dev.of_node,
178 "mediatek,audio-codec", 0);
181 "Property 'audio-codec' missing or invalid\n");
184 for (i = 0; i < card->num_links; i++) {
185 if (mt6797_mt6351_dai_links[i].codec_name)
187 mt6797_mt6351_dai_links[i].codec_of_node = codec_node;
190 ret = devm_snd_soc_register_card(&pdev->dev, card);
192 dev_err(&pdev->dev, "%s snd_soc_register_card fail %d\n",
199 static const struct of_device_id mt6797_mt6351_dt_match[] = {
200 {.compatible = "mediatek,mt6797-mt6351-sound",},
205 static struct platform_driver mt6797_mt6351_driver = {
207 .name = "mt6797-mt6351",
208 .owner = THIS_MODULE,
210 .of_match_table = mt6797_mt6351_dt_match,
213 .probe = mt6797_mt6351_dev_probe,
216 module_platform_driver(mt6797_mt6351_driver);
218 /* Module information */
219 MODULE_DESCRIPTION("MT6797 MT6351 ALSA SoC machine driver");
220 MODULE_AUTHOR("KaiChieh Chuang <kaichieh.chuang@mediatek.com>");
221 MODULE_LICENSE("GPL v2");
222 MODULE_ALIAS("mt6797 mt6351 soc card");