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 	{
115*0612d748SGongjun 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 
2060050e3d3SGongjun Song static const struct snd_soc_acpi_link_adr rpl_sdw_rt711_link0_rt1318_link12_rt714_link3[] = {
2070050e3d3SGongjun Song 	{
2080050e3d3SGongjun Song 		.mask = BIT(0),
2090050e3d3SGongjun Song 		.num_adr = ARRAY_SIZE(rt711_sdca_0_adr),
2100050e3d3SGongjun Song 		.adr_d = rt711_sdca_0_adr,
2110050e3d3SGongjun Song 	},
2120050e3d3SGongjun Song 	{
2130050e3d3SGongjun Song 		.mask = BIT(1),
2140050e3d3SGongjun Song 		.num_adr = ARRAY_SIZE(rt1318_1_group1_adr),
2150050e3d3SGongjun Song 		.adr_d = rt1318_1_group1_adr,
2160050e3d3SGongjun Song 	},
2170050e3d3SGongjun Song 	{
2180050e3d3SGongjun Song 		.mask = BIT(2),
2190050e3d3SGongjun Song 		.num_adr = ARRAY_SIZE(rt1318_2_group1_adr),
2200050e3d3SGongjun Song 		.adr_d = rt1318_2_group1_adr,
2210050e3d3SGongjun Song 	},
2220050e3d3SGongjun Song 	{
2230050e3d3SGongjun Song 		.mask = BIT(3),
2240050e3d3SGongjun Song 		.num_adr = ARRAY_SIZE(rt714_3_adr),
2250050e3d3SGongjun Song 		.adr_d = rt714_3_adr,
2260050e3d3SGongjun Song 	},
2270050e3d3SGongjun Song 	{}
2280050e3d3SGongjun Song };
2290050e3d3SGongjun Song 
23055fc0344SGongjun Song static const struct snd_soc_acpi_link_adr rpl_sdw_rt1316_link12_rt714_link0[] = {
23155fc0344SGongjun Song 	{
23255fc0344SGongjun Song 		.mask = BIT(1),
23355fc0344SGongjun Song 		.num_adr = ARRAY_SIZE(rt1316_1_group1_adr),
23455fc0344SGongjun Song 		.adr_d = rt1316_1_group1_adr,
23555fc0344SGongjun Song 	},
23655fc0344SGongjun Song 	{
23755fc0344SGongjun Song 		.mask = BIT(2),
23855fc0344SGongjun Song 		.num_adr = ARRAY_SIZE(rt1316_2_group1_adr),
23955fc0344SGongjun Song 		.adr_d = rt1316_2_group1_adr,
24055fc0344SGongjun Song 	},
24155fc0344SGongjun Song 	{
24255fc0344SGongjun Song 		.mask = BIT(0),
24355fc0344SGongjun Song 		.num_adr = ARRAY_SIZE(rt714_0_adr),
24455fc0344SGongjun Song 		.adr_d = rt714_0_adr,
24555fc0344SGongjun Song 	},
24655fc0344SGongjun Song 	{}
24755fc0344SGongjun Song };
24855fc0344SGongjun Song 
2495f3db54cSKai Vehmanen struct snd_soc_acpi_mach snd_soc_acpi_intel_rpl_machines[] = {
2505f3db54cSKai Vehmanen 	{},
2515f3db54cSKai Vehmanen };
2525f3db54cSKai Vehmanen EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_rpl_machines);
2535f3db54cSKai Vehmanen 
2545f3db54cSKai Vehmanen /* this table is used when there is no I2S codec present */
2555f3db54cSKai Vehmanen struct snd_soc_acpi_mach snd_soc_acpi_intel_rpl_sdw_machines[] = {
2565f3db54cSKai Vehmanen 	{
257e7ff7307SBard Liao 		.link_mask = 0xF, /* 4 active links required */
258e7ff7307SBard Liao 		.links = rpl_sdca_3_in_1,
259e7ff7307SBard Liao 		.drv_name = "sof_sdw",
260e7ff7307SBard Liao 		.sof_tplg_filename = "sof-rpl-rt711-l0-rt1316-l13-rt714-l2.tplg",
261e7ff7307SBard Liao 	},
262e7ff7307SBard Liao 	{
26397b5fbf4SGongjun Song 		.link_mask = 0xF, /* 4 active links required */
26497b5fbf4SGongjun Song 		.links = rpl_sdw_rt711_link2_rt1316_link01_rt714_link3,
26597b5fbf4SGongjun Song 		.drv_name = "sof_sdw",
26697b5fbf4SGongjun Song 		.sof_tplg_filename = "sof-rpl-rt711-l2-rt1316-l01-rt714-l3.tplg",
26797b5fbf4SGongjun Song 	},
26897b5fbf4SGongjun Song 	{
2690050e3d3SGongjun Song 		.link_mask = 0xF, /* 4 active links required */
2700050e3d3SGongjun Song 		.links = rpl_sdw_rt711_link0_rt1318_link12_rt714_link3,
2710050e3d3SGongjun Song 		.drv_name = "sof_sdw",
2720050e3d3SGongjun Song 		.sof_tplg_filename = "sof-rpl-rt711-l0-rt1318-l12-rt714-l3.tplg",
2730050e3d3SGongjun Song 	},
2740050e3d3SGongjun Song 	{
27555fc0344SGongjun Song 		.link_mask = 0x7, /* rt714 on link0 & two rt1316s on link1 and link2 */
27655fc0344SGongjun Song 		.links = rpl_sdw_rt1316_link12_rt714_link0,
27755fc0344SGongjun Song 		.drv_name = "sof_sdw",
27855fc0344SGongjun Song 		.sof_tplg_filename = "sof-rpl-rt1316-l12-rt714-l0.tplg",
27955fc0344SGongjun Song 	},
28055fc0344SGongjun Song 	{
2815f3db54cSKai Vehmanen 		.link_mask = 0x1, /* link0 required */
2825f3db54cSKai Vehmanen 		.links = rpl_rvp,
2835f3db54cSKai Vehmanen 		.drv_name = "sof_sdw",
2845f3db54cSKai Vehmanen 		.sof_tplg_filename = "sof-rpl-rt711.tplg",
2855f3db54cSKai Vehmanen 	},
2865f3db54cSKai Vehmanen 	{},
2875f3db54cSKai Vehmanen };
2885f3db54cSKai Vehmanen EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_rpl_sdw_machines);
289