15f3db54cSKai Vehmanen // SPDX-License-Identifier: GPL-2.0-only
25f3db54cSKai Vehmanen /*
35f3db54cSKai Vehmanen  * soc-apci-intel-rpl-match.c - tables and support for RPL ACPI enumeration.
45f3db54cSKai Vehmanen  *
55f3db54cSKai Vehmanen  * Copyright (c) 2022 Intel Corporation.
65f3db54cSKai Vehmanen  */
75f3db54cSKai Vehmanen 
85f3db54cSKai Vehmanen #include <sound/soc-acpi.h>
95f3db54cSKai Vehmanen #include <sound/soc-acpi-intel-match.h>
105f3db54cSKai Vehmanen 
115f3db54cSKai Vehmanen static const struct snd_soc_acpi_endpoint single_endpoint = {
125f3db54cSKai Vehmanen 	.num = 0,
135f3db54cSKai Vehmanen 	.aggregated = 0,
145f3db54cSKai Vehmanen 	.group_position = 0,
155f3db54cSKai Vehmanen 	.group_id = 0,
165f3db54cSKai Vehmanen };
175f3db54cSKai Vehmanen 
18e7ff7307SBard Liao static const struct snd_soc_acpi_endpoint spk_l_endpoint = {
19e7ff7307SBard Liao 	.num = 0,
20e7ff7307SBard Liao 	.aggregated = 1,
21e7ff7307SBard Liao 	.group_position = 0,
22e7ff7307SBard Liao 	.group_id = 1,
23e7ff7307SBard Liao };
24e7ff7307SBard Liao 
25e7ff7307SBard Liao static const struct snd_soc_acpi_endpoint spk_r_endpoint = {
26e7ff7307SBard Liao 	.num = 0,
27e7ff7307SBard Liao 	.aggregated = 1,
28e7ff7307SBard Liao 	.group_position = 1,
29e7ff7307SBard Liao 	.group_id = 1,
30e7ff7307SBard Liao };
31e7ff7307SBard Liao 
325f3db54cSKai Vehmanen static const struct snd_soc_acpi_adr_device rt711_0_adr[] = {
335f3db54cSKai Vehmanen 	{
345f3db54cSKai Vehmanen 		.adr = 0x000020025D071100ull,
355f3db54cSKai Vehmanen 		.num_endpoints = 1,
365f3db54cSKai Vehmanen 		.endpoints = &single_endpoint,
375f3db54cSKai Vehmanen 		.name_prefix = "rt711"
385f3db54cSKai Vehmanen 	}
395f3db54cSKai Vehmanen };
405f3db54cSKai Vehmanen 
415f3db54cSKai Vehmanen static const struct snd_soc_acpi_link_adr rpl_rvp[] = {
425f3db54cSKai Vehmanen 	{
435f3db54cSKai Vehmanen 		.mask = BIT(0),
445f3db54cSKai Vehmanen 		.num_adr = ARRAY_SIZE(rt711_0_adr),
455f3db54cSKai Vehmanen 		.adr_d = rt711_0_adr,
465f3db54cSKai Vehmanen 	},
475f3db54cSKai Vehmanen 	{}
485f3db54cSKai Vehmanen };
495f3db54cSKai Vehmanen 
50e7ff7307SBard Liao static const struct snd_soc_acpi_adr_device rt711_sdca_0_adr[] = {
51e7ff7307SBard Liao 	{
52e7ff7307SBard Liao 		.adr = 0x000030025D071101ull,
53e7ff7307SBard Liao 		.num_endpoints = 1,
54e7ff7307SBard Liao 		.endpoints = &single_endpoint,
55e7ff7307SBard Liao 		.name_prefix = "rt711"
56e7ff7307SBard Liao 	}
57e7ff7307SBard Liao };
58e7ff7307SBard Liao 
5997b5fbf4SGongjun Song static const struct snd_soc_acpi_adr_device rt711_sdca_2_adr[] = {
6097b5fbf4SGongjun Song 	{
6197b5fbf4SGongjun Song 		.adr = 0x000230025D071101ull,
6297b5fbf4SGongjun Song 		.num_endpoints = 1,
6397b5fbf4SGongjun Song 		.endpoints = &single_endpoint,
6497b5fbf4SGongjun Song 		.name_prefix = "rt711"
6597b5fbf4SGongjun Song 	}
6697b5fbf4SGongjun Song };
6797b5fbf4SGongjun Song 
68e7ff7307SBard Liao static const struct snd_soc_acpi_adr_device rt1316_1_group1_adr[] = {
69e7ff7307SBard Liao 	{
70e7ff7307SBard Liao 		.adr = 0x000131025D131601ull, /* unique ID is set for some reason */
71e7ff7307SBard Liao 		.num_endpoints = 1,
72e7ff7307SBard Liao 		.endpoints = &spk_l_endpoint,
73e7ff7307SBard Liao 		.name_prefix = "rt1316-1"
74e7ff7307SBard Liao 	}
75e7ff7307SBard Liao };
76e7ff7307SBard Liao 
7755fc0344SGongjun Song static const struct snd_soc_acpi_adr_device rt1316_2_group1_adr[] = {
7855fc0344SGongjun Song 	{
7955fc0344SGongjun Song 		.adr = 0x000230025D131601ull,
8055fc0344SGongjun Song 		.num_endpoints = 1,
8155fc0344SGongjun Song 		.endpoints = &spk_r_endpoint,
8255fc0344SGongjun Song 		.name_prefix = "rt1316-2"
8355fc0344SGongjun Song 	}
8455fc0344SGongjun Song };
8555fc0344SGongjun Song 
86e7ff7307SBard Liao static const struct snd_soc_acpi_adr_device rt1316_3_group1_adr[] = {
87e7ff7307SBard Liao 	{
88e7ff7307SBard Liao 		.adr = 0x000330025D131601ull,
89e7ff7307SBard Liao 		.num_endpoints = 1,
90e7ff7307SBard Liao 		.endpoints = &spk_r_endpoint,
91e7ff7307SBard Liao 		.name_prefix = "rt1316-2"
92e7ff7307SBard Liao 	}
93e7ff7307SBard Liao };
94e7ff7307SBard Liao 
9597b5fbf4SGongjun Song static const struct snd_soc_acpi_adr_device rt1316_0_group2_adr[] = {
9697b5fbf4SGongjun Song 	{
9797b5fbf4SGongjun Song 		.adr = 0x000030025D131601ull,
9897b5fbf4SGongjun Song 		.num_endpoints = 1,
9997b5fbf4SGongjun Song 		.endpoints = &spk_l_endpoint,
10097b5fbf4SGongjun Song 		.name_prefix = "rt1316-1"
10197b5fbf4SGongjun Song 	}
10297b5fbf4SGongjun Song };
10397b5fbf4SGongjun Song 
10497b5fbf4SGongjun Song static const struct snd_soc_acpi_adr_device rt1316_1_group2_adr[] = {
10597b5fbf4SGongjun Song 	{
10697b5fbf4SGongjun Song 		.adr = 0x000131025D131601ull,
10797b5fbf4SGongjun Song 		.num_endpoints = 1,
10897b5fbf4SGongjun Song 		.endpoints = &spk_r_endpoint,
10997b5fbf4SGongjun Song 		.name_prefix = "rt1316-2"
11097b5fbf4SGongjun Song 	}
11197b5fbf4SGongjun Song };
11297b5fbf4SGongjun Song 
1130050e3d3SGongjun Song static const struct snd_soc_acpi_adr_device rt1318_1_group1_adr[] = {
1140050e3d3SGongjun Song 	{
1150612d748SGongjun Song 		.adr = 0x000132025D131801ull,
1160050e3d3SGongjun Song 		.num_endpoints = 1,
1170050e3d3SGongjun Song 		.endpoints = &spk_l_endpoint,
1180050e3d3SGongjun Song 		.name_prefix = "rt1318-1"
1190050e3d3SGongjun Song 	}
1200050e3d3SGongjun Song };
1210050e3d3SGongjun Song 
1220050e3d3SGongjun Song static const struct snd_soc_acpi_adr_device rt1318_2_group1_adr[] = {
1230050e3d3SGongjun Song 	{
1240050e3d3SGongjun Song 		.adr = 0x000230025D131801ull,
1250050e3d3SGongjun Song 		.num_endpoints = 1,
1260050e3d3SGongjun Song 		.endpoints = &spk_r_endpoint,
1270050e3d3SGongjun Song 		.name_prefix = "rt1318-2"
1280050e3d3SGongjun Song 	}
1290050e3d3SGongjun Song };
1300050e3d3SGongjun Song 
13155fc0344SGongjun Song static const struct snd_soc_acpi_adr_device rt714_0_adr[] = {
13255fc0344SGongjun Song 	{
13355fc0344SGongjun Song 		.adr = 0x000030025D071401ull,
13455fc0344SGongjun Song 		.num_endpoints = 1,
13555fc0344SGongjun Song 		.endpoints = &single_endpoint,
13655fc0344SGongjun Song 		.name_prefix = "rt714"
13755fc0344SGongjun Song 	}
13855fc0344SGongjun Song };
13955fc0344SGongjun Song 
140e7ff7307SBard Liao static const struct snd_soc_acpi_adr_device rt714_2_adr[] = {
141e7ff7307SBard Liao 	{
142e7ff7307SBard Liao 		.adr = 0x000230025D071401ull,
143e7ff7307SBard Liao 		.num_endpoints = 1,
144e7ff7307SBard Liao 		.endpoints = &single_endpoint,
145e7ff7307SBard Liao 		.name_prefix = "rt714"
146e7ff7307SBard Liao 	}
147e7ff7307SBard Liao };
148e7ff7307SBard Liao 
14997b5fbf4SGongjun Song static const struct snd_soc_acpi_adr_device rt714_3_adr[] = {
15097b5fbf4SGongjun Song 	{
15197b5fbf4SGongjun Song 		.adr = 0x000330025D071401ull,
15297b5fbf4SGongjun Song 		.num_endpoints = 1,
15397b5fbf4SGongjun Song 		.endpoints = &single_endpoint,
15497b5fbf4SGongjun Song 		.name_prefix = "rt714"
15597b5fbf4SGongjun Song 	}
15697b5fbf4SGongjun Song };
15797b5fbf4SGongjun Song 
158e7ff7307SBard Liao static const struct snd_soc_acpi_link_adr rpl_sdca_3_in_1[] = {
159e7ff7307SBard Liao 	{
160e7ff7307SBard Liao 		.mask = BIT(0),
161e7ff7307SBard Liao 		.num_adr = ARRAY_SIZE(rt711_sdca_0_adr),
162e7ff7307SBard Liao 		.adr_d = rt711_sdca_0_adr,
163e7ff7307SBard Liao 	},
164e7ff7307SBard Liao 	{
165e7ff7307SBard Liao 		.mask = BIT(1),
166e7ff7307SBard Liao 		.num_adr = ARRAY_SIZE(rt1316_1_group1_adr),
167e7ff7307SBard Liao 		.adr_d = rt1316_1_group1_adr,
168e7ff7307SBard Liao 	},
169e7ff7307SBard Liao 	{
170e7ff7307SBard Liao 		.mask = BIT(2),
171e7ff7307SBard Liao 		.num_adr = ARRAY_SIZE(rt714_2_adr),
172e7ff7307SBard Liao 		.adr_d = rt714_2_adr,
173e7ff7307SBard Liao 	},
174e7ff7307SBard Liao 	{
175e7ff7307SBard Liao 		.mask = BIT(3),
176e7ff7307SBard Liao 		.num_adr = ARRAY_SIZE(rt1316_3_group1_adr),
177e7ff7307SBard Liao 		.adr_d = rt1316_3_group1_adr,
178e7ff7307SBard Liao 	},
179e7ff7307SBard Liao 	{}
180e7ff7307SBard Liao };
181e7ff7307SBard Liao 
18297b5fbf4SGongjun Song static const struct snd_soc_acpi_link_adr rpl_sdw_rt711_link2_rt1316_link01_rt714_link3[] = {
18397b5fbf4SGongjun Song 	{
18497b5fbf4SGongjun Song 		.mask = BIT(2),
18597b5fbf4SGongjun Song 		.num_adr = ARRAY_SIZE(rt711_sdca_2_adr),
18697b5fbf4SGongjun Song 		.adr_d = rt711_sdca_2_adr,
18797b5fbf4SGongjun Song 	},
18897b5fbf4SGongjun Song 	{
18997b5fbf4SGongjun Song 		.mask = BIT(0),
19097b5fbf4SGongjun Song 		.num_adr = ARRAY_SIZE(rt1316_0_group2_adr),
19197b5fbf4SGongjun Song 		.adr_d = rt1316_0_group2_adr,
19297b5fbf4SGongjun Song 	},
19397b5fbf4SGongjun Song 	{
19497b5fbf4SGongjun Song 		.mask = BIT(1),
19597b5fbf4SGongjun Song 		.num_adr = ARRAY_SIZE(rt1316_1_group2_adr),
19697b5fbf4SGongjun Song 		.adr_d = rt1316_1_group2_adr,
19797b5fbf4SGongjun Song 	},
19897b5fbf4SGongjun Song 	{
19997b5fbf4SGongjun Song 		.mask = BIT(3),
20097b5fbf4SGongjun Song 		.num_adr = ARRAY_SIZE(rt714_3_adr),
20197b5fbf4SGongjun Song 		.adr_d = rt714_3_adr,
20297b5fbf4SGongjun Song 	},
20397b5fbf4SGongjun Song 	{}
20497b5fbf4SGongjun Song };
20597b5fbf4SGongjun Song 
206*896c3dc2SGongjun Song static const struct snd_soc_acpi_link_adr rpl_sdw_rt711_link2_rt1316_link01[] = {
207*896c3dc2SGongjun Song 	{
208*896c3dc2SGongjun Song 		.mask = BIT(2),
209*896c3dc2SGongjun Song 		.num_adr = ARRAY_SIZE(rt711_sdca_2_adr),
210*896c3dc2SGongjun Song 		.adr_d = rt711_sdca_2_adr,
211*896c3dc2SGongjun Song 	},
212*896c3dc2SGongjun Song 	{
213*896c3dc2SGongjun Song 		.mask = BIT(0),
214*896c3dc2SGongjun Song 		.num_adr = ARRAY_SIZE(rt1316_0_group2_adr),
215*896c3dc2SGongjun Song 		.adr_d = rt1316_0_group2_adr,
216*896c3dc2SGongjun Song 	},
217*896c3dc2SGongjun Song 	{
218*896c3dc2SGongjun Song 		.mask = BIT(1),
219*896c3dc2SGongjun Song 		.num_adr = ARRAY_SIZE(rt1316_1_group2_adr),
220*896c3dc2SGongjun Song 		.adr_d = rt1316_1_group2_adr,
221*896c3dc2SGongjun Song 	},
222*896c3dc2SGongjun Song 	{}
223*896c3dc2SGongjun Song };
224*896c3dc2SGongjun Song 
2250050e3d3SGongjun Song static const struct snd_soc_acpi_link_adr rpl_sdw_rt711_link0_rt1318_link12_rt714_link3[] = {
2260050e3d3SGongjun Song 	{
2270050e3d3SGongjun Song 		.mask = BIT(0),
2280050e3d3SGongjun Song 		.num_adr = ARRAY_SIZE(rt711_sdca_0_adr),
2290050e3d3SGongjun Song 		.adr_d = rt711_sdca_0_adr,
2300050e3d3SGongjun Song 	},
2310050e3d3SGongjun Song 	{
2320050e3d3SGongjun Song 		.mask = BIT(1),
2330050e3d3SGongjun Song 		.num_adr = ARRAY_SIZE(rt1318_1_group1_adr),
2340050e3d3SGongjun Song 		.adr_d = rt1318_1_group1_adr,
2350050e3d3SGongjun Song 	},
2360050e3d3SGongjun Song 	{
2370050e3d3SGongjun Song 		.mask = BIT(2),
2380050e3d3SGongjun Song 		.num_adr = ARRAY_SIZE(rt1318_2_group1_adr),
2390050e3d3SGongjun Song 		.adr_d = rt1318_2_group1_adr,
2400050e3d3SGongjun Song 	},
2410050e3d3SGongjun Song 	{
2420050e3d3SGongjun Song 		.mask = BIT(3),
2430050e3d3SGongjun Song 		.num_adr = ARRAY_SIZE(rt714_3_adr),
2440050e3d3SGongjun Song 		.adr_d = rt714_3_adr,
2450050e3d3SGongjun Song 	},
2460050e3d3SGongjun Song 	{}
2470050e3d3SGongjun Song };
2480050e3d3SGongjun Song 
24955fc0344SGongjun Song static const struct snd_soc_acpi_link_adr rpl_sdw_rt1316_link12_rt714_link0[] = {
25055fc0344SGongjun Song 	{
25155fc0344SGongjun Song 		.mask = BIT(1),
25255fc0344SGongjun Song 		.num_adr = ARRAY_SIZE(rt1316_1_group1_adr),
25355fc0344SGongjun Song 		.adr_d = rt1316_1_group1_adr,
25455fc0344SGongjun Song 	},
25555fc0344SGongjun Song 	{
25655fc0344SGongjun Song 		.mask = BIT(2),
25755fc0344SGongjun Song 		.num_adr = ARRAY_SIZE(rt1316_2_group1_adr),
25855fc0344SGongjun Song 		.adr_d = rt1316_2_group1_adr,
25955fc0344SGongjun Song 	},
26055fc0344SGongjun Song 	{
26155fc0344SGongjun Song 		.mask = BIT(0),
26255fc0344SGongjun Song 		.num_adr = ARRAY_SIZE(rt714_0_adr),
26355fc0344SGongjun Song 		.adr_d = rt714_0_adr,
26455fc0344SGongjun Song 	},
26555fc0344SGongjun Song 	{}
26655fc0344SGongjun Song };
26755fc0344SGongjun Song 
2685f3db54cSKai Vehmanen struct snd_soc_acpi_mach snd_soc_acpi_intel_rpl_machines[] = {
2695f3db54cSKai Vehmanen 	{},
2705f3db54cSKai Vehmanen };
2715f3db54cSKai Vehmanen EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_rpl_machines);
2725f3db54cSKai Vehmanen 
2735f3db54cSKai Vehmanen /* this table is used when there is no I2S codec present */
2745f3db54cSKai Vehmanen struct snd_soc_acpi_mach snd_soc_acpi_intel_rpl_sdw_machines[] = {
2755f3db54cSKai Vehmanen 	{
276e7ff7307SBard Liao 		.link_mask = 0xF, /* 4 active links required */
277e7ff7307SBard Liao 		.links = rpl_sdca_3_in_1,
278e7ff7307SBard Liao 		.drv_name = "sof_sdw",
279e7ff7307SBard Liao 		.sof_tplg_filename = "sof-rpl-rt711-l0-rt1316-l13-rt714-l2.tplg",
280e7ff7307SBard Liao 	},
281e7ff7307SBard Liao 	{
28297b5fbf4SGongjun Song 		.link_mask = 0xF, /* 4 active links required */
28397b5fbf4SGongjun Song 		.links = rpl_sdw_rt711_link2_rt1316_link01_rt714_link3,
28497b5fbf4SGongjun Song 		.drv_name = "sof_sdw",
28597b5fbf4SGongjun Song 		.sof_tplg_filename = "sof-rpl-rt711-l2-rt1316-l01-rt714-l3.tplg",
28697b5fbf4SGongjun Song 	},
28797b5fbf4SGongjun Song 	{
2880050e3d3SGongjun Song 		.link_mask = 0xF, /* 4 active links required */
2890050e3d3SGongjun Song 		.links = rpl_sdw_rt711_link0_rt1318_link12_rt714_link3,
2900050e3d3SGongjun Song 		.drv_name = "sof_sdw",
2910050e3d3SGongjun Song 		.sof_tplg_filename = "sof-rpl-rt711-l0-rt1318-l12-rt714-l3.tplg",
2920050e3d3SGongjun Song 	},
2930050e3d3SGongjun Song 	{
29455fc0344SGongjun Song 		.link_mask = 0x7, /* rt714 on link0 & two rt1316s on link1 and link2 */
29555fc0344SGongjun Song 		.links = rpl_sdw_rt1316_link12_rt714_link0,
29655fc0344SGongjun Song 		.drv_name = "sof_sdw",
29755fc0344SGongjun Song 		.sof_tplg_filename = "sof-rpl-rt1316-l12-rt714-l0.tplg",
29855fc0344SGongjun Song 	},
29955fc0344SGongjun Song 	{
300*896c3dc2SGongjun Song 		.link_mask = 0x7, /* rt711 on link2 & two rt1316s on link0 and link1 */
301*896c3dc2SGongjun Song 		.links = rpl_sdw_rt711_link2_rt1316_link01,
302*896c3dc2SGongjun Song 		.drv_name = "sof_sdw",
303*896c3dc2SGongjun Song 		.sof_tplg_filename = "sof-rpl-rt711-l2-rt1316-l01.tplg",
304*896c3dc2SGongjun Song 	},
305*896c3dc2SGongjun Song 	{
3065f3db54cSKai Vehmanen 		.link_mask = 0x1, /* link0 required */
3075f3db54cSKai Vehmanen 		.links = rpl_rvp,
3085f3db54cSKai Vehmanen 		.drv_name = "sof_sdw",
3095f3db54cSKai Vehmanen 		.sof_tplg_filename = "sof-rpl-rt711.tplg",
3105f3db54cSKai Vehmanen 	},
3115f3db54cSKai Vehmanen 	{},
3125f3db54cSKai Vehmanen };
3135f3db54cSKai Vehmanen EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_rpl_sdw_machines);
314