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

source code of linux/sound/soc/intel/common/soc-acpi-intel-icl-match.c