~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/sound/soc/intel/common/soc-acpi-intel-cml-match.c

Version: ~ [ linux-6.11-rc3 ] ~ [ linux-6.10.4 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.45 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.104 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.164 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.223 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.281 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.319 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  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 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php