14c8a4cabSKai Vehmanen // SPDX-License-Identifier: GPL-2.0-only
24c8a4cabSKai Vehmanen /*
34c8a4cabSKai Vehmanen  * soc-apci-intel-adl-match.c - tables and support for ADL ACPI enumeration.
44c8a4cabSKai Vehmanen  *
54c8a4cabSKai Vehmanen  * Copyright (c) 2020, Intel Corporation.
64c8a4cabSKai Vehmanen  */
74c8a4cabSKai Vehmanen 
84c8a4cabSKai Vehmanen #include <sound/soc-acpi.h>
94c8a4cabSKai Vehmanen #include <sound/soc-acpi-intel-match.h>
104c8a4cabSKai Vehmanen 
114c8a4cabSKai Vehmanen static const struct snd_soc_acpi_endpoint single_endpoint = {
124c8a4cabSKai Vehmanen 	.num = 0,
134c8a4cabSKai Vehmanen 	.aggregated = 0,
144c8a4cabSKai Vehmanen 	.group_position = 0,
154c8a4cabSKai Vehmanen 	.group_id = 0,
164c8a4cabSKai Vehmanen };
174c8a4cabSKai Vehmanen 
18*093b9dcbSPierre-Louis Bossart static const struct snd_soc_acpi_endpoint spk_l_endpoint = {
19*093b9dcbSPierre-Louis Bossart 	.num = 0,
20*093b9dcbSPierre-Louis Bossart 	.aggregated = 1,
21*093b9dcbSPierre-Louis Bossart 	.group_position = 0,
22*093b9dcbSPierre-Louis Bossart 	.group_id = 1,
23*093b9dcbSPierre-Louis Bossart };
24*093b9dcbSPierre-Louis Bossart 
25*093b9dcbSPierre-Louis Bossart static const struct snd_soc_acpi_endpoint spk_r_endpoint = {
26*093b9dcbSPierre-Louis Bossart 	.num = 0,
27*093b9dcbSPierre-Louis Bossart 	.aggregated = 1,
28*093b9dcbSPierre-Louis Bossart 	.group_position = 1,
29*093b9dcbSPierre-Louis Bossart 	.group_id = 1,
30*093b9dcbSPierre-Louis Bossart };
31*093b9dcbSPierre-Louis Bossart 
324c8a4cabSKai Vehmanen static const struct snd_soc_acpi_adr_device rt711_0_adr[] = {
334c8a4cabSKai Vehmanen 	{
344c8a4cabSKai Vehmanen 		.adr = 0x000020025D071100,
354c8a4cabSKai Vehmanen 		.num_endpoints = 1,
364c8a4cabSKai Vehmanen 		.endpoints = &single_endpoint,
374c8a4cabSKai Vehmanen 		.name_prefix = "rt711"
384c8a4cabSKai Vehmanen 	}
394c8a4cabSKai Vehmanen };
404c8a4cabSKai Vehmanen 
41*093b9dcbSPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt1308_1_group1_adr[] = {
42*093b9dcbSPierre-Louis Bossart 	{
43*093b9dcbSPierre-Louis Bossart 		.adr = 0x000120025D130800,
44*093b9dcbSPierre-Louis Bossart 		.num_endpoints = 1,
45*093b9dcbSPierre-Louis Bossart 		.endpoints = &spk_l_endpoint,
46*093b9dcbSPierre-Louis Bossart 		.name_prefix = "rt1308-1"
47*093b9dcbSPierre-Louis Bossart 	}
48*093b9dcbSPierre-Louis Bossart };
49*093b9dcbSPierre-Louis Bossart 
50*093b9dcbSPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt1308_2_group1_adr[] = {
51*093b9dcbSPierre-Louis Bossart 	{
52*093b9dcbSPierre-Louis Bossart 		.adr = 0x000220025D130800,
53*093b9dcbSPierre-Louis Bossart 		.num_endpoints = 1,
54*093b9dcbSPierre-Louis Bossart 		.endpoints = &spk_r_endpoint,
55*093b9dcbSPierre-Louis Bossart 		.name_prefix = "rt1308-2"
56*093b9dcbSPierre-Louis Bossart 	}
57*093b9dcbSPierre-Louis Bossart };
58*093b9dcbSPierre-Louis Bossart 
59*093b9dcbSPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt715_3_adr[] = {
60*093b9dcbSPierre-Louis Bossart 	{
61*093b9dcbSPierre-Louis Bossart 		.adr = 0x000320025D071500,
62*093b9dcbSPierre-Louis Bossart 		.num_endpoints = 1,
63*093b9dcbSPierre-Louis Bossart 		.endpoints = &single_endpoint,
64*093b9dcbSPierre-Louis Bossart 		.name_prefix = "rt715"
65*093b9dcbSPierre-Louis Bossart 	}
66*093b9dcbSPierre-Louis Bossart };
67*093b9dcbSPierre-Louis Bossart 
68*093b9dcbSPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt711_sdca_0_adr[] = {
69*093b9dcbSPierre-Louis Bossart 	{
70*093b9dcbSPierre-Louis Bossart 		.adr = 0x000030025D071101,
71*093b9dcbSPierre-Louis Bossart 		.num_endpoints = 1,
72*093b9dcbSPierre-Louis Bossart 		.endpoints = &single_endpoint,
73*093b9dcbSPierre-Louis Bossart 		.name_prefix = "rt711"
74*093b9dcbSPierre-Louis Bossart 	}
75*093b9dcbSPierre-Louis Bossart };
76*093b9dcbSPierre-Louis Bossart 
77*093b9dcbSPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt1316_1_group1_adr[] = {
78*093b9dcbSPierre-Louis Bossart 	{
79*093b9dcbSPierre-Louis Bossart 		.adr = 0x000131025D131601, /* unique ID is set for some reason */
80*093b9dcbSPierre-Louis Bossart 		.num_endpoints = 1,
81*093b9dcbSPierre-Louis Bossart 		.endpoints = &spk_l_endpoint,
82*093b9dcbSPierre-Louis Bossart 		.name_prefix = "rt1316-1"
83*093b9dcbSPierre-Louis Bossart 	}
84*093b9dcbSPierre-Louis Bossart };
85*093b9dcbSPierre-Louis Bossart 
86*093b9dcbSPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt1316_2_group1_adr[] = {
87*093b9dcbSPierre-Louis Bossart 	{
88*093b9dcbSPierre-Louis Bossart 		.adr = 0x000230025D131601,
89*093b9dcbSPierre-Louis Bossart 		.num_endpoints = 1,
90*093b9dcbSPierre-Louis Bossart 		.endpoints = &spk_r_endpoint,
91*093b9dcbSPierre-Louis Bossart 		.name_prefix = "rt1316-2"
92*093b9dcbSPierre-Louis Bossart 	}
93*093b9dcbSPierre-Louis Bossart };
94*093b9dcbSPierre-Louis Bossart 
95*093b9dcbSPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt1316_3_group1_adr[] = {
96*093b9dcbSPierre-Louis Bossart 	{
97*093b9dcbSPierre-Louis Bossart 		.adr = 0x000330025D131601,
98*093b9dcbSPierre-Louis Bossart 		.num_endpoints = 1,
99*093b9dcbSPierre-Louis Bossart 		.endpoints = &spk_r_endpoint,
100*093b9dcbSPierre-Louis Bossart 		.name_prefix = "rt1316-2"
101*093b9dcbSPierre-Louis Bossart 	}
102*093b9dcbSPierre-Louis Bossart };
103*093b9dcbSPierre-Louis Bossart 
104*093b9dcbSPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt714_2_adr[] = {
105*093b9dcbSPierre-Louis Bossart 	{
106*093b9dcbSPierre-Louis Bossart 		.adr = 0x000230025D071401,
107*093b9dcbSPierre-Louis Bossart 		.num_endpoints = 1,
108*093b9dcbSPierre-Louis Bossart 		.endpoints = &single_endpoint,
109*093b9dcbSPierre-Louis Bossart 		.name_prefix = "rt714"
110*093b9dcbSPierre-Louis Bossart 	}
111*093b9dcbSPierre-Louis Bossart };
112*093b9dcbSPierre-Louis Bossart 
113*093b9dcbSPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt714_3_adr[] = {
114*093b9dcbSPierre-Louis Bossart 	{
115*093b9dcbSPierre-Louis Bossart 		.adr = 0x000330025D071401,
116*093b9dcbSPierre-Louis Bossart 		.num_endpoints = 1,
117*093b9dcbSPierre-Louis Bossart 		.endpoints = &single_endpoint,
118*093b9dcbSPierre-Louis Bossart 		.name_prefix = "rt714"
119*093b9dcbSPierre-Louis Bossart 	}
120*093b9dcbSPierre-Louis Bossart };
121*093b9dcbSPierre-Louis Bossart 
122*093b9dcbSPierre-Louis Bossart static const struct snd_soc_acpi_link_adr adl_default[] = {
123*093b9dcbSPierre-Louis Bossart 	{
124*093b9dcbSPierre-Louis Bossart 		.mask = BIT(0),
125*093b9dcbSPierre-Louis Bossart 		.num_adr = ARRAY_SIZE(rt711_0_adr),
126*093b9dcbSPierre-Louis Bossart 		.adr_d = rt711_0_adr,
127*093b9dcbSPierre-Louis Bossart 	},
128*093b9dcbSPierre-Louis Bossart 	{
129*093b9dcbSPierre-Louis Bossart 		.mask = BIT(1),
130*093b9dcbSPierre-Louis Bossart 		.num_adr = ARRAY_SIZE(rt1308_1_group1_adr),
131*093b9dcbSPierre-Louis Bossart 		.adr_d = rt1308_1_group1_adr,
132*093b9dcbSPierre-Louis Bossart 	},
133*093b9dcbSPierre-Louis Bossart 	{
134*093b9dcbSPierre-Louis Bossart 		.mask = BIT(2),
135*093b9dcbSPierre-Louis Bossart 		.num_adr = ARRAY_SIZE(rt1308_2_group1_adr),
136*093b9dcbSPierre-Louis Bossart 		.adr_d = rt1308_2_group1_adr,
137*093b9dcbSPierre-Louis Bossart 	},
138*093b9dcbSPierre-Louis Bossart 	{
139*093b9dcbSPierre-Louis Bossart 		.mask = BIT(3),
140*093b9dcbSPierre-Louis Bossart 		.num_adr = ARRAY_SIZE(rt715_3_adr),
141*093b9dcbSPierre-Louis Bossart 		.adr_d = rt715_3_adr,
142*093b9dcbSPierre-Louis Bossart 	},
143*093b9dcbSPierre-Louis Bossart 	{}
144*093b9dcbSPierre-Louis Bossart };
145*093b9dcbSPierre-Louis Bossart 
146*093b9dcbSPierre-Louis Bossart static const struct snd_soc_acpi_link_adr adl_sdca_default[] = {
147*093b9dcbSPierre-Louis Bossart 	{
148*093b9dcbSPierre-Louis Bossart 		.mask = BIT(0),
149*093b9dcbSPierre-Louis Bossart 		.num_adr = ARRAY_SIZE(rt711_sdca_0_adr),
150*093b9dcbSPierre-Louis Bossart 		.adr_d = rt711_sdca_0_adr,
151*093b9dcbSPierre-Louis Bossart 	},
152*093b9dcbSPierre-Louis Bossart 	{
153*093b9dcbSPierre-Louis Bossart 		.mask = BIT(1),
154*093b9dcbSPierre-Louis Bossart 		.num_adr = ARRAY_SIZE(rt1316_1_group1_adr),
155*093b9dcbSPierre-Louis Bossart 		.adr_d = rt1316_1_group1_adr,
156*093b9dcbSPierre-Louis Bossart 	},
157*093b9dcbSPierre-Louis Bossart 	{
158*093b9dcbSPierre-Louis Bossart 		.mask = BIT(2),
159*093b9dcbSPierre-Louis Bossart 		.num_adr = ARRAY_SIZE(rt1316_2_group1_adr),
160*093b9dcbSPierre-Louis Bossart 		.adr_d = rt1316_2_group1_adr,
161*093b9dcbSPierre-Louis Bossart 	},
162*093b9dcbSPierre-Louis Bossart 	{
163*093b9dcbSPierre-Louis Bossart 		.mask = BIT(3),
164*093b9dcbSPierre-Louis Bossart 		.num_adr = ARRAY_SIZE(rt714_3_adr),
165*093b9dcbSPierre-Louis Bossart 		.adr_d = rt714_3_adr,
166*093b9dcbSPierre-Louis Bossart 	},
167*093b9dcbSPierre-Louis Bossart 	{}
168*093b9dcbSPierre-Louis Bossart };
169*093b9dcbSPierre-Louis Bossart 
170*093b9dcbSPierre-Louis Bossart static const struct snd_soc_acpi_link_adr adl_sdca_3_in_1[] = {
171*093b9dcbSPierre-Louis Bossart 	{
172*093b9dcbSPierre-Louis Bossart 		.mask = BIT(0),
173*093b9dcbSPierre-Louis Bossart 		.num_adr = ARRAY_SIZE(rt711_sdca_0_adr),
174*093b9dcbSPierre-Louis Bossart 		.adr_d = rt711_sdca_0_adr,
175*093b9dcbSPierre-Louis Bossart 	},
176*093b9dcbSPierre-Louis Bossart 	{
177*093b9dcbSPierre-Louis Bossart 		.mask = BIT(1),
178*093b9dcbSPierre-Louis Bossart 		.num_adr = ARRAY_SIZE(rt1316_1_group1_adr),
179*093b9dcbSPierre-Louis Bossart 		.adr_d = rt1316_1_group1_adr,
180*093b9dcbSPierre-Louis Bossart 	},
181*093b9dcbSPierre-Louis Bossart 	{
182*093b9dcbSPierre-Louis Bossart 		.mask = BIT(2),
183*093b9dcbSPierre-Louis Bossart 		.num_adr = ARRAY_SIZE(rt714_2_adr),
184*093b9dcbSPierre-Louis Bossart 		.adr_d = rt714_2_adr,
185*093b9dcbSPierre-Louis Bossart 	},
186*093b9dcbSPierre-Louis Bossart 	{
187*093b9dcbSPierre-Louis Bossart 		.mask = BIT(3),
188*093b9dcbSPierre-Louis Bossart 		.num_adr = ARRAY_SIZE(rt1316_3_group1_adr),
189*093b9dcbSPierre-Louis Bossart 		.adr_d = rt1316_3_group1_adr,
190*093b9dcbSPierre-Louis Bossart 	},
191*093b9dcbSPierre-Louis Bossart 	{}
192*093b9dcbSPierre-Louis Bossart };
193*093b9dcbSPierre-Louis Bossart 
1944c8a4cabSKai Vehmanen static const struct snd_soc_acpi_link_adr adl_rvp[] = {
1954c8a4cabSKai Vehmanen 	{
1964c8a4cabSKai Vehmanen 		.mask = BIT(0),
1974c8a4cabSKai Vehmanen 		.num_adr = ARRAY_SIZE(rt711_0_adr),
1984c8a4cabSKai Vehmanen 		.adr_d = rt711_0_adr,
1994c8a4cabSKai Vehmanen 	},
2004c8a4cabSKai Vehmanen 	{}
2014c8a4cabSKai Vehmanen };
2024c8a4cabSKai Vehmanen 
2034c8a4cabSKai Vehmanen struct snd_soc_acpi_mach snd_soc_acpi_intel_adl_machines[] = {
2044c8a4cabSKai Vehmanen 	{},
2054c8a4cabSKai Vehmanen };
2064c8a4cabSKai Vehmanen EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_adl_machines);
2074c8a4cabSKai Vehmanen 
2084c8a4cabSKai Vehmanen /* this table is used when there is no I2S codec present */
2094c8a4cabSKai Vehmanen struct snd_soc_acpi_mach snd_soc_acpi_intel_adl_sdw_machines[] = {
2104c8a4cabSKai Vehmanen 	{
211*093b9dcbSPierre-Louis Bossart 		.link_mask = 0xF, /* 4 active links required */
212*093b9dcbSPierre-Louis Bossart 		.links = adl_default,
213*093b9dcbSPierre-Louis Bossart 		.drv_name = "sof_sdw",
214*093b9dcbSPierre-Louis Bossart 		.sof_tplg_filename = "sof-adl-rt711-l0-rt1308-l12-rt715-l3.tplg",
215*093b9dcbSPierre-Louis Bossart 	},
216*093b9dcbSPierre-Louis Bossart 	{
217*093b9dcbSPierre-Louis Bossart 		.link_mask = 0xF, /* 4 active links required */
218*093b9dcbSPierre-Louis Bossart 		.links = adl_sdca_default,
219*093b9dcbSPierre-Louis Bossart 		.drv_name = "sof_sdw",
220*093b9dcbSPierre-Louis Bossart 		.sof_tplg_filename = "sof-adl-rt711-l0-rt1316-l12-rt714-l3.tplg",
221*093b9dcbSPierre-Louis Bossart 	},
222*093b9dcbSPierre-Louis Bossart 	{
223*093b9dcbSPierre-Louis Bossart 		.link_mask = 0xF, /* 4 active links required */
224*093b9dcbSPierre-Louis Bossart 		.links = adl_sdca_3_in_1,
225*093b9dcbSPierre-Louis Bossart 		.drv_name = "sof_sdw",
226*093b9dcbSPierre-Louis Bossart 		.sof_tplg_filename = "sof-adl-rt711-l0-rt1316-l13-rt714-l2.tplg",
227*093b9dcbSPierre-Louis Bossart 	},
228*093b9dcbSPierre-Louis Bossart 	{
2294c8a4cabSKai Vehmanen 		.link_mask = 0x1, /* link0 required */
2304c8a4cabSKai Vehmanen 		.links = adl_rvp,
2314c8a4cabSKai Vehmanen 		.drv_name = "sof_sdw",
2324c8a4cabSKai Vehmanen 		.sof_tplg_filename = "sof-adl-rt711.tplg",
2334c8a4cabSKai Vehmanen 	},
2344c8a4cabSKai Vehmanen 	{},
2354c8a4cabSKai Vehmanen };
2364c8a4cabSKai Vehmanen EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_adl_sdw_machines);
237