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