xref: /openbmc/linux/sound/soc/intel/common/soc-acpi-intel-icl-match.c (revision 7ae9fb1b7ecbb5d85d07857943f677fd1a559b18)
1e149ca29SPierre-Louis Bossart // SPDX-License-Identifier: GPL-2.0-only
29923e907SPierre-Louis Bossart /*
3e51b6980SChristophe JAILLET  * soc-acpi-intel-icl-match.c - tables and support for ICL ACPI enumeration.
49923e907SPierre-Louis Bossart  *
59923e907SPierre-Louis Bossart  * Copyright (c) 2018, Intel Corporation.
69923e907SPierre-Louis Bossart  *
79923e907SPierre-Louis Bossart  */
89923e907SPierre-Louis Bossart 
99923e907SPierre-Louis Bossart #include <sound/soc-acpi.h>
109923e907SPierre-Louis Bossart #include <sound/soc-acpi-intel-match.h>
119923e907SPierre-Louis Bossart #include "../skylake/skl.h"
129923e907SPierre-Louis Bossart 
13*9a1d248bSPierre-Louis Bossart static const struct snd_soc_acpi_codecs essx_83x6 = {
14*9a1d248bSPierre-Louis Bossart 	.num_codecs = 3,
15*9a1d248bSPierre-Louis Bossart 	.codecs = { "ESSX8316", "ESSX8326", "ESSX8336"},
16*9a1d248bSPierre-Louis Bossart };
17*9a1d248bSPierre-Louis Bossart 
189923e907SPierre-Louis Bossart static struct skl_machine_pdata icl_pdata = {
199923e907SPierre-Louis Bossart 	.use_tplg_pcm = true,
209923e907SPierre-Louis Bossart };
219923e907SPierre-Louis Bossart 
229923e907SPierre-Louis Bossart struct snd_soc_acpi_mach snd_soc_acpi_intel_icl_machines[] = {
239923e907SPierre-Louis Bossart 	{
249923e907SPierre-Louis Bossart 		.id = "INT34C2",
259923e907SPierre-Louis Bossart 		.drv_name = "icl_rt274",
269923e907SPierre-Louis Bossart 		.fw_filename = "intel/dsp_fw_icl.bin",
279923e907SPierre-Louis Bossart 		.pdata = &icl_pdata,
28a5b1e228SPierre-Louis Bossart 		.sof_tplg_filename = "sof-icl-rt274.tplg",
299923e907SPierre-Louis Bossart 	},
30f70abd75SBard liao 	{
31f70abd75SBard liao 		.id = "10EC5682",
32f70abd75SBard liao 		.drv_name = "sof_rt5682",
33f70abd75SBard liao 		.sof_tplg_filename = "sof-icl-rt5682.tplg",
34f70abd75SBard liao 	},
35*9a1d248bSPierre-Louis Bossart 	{
36*9a1d248bSPierre-Louis Bossart 		.comp_ids = &essx_83x6,
37*9a1d248bSPierre-Louis Bossart 		.drv_name = "sof-essx8336",
38*9a1d248bSPierre-Louis Bossart 		.sof_tplg_filename = "sof-icl-es8336", /* the tplg suffix is added at run time */
39*9a1d248bSPierre-Louis Bossart 		.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_SSP_NUMBER |
40*9a1d248bSPierre-Louis Bossart 					SND_SOC_ACPI_TPLG_INTEL_SSP_MSB |
41*9a1d248bSPierre-Louis Bossart 					SND_SOC_ACPI_TPLG_INTEL_DMIC_NUMBER,
42*9a1d248bSPierre-Louis Bossart 	},
439923e907SPierre-Louis Bossart 	{},
449923e907SPierre-Louis Bossart };
459923e907SPierre-Louis Bossart EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_icl_machines);
469923e907SPierre-Louis Bossart 
47004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_endpoint single_endpoint = {
48004bd416SPierre-Louis Bossart 	.num = 0,
49004bd416SPierre-Louis Bossart 	.aggregated = 0,
50004bd416SPierre-Louis Bossart 	.group_position = 0,
51004bd416SPierre-Louis Bossart 	.group_id = 0,
52004bd416SPierre-Louis Bossart };
53004bd416SPierre-Louis Bossart 
54004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_endpoint spk_l_endpoint = {
55004bd416SPierre-Louis Bossart 	.num = 0,
56004bd416SPierre-Louis Bossart 	.aggregated = 1,
57004bd416SPierre-Louis Bossart 	.group_position = 0,
58004bd416SPierre-Louis Bossart 	.group_id = 1,
59004bd416SPierre-Louis Bossart };
60004bd416SPierre-Louis Bossart 
61004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_endpoint spk_r_endpoint = {
62004bd416SPierre-Louis Bossart 	.num = 0,
63004bd416SPierre-Louis Bossart 	.aggregated = 1,
64004bd416SPierre-Louis Bossart 	.group_position = 1,
65004bd416SPierre-Louis Bossart 	.group_id = 1,
66004bd416SPierre-Louis Bossart };
67004bd416SPierre-Louis Bossart 
68004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt700_0_adr[] = {
69004bd416SPierre-Louis Bossart 	{
700c52d3e2SPierre-Louis Bossart 		.adr = 0x000010025D070000ull,
71004bd416SPierre-Louis Bossart 		.num_endpoints = 1,
72004bd416SPierre-Louis Bossart 		.endpoints = &single_endpoint,
73f9380830SPierre-Louis Bossart 		.name_prefix = "rt700"
74004bd416SPierre-Louis Bossart 	}
754313dd3eSBard Liao };
764313dd3eSBard Liao 
774313dd3eSBard Liao static const struct snd_soc_acpi_link_adr icl_rvp[] = {
784313dd3eSBard Liao 	{
794313dd3eSBard Liao 		.mask = BIT(0),
804313dd3eSBard Liao 		.num_adr = ARRAY_SIZE(rt700_0_adr),
81004bd416SPierre-Louis Bossart 		.adr_d = rt700_0_adr,
824313dd3eSBard Liao 	},
834313dd3eSBard Liao 	{}
844313dd3eSBard Liao };
854313dd3eSBard Liao 
86004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt711_0_adr[] = {
87004bd416SPierre-Louis Bossart 	{
880c52d3e2SPierre-Louis Bossart 		.adr = 0x000020025D071100ull,
89004bd416SPierre-Louis Bossart 		.num_endpoints = 1,
90004bd416SPierre-Louis Bossart 		.endpoints = &single_endpoint,
91f9380830SPierre-Louis Bossart 		.name_prefix = "rt711"
92004bd416SPierre-Louis Bossart 	}
934313dd3eSBard Liao };
944313dd3eSBard Liao 
95004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt1308_1_adr[] = {
96004bd416SPierre-Louis Bossart 	{
970c52d3e2SPierre-Louis Bossart 		.adr = 0x000120025D130800ull,
98004bd416SPierre-Louis Bossart 		.num_endpoints = 1,
99004bd416SPierre-Louis Bossart 		.endpoints = &single_endpoint,
100f9380830SPierre-Louis Bossart 		.name_prefix = "rt1308-1"
101004bd416SPierre-Louis Bossart 	}
1024313dd3eSBard Liao };
1034313dd3eSBard Liao 
104004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt1308_1_group1_adr[] = {
105004bd416SPierre-Louis Bossart 	{
1060c52d3e2SPierre-Louis Bossart 		.adr = 0x000120025D130800ull,
107004bd416SPierre-Louis Bossart 		.num_endpoints = 1,
108004bd416SPierre-Louis Bossart 		.endpoints = &spk_l_endpoint,
109f9380830SPierre-Louis Bossart 		.name_prefix = "rt1308-1"
110004bd416SPierre-Louis Bossart 	}
111004bd416SPierre-Louis Bossart };
112004bd416SPierre-Louis Bossart 
113004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt1308_2_group1_adr[] = {
114004bd416SPierre-Louis Bossart 	{
1150c52d3e2SPierre-Louis Bossart 		.adr = 0x000220025D130800ull,
116004bd416SPierre-Louis Bossart 		.num_endpoints = 1,
117004bd416SPierre-Louis Bossart 		.endpoints = &spk_r_endpoint,
118f9380830SPierre-Louis Bossart 		.name_prefix = "rt1308-2"
119004bd416SPierre-Louis Bossart 	}
120004bd416SPierre-Louis Bossart };
121004bd416SPierre-Louis Bossart 
122004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt715_3_adr[] = {
123004bd416SPierre-Louis Bossart 	{
1240c52d3e2SPierre-Louis Bossart 		.adr = 0x000320025D071500ull,
125004bd416SPierre-Louis Bossart 		.num_endpoints = 1,
126004bd416SPierre-Louis Bossart 		.endpoints = &single_endpoint,
127f9380830SPierre-Louis Bossart 		.name_prefix = "rt715"
128004bd416SPierre-Louis Bossart 	}
1294313dd3eSBard Liao };
1304313dd3eSBard Liao 
1314313dd3eSBard Liao static const struct snd_soc_acpi_link_adr icl_3_in_1_default[] = {
1324313dd3eSBard Liao 	{
1334313dd3eSBard Liao 		.mask = BIT(0),
1344313dd3eSBard Liao 		.num_adr = ARRAY_SIZE(rt711_0_adr),
135004bd416SPierre-Louis Bossart 		.adr_d = rt711_0_adr,
1364313dd3eSBard Liao 	},
1374313dd3eSBard Liao 	{
1384313dd3eSBard Liao 		.mask = BIT(1),
139004bd416SPierre-Louis Bossart 		.num_adr = ARRAY_SIZE(rt1308_1_group1_adr),
140004bd416SPierre-Louis Bossart 		.adr_d = rt1308_1_group1_adr,
1414313dd3eSBard Liao 	},
1424313dd3eSBard Liao 	{
1434313dd3eSBard Liao 		.mask = BIT(2),
144004bd416SPierre-Louis Bossart 		.num_adr = ARRAY_SIZE(rt1308_2_group1_adr),
145004bd416SPierre-Louis Bossart 		.adr_d = rt1308_2_group1_adr,
1464313dd3eSBard Liao 	},
1474313dd3eSBard Liao 	{
1484313dd3eSBard Liao 		.mask = BIT(3),
1494313dd3eSBard Liao 		.num_adr = ARRAY_SIZE(rt715_3_adr),
150004bd416SPierre-Louis Bossart 		.adr_d = rt715_3_adr,
1514313dd3eSBard Liao 	},
1524313dd3eSBard Liao 	{}
1534313dd3eSBard Liao };
1544313dd3eSBard Liao 
1554313dd3eSBard Liao static const struct snd_soc_acpi_link_adr icl_3_in_1_mono_amp[] = {
1564313dd3eSBard Liao 	{
1574313dd3eSBard Liao 		.mask = BIT(0),
1584313dd3eSBard Liao 		.num_adr = ARRAY_SIZE(rt711_0_adr),
159004bd416SPierre-Louis Bossart 		.adr_d = rt711_0_adr,
1604313dd3eSBard Liao 	},
1614313dd3eSBard Liao 	{
1624313dd3eSBard Liao 		.mask = BIT(1),
1634313dd3eSBard Liao 		.num_adr = ARRAY_SIZE(rt1308_1_adr),
164004bd416SPierre-Louis Bossart 		.adr_d = rt1308_1_adr,
1654313dd3eSBard Liao 	},
1664313dd3eSBard Liao 	{
1674313dd3eSBard Liao 		.mask = BIT(3),
1684313dd3eSBard Liao 		.num_adr = ARRAY_SIZE(rt715_3_adr),
169004bd416SPierre-Louis Bossart 		.adr_d = rt715_3_adr,
1704313dd3eSBard Liao 	},
1714313dd3eSBard Liao 	{}
1724313dd3eSBard Liao };
1734313dd3eSBard Liao 
1744313dd3eSBard Liao struct snd_soc_acpi_mach snd_soc_acpi_intel_icl_sdw_machines[] = {
1754313dd3eSBard Liao 	{
1764313dd3eSBard Liao 		.link_mask = 0xF, /* 4 active links required */
1774313dd3eSBard Liao 		.links = icl_3_in_1_default,
178ba762e67SRander Wang 		.drv_name = "sof_sdw",
1794313dd3eSBard Liao 		.sof_tplg_filename = "sof-icl-rt711-rt1308-rt715.tplg",
1804313dd3eSBard Liao 	},
1814313dd3eSBard Liao 	{
1824313dd3eSBard Liao 		.link_mask = 0xB, /* 3 active links required */
1834313dd3eSBard Liao 		.links = icl_3_in_1_mono_amp,
184ba762e67SRander Wang 		.drv_name = "sof_sdw",
1854313dd3eSBard Liao 		.sof_tplg_filename = "sof-icl-rt711-rt1308-rt715-mono.tplg",
1864313dd3eSBard Liao 	},
1874313dd3eSBard Liao 	{
1884313dd3eSBard Liao 		.link_mask = 0x1, /* rt700 connected on link0 */
1894313dd3eSBard Liao 		.links = icl_rvp,
190ba762e67SRander Wang 		.drv_name = "sof_sdw",
1914313dd3eSBard Liao 		.sof_tplg_filename = "sof-icl-rt700.tplg",
1924313dd3eSBard Liao 	},
1934313dd3eSBard Liao 	{},
1944313dd3eSBard Liao };
1954313dd3eSBard Liao EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_icl_sdw_machines);
196