1e149ca29SPierre-Louis Bossart // SPDX-License-Identifier: GPL-2.0-only
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 
83ba762e67SRander Wang static const struct snd_soc_acpi_adr_device rt700_1_adr[] = {
84ba762e67SRander Wang 	{
85ba762e67SRander Wang 		.adr = 0x000110025D070000,
86ba762e67SRander Wang 		.num_endpoints = 1,
87ba762e67SRander Wang 		.endpoints = &single_endpoint,
88ba762e67SRander Wang 	}
89ba762e67SRander Wang };
90ba762e67SRander Wang 
91ba762e67SRander Wang static const struct snd_soc_acpi_link_adr cml_rvp[] = {
92ba762e67SRander Wang 	{
93ba762e67SRander Wang 		.mask = BIT(1),
94ba762e67SRander Wang 		.num_adr = ARRAY_SIZE(rt700_1_adr),
95ba762e67SRander Wang 		.adr_d = rt700_1_adr,
96ba762e67SRander Wang 	},
97ba762e67SRander Wang 	{}
98ba762e67SRander Wang };
99ba762e67SRander Wang 
100004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt711_0_adr[] = {
101004bd416SPierre-Louis Bossart 	{
102004bd416SPierre-Louis Bossart 		.adr = 0x000010025D071100,
103004bd416SPierre-Louis Bossart 		.num_endpoints = 1,
104004bd416SPierre-Louis Bossart 		.endpoints = &single_endpoint,
105004bd416SPierre-Louis Bossart 	}
106004bd416SPierre-Louis Bossart };
107004bd416SPierre-Louis Bossart 
108004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt1308_1_adr[] = {
109004bd416SPierre-Louis Bossart 	{
110004bd416SPierre-Louis Bossart 		.adr = 0x000110025D130800,
111004bd416SPierre-Louis Bossart 		.num_endpoints = 1,
112004bd416SPierre-Louis Bossart 		.endpoints = &single_endpoint,
113004bd416SPierre-Louis Bossart 	}
114004bd416SPierre-Louis Bossart };
115004bd416SPierre-Louis Bossart 
116004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt1308_1_group1_adr[] = {
117004bd416SPierre-Louis Bossart 	{
118004bd416SPierre-Louis Bossart 		.adr = 0x000110025D130800,
119004bd416SPierre-Louis Bossart 		.num_endpoints = 1,
120004bd416SPierre-Louis Bossart 		.endpoints = &spk_l_endpoint,
121004bd416SPierre-Louis Bossart 	}
122004bd416SPierre-Louis Bossart };
123004bd416SPierre-Louis Bossart 
124004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt1308_2_group1_adr[] = {
125004bd416SPierre-Louis Bossart 	{
126004bd416SPierre-Louis Bossart 		.adr = 0x000210025D130800,
127004bd416SPierre-Louis Bossart 		.num_endpoints = 1,
128004bd416SPierre-Louis Bossart 		.endpoints = &spk_r_endpoint,
129004bd416SPierre-Louis Bossart 	}
130004bd416SPierre-Louis Bossart };
131004bd416SPierre-Louis Bossart 
132004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt715_3_adr[] = {
133004bd416SPierre-Louis Bossart 	{
134004bd416SPierre-Louis Bossart 		.adr = 0x000310025D071500,
135004bd416SPierre-Louis Bossart 		.num_endpoints = 1,
136004bd416SPierre-Louis Bossart 		.endpoints = &single_endpoint,
137004bd416SPierre-Louis Bossart 	}
138db0b9efbSRander Wang };
139db0b9efbSRander Wang 
140db0b9efbSRander Wang static const struct snd_soc_acpi_link_adr cml_3_in_1_default[] = {
141db0b9efbSRander Wang 	{
142db0b9efbSRander Wang 		.mask = BIT(0),
143db0b9efbSRander Wang 		.num_adr = ARRAY_SIZE(rt711_0_adr),
144004bd416SPierre-Louis Bossart 		.adr_d = rt711_0_adr,
145db0b9efbSRander Wang 	},
146db0b9efbSRander Wang 	{
147db0b9efbSRander Wang 		.mask = BIT(1),
148004bd416SPierre-Louis Bossart 		.num_adr = ARRAY_SIZE(rt1308_1_group1_adr),
149004bd416SPierre-Louis Bossart 		.adr_d = rt1308_1_group1_adr,
150db0b9efbSRander Wang 	},
151db0b9efbSRander Wang 	{
152db0b9efbSRander Wang 		.mask = BIT(2),
153004bd416SPierre-Louis Bossart 		.num_adr = ARRAY_SIZE(rt1308_2_group1_adr),
154004bd416SPierre-Louis Bossart 		.adr_d = rt1308_2_group1_adr,
155db0b9efbSRander Wang 	},
156db0b9efbSRander Wang 	{
157db0b9efbSRander Wang 		.mask = BIT(3),
158db0b9efbSRander Wang 		.num_adr = ARRAY_SIZE(rt715_3_adr),
159004bd416SPierre-Louis Bossart 		.adr_d = rt715_3_adr,
160db0b9efbSRander Wang 	},
161db0b9efbSRander Wang 	{}
162db0b9efbSRander Wang };
163db0b9efbSRander Wang 
164db0b9efbSRander Wang static const struct snd_soc_acpi_link_adr cml_3_in_1_mono_amp[] = {
165db0b9efbSRander Wang 	{
166db0b9efbSRander Wang 		.mask = BIT(0),
167db0b9efbSRander Wang 		.num_adr = ARRAY_SIZE(rt711_0_adr),
168004bd416SPierre-Louis Bossart 		.adr_d = rt711_0_adr,
169db0b9efbSRander Wang 	},
170db0b9efbSRander Wang 	{
171db0b9efbSRander Wang 		.mask = BIT(1),
172db0b9efbSRander Wang 		.num_adr = ARRAY_SIZE(rt1308_1_adr),
173004bd416SPierre-Louis Bossart 		.adr_d = rt1308_1_adr,
174db0b9efbSRander Wang 	},
175db0b9efbSRander Wang 	{
176db0b9efbSRander Wang 		.mask = BIT(3),
177db0b9efbSRander Wang 		.num_adr = ARRAY_SIZE(rt715_3_adr),
178004bd416SPierre-Louis Bossart 		.adr_d = rt715_3_adr,
179db0b9efbSRander Wang 	},
180db0b9efbSRander Wang 	{}
181db0b9efbSRander Wang };
182db0b9efbSRander Wang 
183db0b9efbSRander Wang struct snd_soc_acpi_mach snd_soc_acpi_intel_cml_sdw_machines[] = {
184db0b9efbSRander Wang 	{
185db0b9efbSRander Wang 		.link_mask = 0xF, /* 4 active links required */
186db0b9efbSRander Wang 		.links = cml_3_in_1_default,
187ba762e67SRander Wang 		.drv_name = "sof_sdw",
188db0b9efbSRander Wang 		.sof_fw_filename = "sof-cml.ri",
189db0b9efbSRander Wang 		.sof_tplg_filename = "sof-cml-rt711-rt1308-rt715.tplg",
190db0b9efbSRander Wang 	},
191db0b9efbSRander Wang 	{
192db0b9efbSRander Wang 		/*
193db0b9efbSRander Wang 		 * link_mask should be 0xB, but all links are enabled by BIOS.
194db0b9efbSRander Wang 		 * This entry will be selected if there is no rt1308 exposed
195db0b9efbSRander Wang 		 * on link2 since it will fail to match the above entry.
196db0b9efbSRander Wang 		 */
197db0b9efbSRander Wang 		.link_mask = 0xF,
198db0b9efbSRander Wang 		.links = cml_3_in_1_mono_amp,
199ba762e67SRander Wang 		.drv_name = "sof_sdw",
200db0b9efbSRander Wang 		.sof_fw_filename = "sof-cml.ri",
201db0b9efbSRander Wang 		.sof_tplg_filename = "sof-cml-rt711-rt1308-mono-rt715.tplg",
202db0b9efbSRander Wang 	},
203db0b9efbSRander Wang 	{
204db0b9efbSRander Wang 		.link_mask = 0x2, /* RT700 connected on Link1 */
205ba762e67SRander Wang 		.links = cml_rvp,
206ba762e67SRander Wang 		.drv_name = "sof_sdw",
207db0b9efbSRander Wang 		.sof_fw_filename = "sof-cml.ri",
208db0b9efbSRander Wang 		.sof_tplg_filename = "sof-cml-rt700.tplg",
209db0b9efbSRander Wang 	},
210db0b9efbSRander Wang 	{}
211db0b9efbSRander Wang };
212db0b9efbSRander Wang EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_cml_sdw_machines);
213db0b9efbSRander Wang 
2141f24d93cSPierre-Louis Bossart MODULE_LICENSE("GPL v2");
2151f24d93cSPierre-Louis Bossart MODULE_DESCRIPTION("Intel Common ACPI Match module");
216