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