Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/sound/soc/intel/common/soc-acpi-intel-cml-match.c
26493 views
1
// SPDX-License-Identifier: GPL-2.0-only
2
/*
3
* soc-acpi-intel-cml-match.c - tables and support for CML ACPI enumeration.
4
*
5
* Copyright (c) 2019, Intel Corporation.
6
*
7
*/
8
9
#include <sound/soc-acpi.h>
10
#include <sound/soc-acpi-intel-match.h>
11
12
static const struct snd_soc_acpi_codecs essx_83x6 = {
13
.num_codecs = 3,
14
.codecs = { "ESSX8316", "ESSX8326", "ESSX8336"},
15
};
16
17
static const struct snd_soc_acpi_codecs rt1011_spk_codecs = {
18
.num_codecs = 1,
19
.codecs = {"10EC1011"}
20
};
21
22
static const struct snd_soc_acpi_codecs rt1015_spk_codecs = {
23
.num_codecs = 1,
24
.codecs = {"10EC1015"}
25
};
26
27
static const struct snd_soc_acpi_codecs max98357a_spk_codecs = {
28
.num_codecs = 1,
29
.codecs = {"MX98357A"}
30
};
31
32
static const struct snd_soc_acpi_codecs max98390_spk_codecs = {
33
.num_codecs = 1,
34
.codecs = {"MX98390"}
35
};
36
37
/*
38
* The order of the three entries with .id = "10EC5682" matters
39
* here, because DSDT tables expose an ACPI HID for the MAX98357A
40
* speaker amplifier which is not populated on the board.
41
*/
42
struct snd_soc_acpi_mach snd_soc_acpi_intel_cml_machines[] = {
43
{
44
.id = "10EC5682",
45
.drv_name = "cml_rt5682_def",
46
.machine_quirk = snd_soc_acpi_codec_list,
47
.quirk_data = &rt1011_spk_codecs,
48
.sof_tplg_filename = "sof-cml-rt1011-rt5682.tplg",
49
},
50
{
51
.id = "10EC5682",
52
.drv_name = "cml_rt5682_def",
53
.machine_quirk = snd_soc_acpi_codec_list,
54
.quirk_data = &rt1015_spk_codecs,
55
.sof_tplg_filename = "sof-cml-rt1011-rt5682.tplg",
56
},
57
{
58
.id = "10EC5682",
59
.drv_name = "cml_rt5682_def",
60
.machine_quirk = snd_soc_acpi_codec_list,
61
.quirk_data = &max98357a_spk_codecs,
62
.sof_tplg_filename = "sof-cml-rt5682-max98357a.tplg",
63
},
64
{
65
.id = "10EC5682",
66
.drv_name = "cml_rt5682_def",
67
.sof_tplg_filename = "sof-cml-rt5682.tplg",
68
},
69
{
70
.id = "DLGS7219",
71
.drv_name = "cml_da7219_def",
72
.machine_quirk = snd_soc_acpi_codec_list,
73
.quirk_data = &max98357a_spk_codecs,
74
.sof_tplg_filename = "sof-cml-da7219-max98357a.tplg",
75
},
76
{
77
.id = "DLGS7219",
78
.drv_name = "cml_da7219_def",
79
.machine_quirk = snd_soc_acpi_codec_list,
80
.quirk_data = &max98390_spk_codecs,
81
.sof_tplg_filename = "sof-cml-da7219-max98390.tplg",
82
},
83
{
84
.comp_ids = &essx_83x6,
85
.drv_name = "sof-essx8336",
86
.sof_tplg_filename = "sof-cml-es8336", /* the tplg suffix is added at run time */
87
.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_SSP_NUMBER |
88
SND_SOC_ACPI_TPLG_INTEL_SSP_MSB |
89
SND_SOC_ACPI_TPLG_INTEL_DMIC_NUMBER,
90
},
91
{},
92
};
93
EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_cml_machines);
94
95
static const struct snd_soc_acpi_endpoint single_endpoint = {
96
.num = 0,
97
.aggregated = 0,
98
.group_position = 0,
99
.group_id = 0,
100
};
101
102
static const struct snd_soc_acpi_endpoint spk_l_endpoint = {
103
.num = 0,
104
.aggregated = 1,
105
.group_position = 0,
106
.group_id = 1,
107
};
108
109
static const struct snd_soc_acpi_endpoint spk_r_endpoint = {
110
.num = 0,
111
.aggregated = 1,
112
.group_position = 1,
113
.group_id = 1,
114
};
115
116
static const struct snd_soc_acpi_adr_device rt700_1_adr[] = {
117
{
118
.adr = 0x000110025D070000ull,
119
.num_endpoints = 1,
120
.endpoints = &single_endpoint,
121
.name_prefix = "rt700"
122
}
123
};
124
125
static const struct snd_soc_acpi_link_adr cml_rvp[] = {
126
{
127
.mask = BIT(1),
128
.num_adr = ARRAY_SIZE(rt700_1_adr),
129
.adr_d = rt700_1_adr,
130
},
131
{}
132
};
133
134
static const struct snd_soc_acpi_adr_device rt711_0_adr[] = {
135
{
136
.adr = 0x000020025D071100ull,
137
.num_endpoints = 1,
138
.endpoints = &single_endpoint,
139
.name_prefix = "rt711"
140
}
141
};
142
143
static const struct snd_soc_acpi_adr_device rt1308_1_single_adr[] = {
144
{
145
.adr = 0x000120025D130800ull,
146
.num_endpoints = 1,
147
.endpoints = &single_endpoint,
148
.name_prefix = "rt1308-1"
149
}
150
};
151
152
static const struct snd_soc_acpi_adr_device rt1308_1_group1_adr[] = {
153
{
154
.adr = 0x000120025D130800ull,
155
.num_endpoints = 1,
156
.endpoints = &spk_l_endpoint,
157
.name_prefix = "rt1308-1"
158
}
159
};
160
161
static const struct snd_soc_acpi_adr_device rt1308_2_group1_adr[] = {
162
{
163
.adr = 0x000220025D130800ull,
164
.num_endpoints = 1,
165
.endpoints = &spk_r_endpoint,
166
.name_prefix = "rt1308-2"
167
}
168
};
169
170
static const struct snd_soc_acpi_adr_device rt715_3_adr[] = {
171
{
172
.adr = 0x000320025D071500ull,
173
.num_endpoints = 1,
174
.endpoints = &single_endpoint,
175
.name_prefix = "rt715"
176
}
177
};
178
179
static const struct snd_soc_acpi_adr_device rt711_sdca_0_adr[] = {
180
{
181
.adr = 0x000030025D071101ull,
182
.num_endpoints = 1,
183
.endpoints = &single_endpoint,
184
.name_prefix = "rt711"
185
}
186
};
187
188
static const struct snd_soc_acpi_adr_device rt1316_1_group1_adr[] = {
189
{
190
.adr = 0x000131025D131601ull, /* unique ID is set for some reason */
191
.num_endpoints = 1,
192
.endpoints = &spk_l_endpoint,
193
.name_prefix = "rt1316-1"
194
}
195
};
196
197
static const struct snd_soc_acpi_adr_device rt1316_2_group1_adr[] = {
198
{
199
.adr = 0x000230025D131601ull,
200
.num_endpoints = 1,
201
.endpoints = &spk_r_endpoint,
202
.name_prefix = "rt1316-2"
203
}
204
};
205
206
static const struct snd_soc_acpi_adr_device rt714_3_adr[] = {
207
{
208
.adr = 0x000330025D071401ull,
209
.num_endpoints = 1,
210
.endpoints = &single_endpoint,
211
.name_prefix = "rt714"
212
}
213
};
214
215
static const struct snd_soc_acpi_link_adr cml_3_in_1_default[] = {
216
{
217
.mask = BIT(0),
218
.num_adr = ARRAY_SIZE(rt711_0_adr),
219
.adr_d = rt711_0_adr,
220
},
221
{
222
.mask = BIT(1),
223
.num_adr = ARRAY_SIZE(rt1308_1_group1_adr),
224
.adr_d = rt1308_1_group1_adr,
225
},
226
{
227
.mask = BIT(2),
228
.num_adr = ARRAY_SIZE(rt1308_2_group1_adr),
229
.adr_d = rt1308_2_group1_adr,
230
},
231
{
232
.mask = BIT(3),
233
.num_adr = ARRAY_SIZE(rt715_3_adr),
234
.adr_d = rt715_3_adr,
235
},
236
{}
237
};
238
239
static const struct snd_soc_acpi_link_adr cml_3_in_1_mono_amp[] = {
240
{
241
.mask = BIT(0),
242
.num_adr = ARRAY_SIZE(rt711_0_adr),
243
.adr_d = rt711_0_adr,
244
},
245
{
246
.mask = BIT(1),
247
.num_adr = ARRAY_SIZE(rt1308_1_single_adr),
248
.adr_d = rt1308_1_single_adr,
249
},
250
{
251
.mask = BIT(3),
252
.num_adr = ARRAY_SIZE(rt715_3_adr),
253
.adr_d = rt715_3_adr,
254
},
255
{}
256
};
257
258
static const struct snd_soc_acpi_link_adr cml_3_in_1_sdca[] = {
259
{
260
.mask = BIT(0),
261
.num_adr = ARRAY_SIZE(rt711_sdca_0_adr),
262
.adr_d = rt711_sdca_0_adr,
263
},
264
{
265
.mask = BIT(1),
266
.num_adr = ARRAY_SIZE(rt1316_1_group1_adr),
267
.adr_d = rt1316_1_group1_adr,
268
},
269
{
270
.mask = BIT(2),
271
.num_adr = ARRAY_SIZE(rt1316_2_group1_adr),
272
.adr_d = rt1316_2_group1_adr,
273
},
274
{
275
.mask = BIT(3),
276
.num_adr = ARRAY_SIZE(rt714_3_adr),
277
.adr_d = rt714_3_adr,
278
},
279
{}
280
};
281
282
struct snd_soc_acpi_mach snd_soc_acpi_intel_cml_sdw_machines[] = {
283
{
284
.link_mask = 0xF, /* 4 active links required */
285
.links = cml_3_in_1_default,
286
.drv_name = "sof_sdw",
287
.sof_tplg_filename = "sof-cml-rt711-rt1308-rt715.tplg",
288
},
289
{
290
.link_mask = 0xF, /* 4 active links required */
291
.links = cml_3_in_1_sdca,
292
.drv_name = "sof_sdw",
293
.sof_tplg_filename = "sof-cml-rt711-rt1316-rt714.tplg",
294
},
295
{
296
/*
297
* link_mask should be 0xB, but all links are enabled by BIOS.
298
* This entry will be selected if there is no rt1308 exposed
299
* on link2 since it will fail to match the above entry.
300
*/
301
.link_mask = 0xF,
302
.links = cml_3_in_1_mono_amp,
303
.drv_name = "sof_sdw",
304
.sof_tplg_filename = "sof-cml-rt711-rt1308-mono-rt715.tplg",
305
},
306
{
307
.link_mask = 0x2, /* RT700 connected on Link1 */
308
.links = cml_rvp,
309
.drv_name = "sof_sdw",
310
.sof_tplg_filename = "sof-cml-rt700.tplg",
311
},
312
{}
313
};
314
EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_cml_sdw_machines);
315
316