xref: /linux/sound/soc/intel/common/soc-acpi-intel-lnl-match.c (revision 7255fcc80d4b525cc10cfaaf7f485830d4ed2000)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * soc-acpi-intel-lnl-match.c - tables and support for LNL ACPI enumeration.
4  *
5  * Copyright (c) 2023, Intel Corporation. All rights reserved.
6  *
7  */
8 
9 #include <sound/soc-acpi.h>
10 #include <sound/soc-acpi-intel-match.h>
11 #include "soc-acpi-intel-sdw-mockup-match.h"
12 
13 struct snd_soc_acpi_mach snd_soc_acpi_intel_lnl_machines[] = {
14 	{},
15 };
16 EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_lnl_machines);
17 
18 static const struct snd_soc_acpi_endpoint single_endpoint = {
19 	.num = 0,
20 	.aggregated = 0,
21 	.group_position = 0,
22 	.group_id = 0,
23 };
24 
25 static const struct snd_soc_acpi_endpoint spk_l_endpoint = {
26 	.num = 0,
27 	.aggregated = 1,
28 	.group_position = 0,
29 	.group_id = 1,
30 };
31 
32 static const struct snd_soc_acpi_endpoint spk_r_endpoint = {
33 	.num = 0,
34 	.aggregated = 1,
35 	.group_position = 1,
36 	.group_id = 1,
37 };
38 
39 static const struct snd_soc_acpi_endpoint rt712_endpoints[] = {
40 	{
41 		.num = 0,
42 		.aggregated = 0,
43 		.group_position = 0,
44 		.group_id = 0,
45 	},
46 	{
47 		.num = 1,
48 		.aggregated = 0,
49 		.group_position = 0,
50 		.group_id = 0,
51 	},
52 };
53 
54 /*
55  * RT722 is a multi-function codec, three endpoints are created for
56  * its headset, amp and dmic functions.
57  */
58 static const struct snd_soc_acpi_endpoint rt722_endpoints[] = {
59 	{
60 		.num = 0,
61 		.aggregated = 0,
62 		.group_position = 0,
63 		.group_id = 0,
64 	},
65 	{
66 		.num = 1,
67 		.aggregated = 0,
68 		.group_position = 0,
69 		.group_id = 0,
70 	},
71 	{
72 		.num = 2,
73 		.aggregated = 0,
74 		.group_position = 0,
75 		.group_id = 0,
76 	},
77 };
78 
79 static const struct snd_soc_acpi_adr_device rt711_sdca_0_adr[] = {
80 	{
81 		.adr = 0x000030025D071101ull,
82 		.num_endpoints = 1,
83 		.endpoints = &single_endpoint,
84 		.name_prefix = "rt711"
85 	}
86 };
87 
88 static const struct snd_soc_acpi_adr_device rt712_2_single_adr[] = {
89 	{
90 		.adr = 0x000230025D071201ull,
91 		.num_endpoints = ARRAY_SIZE(rt712_endpoints),
92 		.endpoints = rt712_endpoints,
93 		.name_prefix = "rt712"
94 	}
95 };
96 
97 static const struct snd_soc_acpi_adr_device rt1712_3_single_adr[] = {
98 	{
99 		.adr = 0x000330025D171201ull,
100 		.num_endpoints = 1,
101 		.endpoints = &single_endpoint,
102 		.name_prefix = "rt712-dmic"
103 	}
104 };
105 
106 static const struct snd_soc_acpi_adr_device rt722_0_single_adr[] = {
107 	{
108 		.adr = 0x000030025d072201ull,
109 		.num_endpoints = ARRAY_SIZE(rt722_endpoints),
110 		.endpoints = rt722_endpoints,
111 		.name_prefix = "rt722"
112 	}
113 };
114 
115 static const struct snd_soc_acpi_adr_device rt1316_2_group1_adr[] = {
116 	{
117 		.adr = 0x000230025D131601ull,
118 		.num_endpoints = 1,
119 		.endpoints = &spk_l_endpoint,
120 		.name_prefix = "rt1316-1"
121 	}
122 };
123 
124 static const struct snd_soc_acpi_adr_device rt1316_3_group1_adr[] = {
125 	{
126 		.adr = 0x000331025D131601ull,
127 		.num_endpoints = 1,
128 		.endpoints = &spk_r_endpoint,
129 		.name_prefix = "rt1316-2"
130 	}
131 };
132 
133 static const struct snd_soc_acpi_adr_device rt714_1_adr[] = {
134 	{
135 		.adr = 0x000130025D071401ull,
136 		.num_endpoints = 1,
137 		.endpoints = &single_endpoint,
138 		.name_prefix = "rt714"
139 	}
140 };
141 
142 static const struct snd_soc_acpi_link_adr lnl_rvp[] = {
143 	{
144 		.mask = BIT(0),
145 		.num_adr = ARRAY_SIZE(rt711_sdca_0_adr),
146 		.adr_d = rt711_sdca_0_adr,
147 	},
148 	{}
149 };
150 
151 static const struct snd_soc_acpi_link_adr lnl_712_only[] = {
152 	{
153 		.mask = BIT(2),
154 		.num_adr = ARRAY_SIZE(rt712_2_single_adr),
155 		.adr_d = rt712_2_single_adr,
156 	},
157 	{
158 		.mask = BIT(3),
159 		.num_adr = ARRAY_SIZE(rt1712_3_single_adr),
160 		.adr_d = rt1712_3_single_adr,
161 	},
162 	{}
163 };
164 
165 static const struct snd_soc_acpi_link_adr lnl_rt722_only[] = {
166 	{
167 		.mask = BIT(0),
168 		.num_adr = ARRAY_SIZE(rt722_0_single_adr),
169 		.adr_d = rt722_0_single_adr,
170 	},
171 	{}
172 };
173 
174 static const struct snd_soc_acpi_link_adr lnl_3_in_1_sdca[] = {
175 	{
176 		.mask = BIT(0),
177 		.num_adr = ARRAY_SIZE(rt711_sdca_0_adr),
178 		.adr_d = rt711_sdca_0_adr,
179 	},
180 	{
181 		.mask = BIT(2),
182 		.num_adr = ARRAY_SIZE(rt1316_2_group1_adr),
183 		.adr_d = rt1316_2_group1_adr,
184 	},
185 	{
186 		.mask = BIT(3),
187 		.num_adr = ARRAY_SIZE(rt1316_3_group1_adr),
188 		.adr_d = rt1316_3_group1_adr,
189 	},
190 	{
191 		.mask = BIT(1),
192 		.num_adr = ARRAY_SIZE(rt714_1_adr),
193 		.adr_d = rt714_1_adr,
194 	},
195 	{}
196 };
197 
198 /* this table is used when there is no I2S codec present */
199 struct snd_soc_acpi_mach snd_soc_acpi_intel_lnl_sdw_machines[] = {
200 	/* mockup tests need to be first */
201 	{
202 		.link_mask = GENMASK(3, 0),
203 		.links = sdw_mockup_headset_2amps_mic,
204 		.drv_name = "sof_sdw",
205 		.sof_tplg_filename = "sof-lnl-rt711-rt1308-rt715.tplg",
206 	},
207 	{
208 		.link_mask = BIT(0) | BIT(1) | BIT(3),
209 		.links = sdw_mockup_headset_1amp_mic,
210 		.drv_name = "sof_sdw",
211 		.sof_tplg_filename = "sof-lnl-rt711-rt1308-mono-rt715.tplg",
212 	},
213 	{
214 		.link_mask = GENMASK(2, 0),
215 		.links = sdw_mockup_mic_headset_1amp,
216 		.drv_name = "sof_sdw",
217 		.sof_tplg_filename = "sof-lnl-rt715-rt711-rt1308-mono.tplg",
218 	},
219 	{
220 		.link_mask = GENMASK(3, 0),
221 		.links = lnl_3_in_1_sdca,
222 		.drv_name = "sof_sdw",
223 		.sof_tplg_filename = "sof-lnl-rt711-l0-rt1316-l23-rt714-l1.tplg",
224 	},
225 	{
226 		.link_mask = BIT(0),
227 		.links = lnl_rvp,
228 		.drv_name = "sof_sdw",
229 		.sof_tplg_filename = "sof-lnl-rt711.tplg",
230 	},
231 	{
232 		.link_mask = BIT(2) | BIT(3),
233 		.links = lnl_712_only,
234 		.drv_name = "sof_sdw",
235 		.sof_tplg_filename = "sof-lnl-rt712-l2-rt1712-l3.tplg",
236 	},
237 	{
238 		.link_mask = BIT(0),
239 		.links = lnl_rt722_only,
240 		.drv_name = "sof_sdw",
241 		.sof_tplg_filename = "sof-lnl-rt722-l0.tplg",
242 	},
243 	{},
244 };
245 EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_lnl_sdw_machines);
246