Merge tag 'media/v5.9-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab...
[platform/kernel/linux-starfive.git] / sound / soc / intel / common / soc-acpi-intel-cml-match.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * soc-acpi-intel-cml-match.c - tables and support for CML ACPI enumeration.
4  *
5  * Copyright (c) 2019, Intel Corporation.
6  *
7  */
8
9 #include <sound/soc-acpi.h>
10 #include <sound/soc-acpi-intel-match.h>
11
12 static struct snd_soc_acpi_codecs rt1011_spk_codecs = {
13         .num_codecs = 1,
14         .codecs = {"10EC1011"}
15 };
16
17 static struct snd_soc_acpi_codecs max98357a_spk_codecs = {
18         .num_codecs = 1,
19         .codecs = {"MX98357A"}
20 };
21
22 static struct snd_soc_acpi_codecs max98390_spk_codecs = {
23         .num_codecs = 1,
24         .codecs = {"MX98390"}
25 };
26
27 /*
28  * The order of the three entries with .id = "10EC5682" matters
29  * here, because DSDT tables expose an ACPI HID for the MAX98357A
30  * speaker amplifier which is not populated on the board.
31  */
32 struct snd_soc_acpi_mach snd_soc_acpi_intel_cml_machines[] = {
33         {
34                 .id = "10EC5682",
35                 .drv_name = "cml_rt1011_rt5682",
36                 .machine_quirk = snd_soc_acpi_codec_list,
37                 .quirk_data = &rt1011_spk_codecs,
38                 .sof_fw_filename = "sof-cml.ri",
39                 .sof_tplg_filename = "sof-cml-rt1011-rt5682.tplg",
40         },
41         {
42                 .id = "10EC5682",
43                 .drv_name = "sof_rt5682",
44                 .machine_quirk = snd_soc_acpi_codec_list,
45                 .quirk_data = &max98357a_spk_codecs,
46                 .sof_fw_filename = "sof-cml.ri",
47                 .sof_tplg_filename = "sof-cml-rt5682-max98357a.tplg",
48         },
49         {
50                 .id = "10EC5682",
51                 .drv_name = "sof_rt5682",
52                 .sof_fw_filename = "sof-cml.ri",
53                 .sof_tplg_filename = "sof-cml-rt5682.tplg",
54         },
55         {
56                 .id = "DLGS7219",
57                 .drv_name = "cml_da7219_max98357a",
58                 .machine_quirk = snd_soc_acpi_codec_list,
59                 .quirk_data = &max98357a_spk_codecs,
60                 .sof_fw_filename = "sof-cml.ri",
61                 .sof_tplg_filename = "sof-cml-da7219-max98357a.tplg",
62         },
63         {
64                 .id = "DLGS7219",
65                 .drv_name = "cml_da7219_max98357a",
66                 .machine_quirk = snd_soc_acpi_codec_list,
67                 .quirk_data = &max98390_spk_codecs,
68                 .sof_fw_filename = "sof-cml.ri",
69                 .sof_tplg_filename = "sof-cml-da7219-max98357a.tplg",
70         },
71         {},
72 };
73 EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_cml_machines);
74
75 static const struct snd_soc_acpi_endpoint single_endpoint = {
76         .num = 0,
77         .aggregated = 0,
78         .group_position = 0,
79         .group_id = 0,
80 };
81
82 static const struct snd_soc_acpi_endpoint spk_l_endpoint = {
83         .num = 0,
84         .aggregated = 1,
85         .group_position = 0,
86         .group_id = 1,
87 };
88
89 static const struct snd_soc_acpi_endpoint spk_r_endpoint = {
90         .num = 0,
91         .aggregated = 1,
92         .group_position = 1,
93         .group_id = 1,
94 };
95
96 static const struct snd_soc_acpi_adr_device rt700_1_adr[] = {
97         {
98                 .adr = 0x000110025D070000,
99                 .num_endpoints = 1,
100                 .endpoints = &single_endpoint,
101         }
102 };
103
104 static const struct snd_soc_acpi_link_adr cml_rvp[] = {
105         {
106                 .mask = BIT(1),
107                 .num_adr = ARRAY_SIZE(rt700_1_adr),
108                 .adr_d = rt700_1_adr,
109         },
110         {}
111 };
112
113 static const struct snd_soc_acpi_adr_device rt711_0_adr[] = {
114         {
115                 .adr = 0x000010025D071100,
116                 .num_endpoints = 1,
117                 .endpoints = &single_endpoint,
118         }
119 };
120
121 static const struct snd_soc_acpi_adr_device rt1308_1_adr[] = {
122         {
123                 .adr = 0x000110025D130800,
124                 .num_endpoints = 1,
125                 .endpoints = &single_endpoint,
126         }
127 };
128
129 static const struct snd_soc_acpi_adr_device rt1308_1_group1_adr[] = {
130         {
131                 .adr = 0x000110025D130800,
132                 .num_endpoints = 1,
133                 .endpoints = &spk_l_endpoint,
134         }
135 };
136
137 static const struct snd_soc_acpi_adr_device rt1308_2_group1_adr[] = {
138         {
139                 .adr = 0x000210025D130800,
140                 .num_endpoints = 1,
141                 .endpoints = &spk_r_endpoint,
142         }
143 };
144
145 static const struct snd_soc_acpi_adr_device rt715_3_adr[] = {
146         {
147                 .adr = 0x000310025D071500,
148                 .num_endpoints = 1,
149                 .endpoints = &single_endpoint,
150         }
151 };
152
153 static const struct snd_soc_acpi_link_adr cml_3_in_1_default[] = {
154         {
155                 .mask = BIT(0),
156                 .num_adr = ARRAY_SIZE(rt711_0_adr),
157                 .adr_d = rt711_0_adr,
158         },
159         {
160                 .mask = BIT(1),
161                 .num_adr = ARRAY_SIZE(rt1308_1_group1_adr),
162                 .adr_d = rt1308_1_group1_adr,
163         },
164         {
165                 .mask = BIT(2),
166                 .num_adr = ARRAY_SIZE(rt1308_2_group1_adr),
167                 .adr_d = rt1308_2_group1_adr,
168         },
169         {
170                 .mask = BIT(3),
171                 .num_adr = ARRAY_SIZE(rt715_3_adr),
172                 .adr_d = rt715_3_adr,
173         },
174         {}
175 };
176
177 static const struct snd_soc_acpi_link_adr cml_3_in_1_mono_amp[] = {
178         {
179                 .mask = BIT(0),
180                 .num_adr = ARRAY_SIZE(rt711_0_adr),
181                 .adr_d = rt711_0_adr,
182         },
183         {
184                 .mask = BIT(1),
185                 .num_adr = ARRAY_SIZE(rt1308_1_adr),
186                 .adr_d = rt1308_1_adr,
187         },
188         {
189                 .mask = BIT(3),
190                 .num_adr = ARRAY_SIZE(rt715_3_adr),
191                 .adr_d = rt715_3_adr,
192         },
193         {}
194 };
195
196 struct snd_soc_acpi_mach snd_soc_acpi_intel_cml_sdw_machines[] = {
197         {
198                 .link_mask = 0xF, /* 4 active links required */
199                 .links = cml_3_in_1_default,
200                 .drv_name = "sof_sdw",
201                 .sof_fw_filename = "sof-cml.ri",
202                 .sof_tplg_filename = "sof-cml-rt711-rt1308-rt715.tplg",
203         },
204         {
205                 /*
206                  * link_mask should be 0xB, but all links are enabled by BIOS.
207                  * This entry will be selected if there is no rt1308 exposed
208                  * on link2 since it will fail to match the above entry.
209                  */
210                 .link_mask = 0xF,
211                 .links = cml_3_in_1_mono_amp,
212                 .drv_name = "sof_sdw",
213                 .sof_fw_filename = "sof-cml.ri",
214                 .sof_tplg_filename = "sof-cml-rt711-rt1308-mono-rt715.tplg",
215         },
216         {
217                 .link_mask = 0x2, /* RT700 connected on Link1 */
218                 .links = cml_rvp,
219                 .drv_name = "sof_sdw",
220                 .sof_fw_filename = "sof-cml.ri",
221                 .sof_tplg_filename = "sof-cml-rt700.tplg",
222         },
223         {}
224 };
225 EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_cml_sdw_machines);
226
227 MODULE_LICENSE("GPL v2");
228 MODULE_DESCRIPTION("Intel Common ACPI Match module");