1 // SPDX-License-Identifier: GPL-2.0-only
2 //
3 // soc-acpi-intel-sdw-mockup-match.c - tables and support for SoundWire
4 // mockup device ACPI enumeration.
5 //
6 // Copyright (c) 2021, Intel Corporation.
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 static const struct snd_soc_acpi_endpoint sdw_mockup_single_endpoint = {
14 	.num = 0,
15 	.aggregated = 0,
16 	.group_position = 0,
17 	.group_id = 0,
18 };
19 
20 static const struct snd_soc_acpi_endpoint sdw_mockup_l_endpoint = {
21 	.num = 0,
22 	.aggregated = 1,
23 	.group_position = 0,
24 	.group_id = 1,
25 };
26 
27 static const struct snd_soc_acpi_endpoint sdw_mockup_r_endpoint = {
28 	.num = 0,
29 	.aggregated = 1,
30 	.group_position = 1,
31 	.group_id = 1,
32 };
33 
34 static const struct snd_soc_acpi_endpoint jack_amp_g1_dmic_endpoints[] = {
35 	/* Jack Endpoint */
36 	{
37 		.num = 0,
38 		.aggregated = 0,
39 		.group_position = 0,
40 		.group_id = 0,
41 	},
42 	/* Amp Endpoint, work as spk_l_endpoint */
43 	{
44 		.num = 1,
45 		.aggregated = 1,
46 		.group_position = 0,
47 		.group_id = 1,
48 	},
49 	/* DMIC Endpoint */
50 	{
51 		.num = 2,
52 		.aggregated = 0,
53 		.group_position = 0,
54 		.group_id = 0,
55 	},
56 };
57 
58 static const struct snd_soc_acpi_adr_device sdw_mockup_headset_0_adr[] = {
59 	{
60 		.adr = 0x0000000105AA5500ull,
61 		.num_endpoints = 1,
62 		.endpoints = &sdw_mockup_single_endpoint,
63 		.name_prefix = "sdw_mockup_headset0"
64 	}
65 };
66 
67 static const struct snd_soc_acpi_adr_device sdw_mockup_headset_1_adr[] = {
68 	{
69 		.adr = 0x0001000105AA5500ull,
70 		.num_endpoints = 1,
71 		.endpoints = &sdw_mockup_single_endpoint,
72 		.name_prefix = "sdw_mockup_headset1"
73 	}
74 };
75 
76 static const struct snd_soc_acpi_adr_device sdw_mockup_amp_1_adr[] = {
77 	{
78 		.adr = 0x000100010555AA00ull,
79 		.num_endpoints = 1,
80 		.endpoints = &sdw_mockup_single_endpoint,
81 		.name_prefix = "sdw_mockup_amp1"
82 	}
83 };
84 
85 static const struct snd_soc_acpi_adr_device sdw_mockup_amp_2_adr[] = {
86 	{
87 		.adr = 0x000200010555AA00ull,
88 		.num_endpoints = 1,
89 		.endpoints = &sdw_mockup_single_endpoint,
90 		.name_prefix = "sdw_mockup_amp2"
91 	}
92 };
93 
94 static const struct snd_soc_acpi_adr_device sdw_mockup_mic_0_adr[] = {
95 	{
96 		.adr = 0x0000000105555500ull,
97 		.num_endpoints = 1,
98 		.endpoints = &sdw_mockup_single_endpoint,
99 		.name_prefix = "sdw_mockup_mic0"
100 	}
101 };
102 
103 static const struct snd_soc_acpi_adr_device sdw_mockup_mic_3_adr[] = {
104 	{
105 		.adr = 0x0003000105555500ull,
106 		.num_endpoints = 1,
107 		.endpoints = &sdw_mockup_single_endpoint,
108 		.name_prefix = "sdw_mockup_mic3"
109 	}
110 };
111 
112 static const struct snd_soc_acpi_adr_device sdw_mockup_amp_1_group1_adr[] = {
113 	{
114 		.adr = 0x000100010555AA00ull,
115 		.num_endpoints = 1,
116 		.endpoints = &sdw_mockup_l_endpoint,
117 		.name_prefix = "sdw_mockup_amp1_l"
118 	}
119 };
120 
121 static const struct snd_soc_acpi_adr_device sdw_mockup_amp_2_group1_adr[] = {
122 	{
123 		.adr = 0x000200010555AA00ull,
124 		.num_endpoints = 1,
125 		.endpoints = &sdw_mockup_r_endpoint,
126 		.name_prefix = "sdw_mockup_amp2_r"
127 	}
128 };
129 
130 static const struct snd_soc_acpi_adr_device sdw_mockup_multi_function_adr[] = {
131 	{
132 		.adr = 0x0000000105AAAA01ull,
133 		.num_endpoints = ARRAY_SIZE(jack_amp_g1_dmic_endpoints),
134 		.endpoints = jack_amp_g1_dmic_endpoints,
135 		.name_prefix = "sdw_mockup_mmulti-function"
136 	}
137 };
138 
139 const struct snd_soc_acpi_link_adr sdw_mockup_headset_1amp_mic[] = {
140 	{
141 		.mask = BIT(0),
142 		.num_adr = ARRAY_SIZE(sdw_mockup_headset_0_adr),
143 		.adr_d = sdw_mockup_headset_0_adr,
144 	},
145 	{
146 		.mask = BIT(1),
147 		.num_adr = ARRAY_SIZE(sdw_mockup_amp_1_adr),
148 		.adr_d = sdw_mockup_amp_1_adr,
149 	},
150 	{
151 		.mask = BIT(3),
152 		.num_adr = ARRAY_SIZE(sdw_mockup_mic_3_adr),
153 		.adr_d = sdw_mockup_mic_3_adr,
154 	},
155 	{}
156 };
157 
158 const struct snd_soc_acpi_link_adr sdw_mockup_headset_2amps_mic[] = {
159 	{
160 		.mask = BIT(0),
161 		.num_adr = ARRAY_SIZE(sdw_mockup_headset_0_adr),
162 		.adr_d = sdw_mockup_headset_0_adr,
163 	},
164 	{
165 		.mask = BIT(1),
166 		.num_adr = ARRAY_SIZE(sdw_mockup_amp_1_group1_adr),
167 		.adr_d = sdw_mockup_amp_1_group1_adr,
168 	},
169 	{
170 		.mask = BIT(2),
171 		.num_adr = ARRAY_SIZE(sdw_mockup_amp_2_group1_adr),
172 		.adr_d = sdw_mockup_amp_2_group1_adr,
173 	},
174 	{
175 		.mask = BIT(3),
176 		.num_adr = ARRAY_SIZE(sdw_mockup_mic_3_adr),
177 		.adr_d = sdw_mockup_mic_3_adr,
178 	},
179 	{}
180 };
181 
182 const struct snd_soc_acpi_link_adr sdw_mockup_mic_headset_1amp[] = {
183 	{
184 		.mask = BIT(1),
185 		.num_adr = ARRAY_SIZE(sdw_mockup_headset_1_adr),
186 		.adr_d = sdw_mockup_headset_1_adr,
187 	},
188 	{
189 		.mask = BIT(2),
190 		.num_adr = ARRAY_SIZE(sdw_mockup_amp_2_adr),
191 		.adr_d = sdw_mockup_amp_2_adr,
192 	},
193 	{
194 		.mask = BIT(0),
195 		.num_adr = ARRAY_SIZE(sdw_mockup_mic_0_adr),
196 		.adr_d = sdw_mockup_mic_0_adr,
197 	},
198 	{}
199 };
200 
201 const struct snd_soc_acpi_link_adr sdw_mockup_multi_func[] = {
202 	{
203 		.mask = BIT(0),
204 		.num_adr = ARRAY_SIZE(sdw_mockup_multi_function_adr),
205 		.adr_d = sdw_mockup_multi_function_adr,
206 	},
207 	{}
208 };
209