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

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