1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * soc-acpi-intel-icl-match.c - tables and support for ICL ACPI enumeration.
4  *
5  * Copyright (c) 2018, Intel Corporation.
6  *
7  */
8 
9 #include <sound/soc-acpi.h>
10 #include <sound/soc-acpi-intel-match.h>
11 
12 static const struct snd_soc_acpi_codecs essx_83x6 = {
13 	.num_codecs = 3,
14 	.codecs = { "ESSX8316", "ESSX8326", "ESSX8336"},
15 };
16 
17 struct snd_soc_acpi_mach snd_soc_acpi_intel_icl_machines[] = {
18 	{
19 		.id = "INT34C2",
20 		.drv_name = "icl_rt274",
21 		.fw_filename = "intel/dsp_fw_icl.bin",
22 		.sof_tplg_filename = "sof-icl-rt274.tplg",
23 	},
24 	{
25 		.id = "10EC5682",
26 		.drv_name = "icl_rt5682_def",
27 		.sof_tplg_filename = "sof-icl-rt5682.tplg",
28 	},
29 	{
30 		.comp_ids = &essx_83x6,
31 		.drv_name = "sof-essx8336",
32 		.sof_tplg_filename = "sof-icl-es8336", /* the tplg suffix is added at run time */
33 		.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_SSP_NUMBER |
34 					SND_SOC_ACPI_TPLG_INTEL_SSP_MSB |
35 					SND_SOC_ACPI_TPLG_INTEL_DMIC_NUMBER,
36 	},
37 	{},
38 };
39 EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_icl_machines);
40 
41 static const struct snd_soc_acpi_endpoint single_endpoint = {
42 	.num = 0,
43 	.aggregated = 0,
44 	.group_position = 0,
45 	.group_id = 0,
46 };
47 
48 static const struct snd_soc_acpi_endpoint spk_l_endpoint = {
49 	.num = 0,
50 	.aggregated = 1,
51 	.group_position = 0,
52 	.group_id = 1,
53 };
54 
55 static const struct snd_soc_acpi_endpoint spk_r_endpoint = {
56 	.num = 0,
57 	.aggregated = 1,
58 	.group_position = 1,
59 	.group_id = 1,
60 };
61 
62 static const struct snd_soc_acpi_adr_device rt700_0_adr[] = {
63 	{
64 		.adr = 0x000010025D070000ull,
65 		.num_endpoints = 1,
66 		.endpoints = &single_endpoint,
67 		.name_prefix = "rt700"
68 	}
69 };
70 
71 static const struct snd_soc_acpi_link_adr icl_rvp[] = {
72 	{
73 		.mask = BIT(0),
74 		.num_adr = ARRAY_SIZE(rt700_0_adr),
75 		.adr_d = rt700_0_adr,
76 	},
77 	{}
78 };
79 
80 static const struct snd_soc_acpi_adr_device rt711_0_adr[] = {
81 	{
82 		.adr = 0x000020025D071100ull,
83 		.num_endpoints = 1,
84 		.endpoints = &single_endpoint,
85 		.name_prefix = "rt711"
86 	}
87 };
88 
89 static const struct snd_soc_acpi_adr_device rt1308_1_adr[] = {
90 	{
91 		.adr = 0x000120025D130800ull,
92 		.num_endpoints = 1,
93 		.endpoints = &single_endpoint,
94 		.name_prefix = "rt1308-1"
95 	}
96 };
97 
98 static const struct snd_soc_acpi_adr_device rt1308_1_group1_adr[] = {
99 	{
100 		.adr = 0x000120025D130800ull,
101 		.num_endpoints = 1,
102 		.endpoints = &spk_l_endpoint,
103 		.name_prefix = "rt1308-1"
104 	}
105 };
106 
107 static const struct snd_soc_acpi_adr_device rt1308_2_group1_adr[] = {
108 	{
109 		.adr = 0x000220025D130800ull,
110 		.num_endpoints = 1,
111 		.endpoints = &spk_r_endpoint,
112 		.name_prefix = "rt1308-2"
113 	}
114 };
115 
116 static const struct snd_soc_acpi_adr_device rt715_3_adr[] = {
117 	{
118 		.adr = 0x000320025D071500ull,
119 		.num_endpoints = 1,
120 		.endpoints = &single_endpoint,
121 		.name_prefix = "rt715"
122 	}
123 };
124 
125 static const struct snd_soc_acpi_link_adr icl_3_in_1_default[] = {
126 	{
127 		.mask = BIT(0),
128 		.num_adr = ARRAY_SIZE(rt711_0_adr),
129 		.adr_d = rt711_0_adr,
130 	},
131 	{
132 		.mask = BIT(1),
133 		.num_adr = ARRAY_SIZE(rt1308_1_group1_adr),
134 		.adr_d = rt1308_1_group1_adr,
135 	},
136 	{
137 		.mask = BIT(2),
138 		.num_adr = ARRAY_SIZE(rt1308_2_group1_adr),
139 		.adr_d = rt1308_2_group1_adr,
140 	},
141 	{
142 		.mask = BIT(3),
143 		.num_adr = ARRAY_SIZE(rt715_3_adr),
144 		.adr_d = rt715_3_adr,
145 	},
146 	{}
147 };
148 
149 static const struct snd_soc_acpi_link_adr icl_3_in_1_mono_amp[] = {
150 	{
151 		.mask = BIT(0),
152 		.num_adr = ARRAY_SIZE(rt711_0_adr),
153 		.adr_d = rt711_0_adr,
154 	},
155 	{
156 		.mask = BIT(1),
157 		.num_adr = ARRAY_SIZE(rt1308_1_adr),
158 		.adr_d = rt1308_1_adr,
159 	},
160 	{
161 		.mask = BIT(3),
162 		.num_adr = ARRAY_SIZE(rt715_3_adr),
163 		.adr_d = rt715_3_adr,
164 	},
165 	{}
166 };
167 
168 struct snd_soc_acpi_mach snd_soc_acpi_intel_icl_sdw_machines[] = {
169 	{
170 		.link_mask = 0xF, /* 4 active links required */
171 		.links = icl_3_in_1_default,
172 		.drv_name = "sof_sdw",
173 		.sof_tplg_filename = "sof-icl-rt711-rt1308-rt715.tplg",
174 	},
175 	{
176 		.link_mask = 0xB, /* 3 active links required */
177 		.links = icl_3_in_1_mono_amp,
178 		.drv_name = "sof_sdw",
179 		.sof_tplg_filename = "sof-icl-rt711-rt1308-rt715-mono.tplg",
180 	},
181 	{
182 		.link_mask = 0x1, /* rt700 connected on link0 */
183 		.links = icl_rvp,
184 		.drv_name = "sof_sdw",
185 		.sof_tplg_filename = "sof-icl-rt700.tplg",
186 	},
187 	{},
188 };
189 EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_icl_sdw_machines);
190