forked from ~ljy/RK356X_SDK_RELEASE

hc
2023-12-11 1f93a7dfd1f8d5ff7a5c53246c7534fe2332d6f4
kernel/sound/soc/mediatek/mt6797/mt6797-mt6351.c
....@@ -10,140 +10,177 @@
1010
1111 #include "mt6797-afe-common.h"
1212
13
+SND_SOC_DAILINK_DEFS(playback_1,
14
+ DAILINK_COMP_ARRAY(COMP_CPU("DL1")),
15
+ DAILINK_COMP_ARRAY(COMP_DUMMY()),
16
+ DAILINK_COMP_ARRAY(COMP_EMPTY()));
17
+
18
+SND_SOC_DAILINK_DEFS(playback_2,
19
+ DAILINK_COMP_ARRAY(COMP_CPU("DL2")),
20
+ DAILINK_COMP_ARRAY(COMP_DUMMY()),
21
+ DAILINK_COMP_ARRAY(COMP_EMPTY()));
22
+
23
+SND_SOC_DAILINK_DEFS(playback_3,
24
+ DAILINK_COMP_ARRAY(COMP_CPU("DL3")),
25
+ DAILINK_COMP_ARRAY(COMP_DUMMY()),
26
+ DAILINK_COMP_ARRAY(COMP_EMPTY()));
27
+
28
+SND_SOC_DAILINK_DEFS(capture_1,
29
+ DAILINK_COMP_ARRAY(COMP_CPU("UL1")),
30
+ DAILINK_COMP_ARRAY(COMP_DUMMY()),
31
+ DAILINK_COMP_ARRAY(COMP_EMPTY()));
32
+
33
+SND_SOC_DAILINK_DEFS(capture_2,
34
+ DAILINK_COMP_ARRAY(COMP_CPU("UL2")),
35
+ DAILINK_COMP_ARRAY(COMP_DUMMY()),
36
+ DAILINK_COMP_ARRAY(COMP_EMPTY()));
37
+
38
+SND_SOC_DAILINK_DEFS(capture_3,
39
+ DAILINK_COMP_ARRAY(COMP_CPU("UL3")),
40
+ DAILINK_COMP_ARRAY(COMP_DUMMY()),
41
+ DAILINK_COMP_ARRAY(COMP_EMPTY()));
42
+
43
+SND_SOC_DAILINK_DEFS(capture_mono_1,
44
+ DAILINK_COMP_ARRAY(COMP_CPU("UL_MONO_1")),
45
+ DAILINK_COMP_ARRAY(COMP_DUMMY()),
46
+ DAILINK_COMP_ARRAY(COMP_EMPTY()));
47
+
48
+SND_SOC_DAILINK_DEFS(hostless_lpbk,
49
+ DAILINK_COMP_ARRAY(COMP_CPU("Hostless LPBK DAI")),
50
+ DAILINK_COMP_ARRAY(COMP_DUMMY()),
51
+ DAILINK_COMP_ARRAY(COMP_EMPTY()));
52
+
53
+SND_SOC_DAILINK_DEFS(hostless_speech,
54
+ DAILINK_COMP_ARRAY(COMP_CPU("Hostless Speech DAI")),
55
+ DAILINK_COMP_ARRAY(COMP_DUMMY()),
56
+ DAILINK_COMP_ARRAY(COMP_EMPTY()));
57
+
58
+SND_SOC_DAILINK_DEFS(primary_codec,
59
+ DAILINK_COMP_ARRAY(COMP_CPU("ADDA")),
60
+ DAILINK_COMP_ARRAY(COMP_CODEC(NULL, "mt6351-snd-codec-aif1")),
61
+ DAILINK_COMP_ARRAY(COMP_EMPTY()));
62
+
63
+SND_SOC_DAILINK_DEFS(pcm1,
64
+ DAILINK_COMP_ARRAY(COMP_CPU("PCM 1")),
65
+ DAILINK_COMP_ARRAY(COMP_DUMMY()),
66
+ DAILINK_COMP_ARRAY(COMP_EMPTY()));
67
+
68
+SND_SOC_DAILINK_DEFS(pcm2,
69
+ DAILINK_COMP_ARRAY(COMP_CPU("PCM 2")),
70
+ DAILINK_COMP_ARRAY(COMP_DUMMY()),
71
+ DAILINK_COMP_ARRAY(COMP_EMPTY()));
72
+
1373 static struct snd_soc_dai_link mt6797_mt6351_dai_links[] = {
1474 /* FE */
1575 {
1676 .name = "Playback_1",
1777 .stream_name = "Playback_1",
18
- .cpu_dai_name = "DL1",
19
- .codec_name = "snd-soc-dummy",
20
- .codec_dai_name = "snd-soc-dummy-dai",
2178 .trigger = {SND_SOC_DPCM_TRIGGER_PRE,
2279 SND_SOC_DPCM_TRIGGER_PRE},
2380 .dynamic = 1,
2481 .dpcm_playback = 1,
82
+ SND_SOC_DAILINK_REG(playback_1),
2583 },
2684 {
2785 .name = "Playback_2",
2886 .stream_name = "Playback_2",
29
- .cpu_dai_name = "DL2",
30
- .codec_name = "snd-soc-dummy",
31
- .codec_dai_name = "snd-soc-dummy-dai",
3287 .trigger = {SND_SOC_DPCM_TRIGGER_PRE,
3388 SND_SOC_DPCM_TRIGGER_PRE},
3489 .dynamic = 1,
3590 .dpcm_playback = 1,
91
+ SND_SOC_DAILINK_REG(playback_2),
3692 },
3793 {
3894 .name = "Playback_3",
3995 .stream_name = "Playback_3",
40
- .cpu_dai_name = "DL3",
41
- .codec_name = "snd-soc-dummy",
42
- .codec_dai_name = "snd-soc-dummy-dai",
4396 .trigger = {SND_SOC_DPCM_TRIGGER_PRE,
4497 SND_SOC_DPCM_TRIGGER_PRE},
4598 .dynamic = 1,
4699 .dpcm_playback = 1,
100
+ SND_SOC_DAILINK_REG(playback_3),
47101 },
48102 {
49103 .name = "Capture_1",
50104 .stream_name = "Capture_1",
51
- .cpu_dai_name = "UL1",
52
- .codec_name = "snd-soc-dummy",
53
- .codec_dai_name = "snd-soc-dummy-dai",
54105 .trigger = {SND_SOC_DPCM_TRIGGER_PRE,
55106 SND_SOC_DPCM_TRIGGER_PRE},
56107 .dynamic = 1,
57108 .dpcm_capture = 1,
109
+ SND_SOC_DAILINK_REG(capture_1),
58110 },
59111 {
60112 .name = "Capture_2",
61113 .stream_name = "Capture_2",
62
- .cpu_dai_name = "UL2",
63
- .codec_name = "snd-soc-dummy",
64
- .codec_dai_name = "snd-soc-dummy-dai",
65114 .trigger = {SND_SOC_DPCM_TRIGGER_PRE,
66115 SND_SOC_DPCM_TRIGGER_PRE},
67116 .dynamic = 1,
68117 .dpcm_capture = 1,
118
+ SND_SOC_DAILINK_REG(capture_2),
69119 },
70120 {
71121 .name = "Capture_3",
72122 .stream_name = "Capture_3",
73
- .cpu_dai_name = "UL3",
74
- .codec_name = "snd-soc-dummy",
75
- .codec_dai_name = "snd-soc-dummy-dai",
76123 .trigger = {SND_SOC_DPCM_TRIGGER_PRE,
77124 SND_SOC_DPCM_TRIGGER_PRE},
78125 .dynamic = 1,
79126 .dpcm_capture = 1,
127
+ SND_SOC_DAILINK_REG(capture_3),
80128 },
81129 {
82130 .name = "Capture_Mono_1",
83131 .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",
87132 .trigger = {SND_SOC_DPCM_TRIGGER_PRE,
88133 SND_SOC_DPCM_TRIGGER_PRE},
89134 .dynamic = 1,
90135 .dpcm_capture = 1,
136
+ SND_SOC_DAILINK_REG(capture_mono_1),
91137 },
92138 {
93139 .name = "Hostless_LPBK",
94140 .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",
98141 .trigger = {SND_SOC_DPCM_TRIGGER_PRE,
99142 SND_SOC_DPCM_TRIGGER_PRE},
100143 .dynamic = 1,
101144 .dpcm_playback = 1,
102145 .dpcm_capture = 1,
103146 .ignore_suspend = 1,
147
+ SND_SOC_DAILINK_REG(hostless_lpbk),
104148 },
105149 {
106150 .name = "Hostless_Speech",
107151 .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",
111152 .trigger = {SND_SOC_DPCM_TRIGGER_PRE,
112153 SND_SOC_DPCM_TRIGGER_PRE},
113154 .dynamic = 1,
114155 .dpcm_playback = 1,
115156 .dpcm_capture = 1,
116157 .ignore_suspend = 1,
158
+ SND_SOC_DAILINK_REG(hostless_speech),
117159 },
118160 /* BE */
119161 {
120162 .name = "Primary Codec",
121
- .cpu_dai_name = "ADDA",
122
- .codec_dai_name = "mt6351-snd-codec-aif1",
123163 .no_pcm = 1,
124164 .dpcm_playback = 1,
125165 .dpcm_capture = 1,
126166 .ignore_suspend = 1,
167
+ SND_SOC_DAILINK_REG(primary_codec),
127168 },
128169 {
129170 .name = "PCM 1",
130
- .cpu_dai_name = "PCM 1",
131
- .codec_name = "snd-soc-dummy",
132
- .codec_dai_name = "snd-soc-dummy-dai",
133171 .no_pcm = 1,
134172 .dpcm_playback = 1,
135173 .dpcm_capture = 1,
136174 .ignore_suspend = 1,
175
+ SND_SOC_DAILINK_REG(pcm1),
137176 },
138177 {
139178 .name = "PCM 2",
140
- .cpu_dai_name = "PCM 2",
141
- .codec_name = "snd-soc-dummy",
142
- .codec_dai_name = "snd-soc-dummy-dai",
143179 .no_pcm = 1,
144180 .dpcm_playback = 1,
145181 .dpcm_capture = 1,
146182 .ignore_suspend = 1,
183
+ SND_SOC_DAILINK_REG(pcm2),
147184 },
148185 };
149186
....@@ -158,6 +195,7 @@
158195 {
159196 struct snd_soc_card *card = &mt6797_mt6351_card;
160197 struct device_node *platform_node, *codec_node;
198
+ struct snd_soc_dai_link *dai_link;
161199 int ret, i;
162200
163201 card->dev = &pdev->dev;
....@@ -168,10 +206,10 @@
168206 dev_err(&pdev->dev, "Property 'platform' missing or invalid\n");
169207 return -EINVAL;
170208 }
171
- for (i = 0; i < card->num_links; i++) {
172
- if (mt6797_mt6351_dai_links[i].platform_name)
209
+ for_each_card_prelinks(card, i, dai_link) {
210
+ if (dai_link->platforms->name)
173211 continue;
174
- mt6797_mt6351_dai_links[i].platform_of_node = platform_node;
212
+ dai_link->platforms->of_node = platform_node;
175213 }
176214
177215 codec_node = of_parse_phandle(pdev->dev.of_node,
....@@ -179,12 +217,13 @@
179217 if (!codec_node) {
180218 dev_err(&pdev->dev,
181219 "Property 'audio-codec' missing or invalid\n");
182
- return -EINVAL;
220
+ ret = -EINVAL;
221
+ goto put_platform_node;
183222 }
184
- for (i = 0; i < card->num_links; i++) {
185
- if (mt6797_mt6351_dai_links[i].codec_name)
223
+ for_each_card_prelinks(card, i, dai_link) {
224
+ if (dai_link->codecs->name)
186225 continue;
187
- mt6797_mt6351_dai_links[i].codec_of_node = codec_node;
226
+ dai_link->codecs->of_node = codec_node;
188227 }
189228
190229 ret = devm_snd_soc_register_card(&pdev->dev, card);
....@@ -192,6 +231,9 @@
192231 dev_err(&pdev->dev, "%s snd_soc_register_card fail %d\n",
193232 __func__, ret);
194233
234
+ of_node_put(codec_node);
235
+put_platform_node:
236
+ of_node_put(platform_node);
195237 return ret;
196238 }
197239
....@@ -205,7 +247,6 @@
205247 static struct platform_driver mt6797_mt6351_driver = {
206248 .driver = {
207249 .name = "mt6797-mt6351",
208
- .owner = THIS_MODULE,
209250 #ifdef CONFIG_OF
210251 .of_match_table = mt6797_mt6351_dt_match,
211252 #endif