11f24d93cSPierre-Louis Bossart // SPDX-License-Identifier: GPL-2.0
21f24d93cSPierre-Louis Bossart /*
31f24d93cSPierre-Louis Bossart  * soc-acpi-intel-cml-match.c - tables and support for CML ACPI enumeration.
41f24d93cSPierre-Louis Bossart  *
51f24d93cSPierre-Louis Bossart  * Copyright (c) 2019, Intel Corporation.
61f24d93cSPierre-Louis Bossart  *
71f24d93cSPierre-Louis Bossart  */
81f24d93cSPierre-Louis Bossart 
91f24d93cSPierre-Louis Bossart #include <sound/soc-acpi.h>
101f24d93cSPierre-Louis Bossart #include <sound/soc-acpi-intel-match.h>
111f24d93cSPierre-Louis Bossart 
124e64ba3fSAmery Song static struct snd_soc_acpi_codecs rt1011_spk_codecs = {
131f24d93cSPierre-Louis Bossart 	.num_codecs = 1,
144e64ba3fSAmery Song 	.codecs = {"10EC1011"}
151f24d93cSPierre-Louis Bossart };
161f24d93cSPierre-Louis Bossart 
174e64ba3fSAmery Song static struct snd_soc_acpi_codecs max98357a_spk_codecs = {
181f24d93cSPierre-Louis Bossart 	.num_codecs = 1,
191f24d93cSPierre-Louis Bossart 	.codecs = {"MX98357A"}
201f24d93cSPierre-Louis Bossart };
211f24d93cSPierre-Louis Bossart 
224e64ba3fSAmery Song /*
234e64ba3fSAmery Song  * The order of the three entries with .id = "10EC5682" matters
244e64ba3fSAmery Song  * here, because DSDT tables expose an ACPI HID for the MAX98357A
254e64ba3fSAmery Song  * speaker amplifier which is not populated on the board.
264e64ba3fSAmery Song  */
271f24d93cSPierre-Louis Bossart struct snd_soc_acpi_mach snd_soc_acpi_intel_cml_machines[] = {
281f24d93cSPierre-Louis Bossart 	{
294e64ba3fSAmery Song 		.id = "10EC5682",
301f24d93cSPierre-Louis Bossart 		.drv_name = "cml_rt1011_rt5682",
314e64ba3fSAmery Song 		.machine_quirk = snd_soc_acpi_codec_list,
324e64ba3fSAmery Song 		.quirk_data = &rt1011_spk_codecs,
331f24d93cSPierre-Louis Bossart 		.sof_fw_filename = "sof-cml.ri",
341f24d93cSPierre-Louis Bossart 		.sof_tplg_filename = "sof-cml-rt1011-rt5682.tplg",
351f24d93cSPierre-Louis Bossart 	},
361f24d93cSPierre-Louis Bossart 	{
371f24d93cSPierre-Louis Bossart 		.id = "10EC5682",
381f24d93cSPierre-Louis Bossart 		.drv_name = "sof_rt5682",
394e64ba3fSAmery Song 		.machine_quirk = snd_soc_acpi_codec_list,
404e64ba3fSAmery Song 		.quirk_data = &max98357a_spk_codecs,
414e64ba3fSAmery Song 		.sof_fw_filename = "sof-cml.ri",
424e64ba3fSAmery Song 		.sof_tplg_filename = "sof-cml-rt5682-max98357a.tplg",
434e64ba3fSAmery Song 	},
444e64ba3fSAmery Song 	{
454e64ba3fSAmery Song 		.id = "10EC5682",
464e64ba3fSAmery Song 		.drv_name = "sof_rt5682",
471f24d93cSPierre-Louis Bossart 		.sof_fw_filename = "sof-cml.ri",
481f24d93cSPierre-Louis Bossart 		.sof_tplg_filename = "sof-cml-rt5682.tplg",
491f24d93cSPierre-Louis Bossart 	},
504e64ba3fSAmery Song 	{
514e64ba3fSAmery Song 		.id = "DLGS7219",
524e64ba3fSAmery Song 		.drv_name = "cml_da7219_max98357a",
534e64ba3fSAmery Song 		.machine_quirk = snd_soc_acpi_codec_list,
544e64ba3fSAmery Song 		.quirk_data = &max98357a_spk_codecs,
554e64ba3fSAmery Song 		.sof_fw_filename = "sof-cml.ri",
564e64ba3fSAmery Song 		.sof_tplg_filename = "sof-cml-da7219-max98357a.tplg",
574e64ba3fSAmery Song 	},
581f24d93cSPierre-Louis Bossart 	{},
591f24d93cSPierre-Louis Bossart };
601f24d93cSPierre-Louis Bossart EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_cml_machines);
611f24d93cSPierre-Louis Bossart 
62004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_endpoint single_endpoint = {
63004bd416SPierre-Louis Bossart 	.num = 0,
64004bd416SPierre-Louis Bossart 	.aggregated = 0,
65004bd416SPierre-Louis Bossart 	.group_position = 0,
66004bd416SPierre-Louis Bossart 	.group_id = 0,
67db0b9efbSRander Wang };
68db0b9efbSRander Wang 
69004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_endpoint spk_l_endpoint = {
70004bd416SPierre-Louis Bossart 	.num = 0,
71004bd416SPierre-Louis Bossart 	.aggregated = 1,
72004bd416SPierre-Louis Bossart 	.group_position = 0,
73004bd416SPierre-Louis Bossart 	.group_id = 1,
74db0b9efbSRander Wang };
75db0b9efbSRander Wang 
76004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_endpoint spk_r_endpoint = {
77004bd416SPierre-Louis Bossart 	.num = 0,
78004bd416SPierre-Louis Bossart 	.aggregated = 1,
79004bd416SPierre-Louis Bossart 	.group_position = 1,
80004bd416SPierre-Louis Bossart 	.group_id = 1,
81db0b9efbSRander Wang };
82db0b9efbSRander Wang 
83004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt711_0_adr[] = {
84004bd416SPierre-Louis Bossart 	{
85004bd416SPierre-Louis Bossart 		.adr = 0x000010025D071100,
86004bd416SPierre-Louis Bossart 		.num_endpoints = 1,
87004bd416SPierre-Louis Bossart 		.endpoints = &single_endpoint,
88004bd416SPierre-Louis Bossart 	}
89004bd416SPierre-Louis Bossart };
90004bd416SPierre-Louis Bossart 
91004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt1308_1_adr[] = {
92004bd416SPierre-Louis Bossart 	{
93004bd416SPierre-Louis Bossart 		.adr = 0x000110025D130800,
94004bd416SPierre-Louis Bossart 		.num_endpoints = 1,
95004bd416SPierre-Louis Bossart 		.endpoints = &single_endpoint,
96004bd416SPierre-Louis Bossart 	}
97004bd416SPierre-Louis Bossart };
98004bd416SPierre-Louis Bossart 
99004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt1308_2_adr[] = {
100004bd416SPierre-Louis Bossart 	{
101004bd416SPierre-Louis Bossart 		.adr = 0x000210025D130800,
102004bd416SPierre-Louis Bossart 		.num_endpoints = 1,
103004bd416SPierre-Louis Bossart 		.endpoints = &single_endpoint,
104004bd416SPierre-Louis Bossart 	}
105004bd416SPierre-Louis Bossart };
106004bd416SPierre-Louis Bossart 
107004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt1308_1_group1_adr[] = {
108004bd416SPierre-Louis Bossart 	{
109004bd416SPierre-Louis Bossart 		.adr = 0x000110025D130800,
110004bd416SPierre-Louis Bossart 		.num_endpoints = 1,
111004bd416SPierre-Louis Bossart 		.endpoints = &spk_l_endpoint,
112004bd416SPierre-Louis Bossart 	}
113004bd416SPierre-Louis Bossart };
114004bd416SPierre-Louis Bossart 
115004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt1308_2_group1_adr[] = {
116004bd416SPierre-Louis Bossart 	{
117004bd416SPierre-Louis Bossart 		.adr = 0x000210025D130800,
118004bd416SPierre-Louis Bossart 		.num_endpoints = 1,
119004bd416SPierre-Louis Bossart 		.endpoints = &spk_r_endpoint,
120004bd416SPierre-Louis Bossart 	}
121004bd416SPierre-Louis Bossart };
122004bd416SPierre-Louis Bossart 
123004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt715_3_adr[] = {
124004bd416SPierre-Louis Bossart 	{
125004bd416SPierre-Louis Bossart 		.adr = 0x000310025D071500,
126004bd416SPierre-Louis Bossart 		.num_endpoints = 1,
127004bd416SPierre-Louis Bossart 		.endpoints = &single_endpoint,
128004bd416SPierre-Louis Bossart 	}
129db0b9efbSRander Wang };
130db0b9efbSRander Wang 
131db0b9efbSRander Wang static const struct snd_soc_acpi_link_adr cml_3_in_1_default[] = {
132db0b9efbSRander Wang 	{
133db0b9efbSRander Wang 		.mask = BIT(0),
134db0b9efbSRander Wang 		.num_adr = ARRAY_SIZE(rt711_0_adr),
135004bd416SPierre-Louis Bossart 		.adr_d = rt711_0_adr,
136db0b9efbSRander Wang 	},
137db0b9efbSRander Wang 	{
138db0b9efbSRander Wang 		.mask = BIT(1),
139004bd416SPierre-Louis Bossart 		.num_adr = ARRAY_SIZE(rt1308_1_group1_adr),
140004bd416SPierre-Louis Bossart 		.adr_d = rt1308_1_group1_adr,
141db0b9efbSRander Wang 	},
142db0b9efbSRander Wang 	{
143db0b9efbSRander Wang 		.mask = BIT(2),
144004bd416SPierre-Louis Bossart 		.num_adr = ARRAY_SIZE(rt1308_2_group1_adr),
145004bd416SPierre-Louis Bossart 		.adr_d = rt1308_2_group1_adr,
146db0b9efbSRander Wang 	},
147db0b9efbSRander Wang 	{
148db0b9efbSRander Wang 		.mask = BIT(3),
149db0b9efbSRander Wang 		.num_adr = ARRAY_SIZE(rt715_3_adr),
150004bd416SPierre-Louis Bossart 		.adr_d = rt715_3_adr,
151db0b9efbSRander Wang 	},
152db0b9efbSRander Wang 	{}
153db0b9efbSRander Wang };
154db0b9efbSRander Wang 
155db0b9efbSRander Wang static const struct snd_soc_acpi_link_adr cml_3_in_1_mono_amp[] = {
156db0b9efbSRander Wang 	{
157db0b9efbSRander Wang 		.mask = BIT(0),
158db0b9efbSRander Wang 		.num_adr = ARRAY_SIZE(rt711_0_adr),
159004bd416SPierre-Louis Bossart 		.adr_d = rt711_0_adr,
160db0b9efbSRander Wang 	},
161db0b9efbSRander Wang 	{
162db0b9efbSRander Wang 		.mask = BIT(1),
163db0b9efbSRander Wang 		.num_adr = ARRAY_SIZE(rt1308_1_adr),
164004bd416SPierre-Louis Bossart 		.adr_d = rt1308_1_adr,
165db0b9efbSRander Wang 	},
166db0b9efbSRander Wang 	{
167db0b9efbSRander Wang 		.mask = BIT(3),
168db0b9efbSRander Wang 		.num_adr = ARRAY_SIZE(rt715_3_adr),
169004bd416SPierre-Louis Bossart 		.adr_d = rt715_3_adr,
170db0b9efbSRander Wang 	},
171db0b9efbSRander Wang 	{}
172db0b9efbSRander Wang };
173db0b9efbSRander Wang 
174db0b9efbSRander Wang struct snd_soc_acpi_mach snd_soc_acpi_intel_cml_sdw_machines[] = {
175db0b9efbSRander Wang 	{
176db0b9efbSRander Wang 		.link_mask = 0xF, /* 4 active links required */
177db0b9efbSRander Wang 		.links = cml_3_in_1_default,
178db0b9efbSRander Wang 		.drv_name = "sdw_rt711_rt1308_rt715",
179db0b9efbSRander Wang 		.sof_fw_filename = "sof-cml.ri",
180db0b9efbSRander Wang 		.sof_tplg_filename = "sof-cml-rt711-rt1308-rt715.tplg",
181db0b9efbSRander Wang 	},
182db0b9efbSRander Wang 	{
183db0b9efbSRander Wang 		/*
184db0b9efbSRander Wang 		 * link_mask should be 0xB, but all links are enabled by BIOS.
185db0b9efbSRander Wang 		 * This entry will be selected if there is no rt1308 exposed
186db0b9efbSRander Wang 		 * on link2 since it will fail to match the above entry.
187db0b9efbSRander Wang 		 */
188db0b9efbSRander Wang 		.link_mask = 0xF,
189db0b9efbSRander Wang 		.links = cml_3_in_1_mono_amp,
190db0b9efbSRander Wang 		.drv_name = "sdw_rt711_rt1308_rt715",
191db0b9efbSRander Wang 		.sof_fw_filename = "sof-cml.ri",
192db0b9efbSRander Wang 		.sof_tplg_filename = "sof-cml-rt711-rt1308-mono-rt715.tplg",
193db0b9efbSRander Wang 	},
194db0b9efbSRander Wang 	{
195db0b9efbSRander Wang 		.link_mask = 0x2, /* RT700 connected on Link1 */
196db0b9efbSRander Wang 		.drv_name = "sdw_rt700",
197db0b9efbSRander Wang 		.sof_fw_filename = "sof-cml.ri",
198db0b9efbSRander Wang 		.sof_tplg_filename = "sof-cml-rt700.tplg",
199db0b9efbSRander Wang 	},
200db0b9efbSRander Wang 	{}
201db0b9efbSRander Wang };
202db0b9efbSRander Wang EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_cml_sdw_machines);
203db0b9efbSRander Wang 
2041f24d93cSPierre-Louis Bossart MODULE_LICENSE("GPL v2");
2051f24d93cSPierre-Louis Bossart MODULE_DESCRIPTION("Intel Common ACPI Match module");
206