1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * amd-acp70-acpi-match.c - tables and support for ACP 7.0 & ACP7.1 4 * ACPI enumeration. 5 * 6 * Copyright 2025 Advanced Micro Devices, Inc. 7 */ 8 9 #include <sound/soc-acpi.h> 10 #include "../mach-config.h" 11 12 static const struct snd_soc_acpi_endpoint single_endpoint = { 13 .num = 0, 14 .aggregated = 0, 15 .group_position = 0, 16 .group_id = 0 17 }; 18 19 static const struct snd_soc_acpi_endpoint spk_l_endpoint = { 20 .num = 0, 21 .aggregated = 1, 22 .group_position = 0, 23 .group_id = 1 24 }; 25 26 static const struct snd_soc_acpi_endpoint spk_r_endpoint = { 27 .num = 0, 28 .aggregated = 1, 29 .group_position = 1, 30 .group_id = 1 31 }; 32 33 static const struct snd_soc_acpi_endpoint spk_2_endpoint = { 34 .num = 0, 35 .aggregated = 1, 36 .group_position = 2, 37 .group_id = 1 38 }; 39 40 static const struct snd_soc_acpi_endpoint spk_3_endpoint = { 41 .num = 0, 42 .aggregated = 1, 43 .group_position = 3, 44 .group_id = 1 45 }; 46 47 static const struct snd_soc_acpi_adr_device rt711_rt1316_group_adr[] = { 48 { 49 .adr = 0x000030025D071101ull, 50 .num_endpoints = 1, 51 .endpoints = &single_endpoint, 52 .name_prefix = "rt711" 53 }, 54 { 55 .adr = 0x000030025D131601ull, 56 .num_endpoints = 1, 57 .endpoints = &spk_l_endpoint, 58 .name_prefix = "rt1316-1" 59 }, 60 { 61 .adr = 0x000032025D131601ull, 62 .num_endpoints = 1, 63 .endpoints = &spk_r_endpoint, 64 .name_prefix = "rt1316-2" 65 }, 66 }; 67 68 static const struct snd_soc_acpi_adr_device rt714_adr[] = { 69 { 70 .adr = 0x130025d071401ull, 71 .num_endpoints = 1, 72 .endpoints = &single_endpoint, 73 .name_prefix = "rt714" 74 } 75 }; 76 77 static const struct snd_soc_acpi_link_adr acp70_4_in_1_sdca[] = { 78 { .mask = BIT(0), 79 .num_adr = ARRAY_SIZE(rt711_rt1316_group_adr), 80 .adr_d = rt711_rt1316_group_adr, 81 }, 82 { 83 .mask = BIT(1), 84 .num_adr = ARRAY_SIZE(rt714_adr), 85 .adr_d = rt714_adr, 86 }, 87 {} 88 }; 89 90 static const struct snd_soc_acpi_endpoint rt722_endpoints[] = { 91 { 92 .num = 0, 93 .aggregated = 0, 94 .group_position = 0, 95 .group_id = 0, 96 }, 97 { 98 .num = 1, 99 .aggregated = 0, 100 .group_position = 0, 101 .group_id = 0, 102 }, 103 { 104 .num = 2, 105 .aggregated = 0, 106 .group_position = 0, 107 .group_id = 0, 108 }, 109 }; 110 111 static const struct snd_soc_acpi_adr_device rt722_0_single_adr[] = { 112 { 113 .adr = 0x000030025d072201ull, 114 .num_endpoints = ARRAY_SIZE(rt722_endpoints), 115 .endpoints = rt722_endpoints, 116 .name_prefix = "rt722" 117 } 118 }; 119 120 static const struct snd_soc_acpi_adr_device rt1320_1_single_adr[] = { 121 { 122 .adr = 0x000130025D132001ull, 123 .num_endpoints = 1, 124 .endpoints = &single_endpoint, 125 .name_prefix = "rt1320-1" 126 } 127 }; 128 129 static const struct snd_soc_acpi_endpoint cs42l43_endpoints[] = { 130 { /* Jack Playback Endpoint */ 131 .num = 0, 132 .aggregated = 0, 133 .group_position = 0, 134 .group_id = 0, 135 }, 136 { /* DMIC Capture Endpoint */ 137 .num = 1, 138 .aggregated = 0, 139 .group_position = 0, 140 .group_id = 0, 141 }, 142 { /* Jack Capture Endpoint */ 143 .num = 2, 144 .aggregated = 0, 145 .group_position = 0, 146 .group_id = 0, 147 }, 148 { /* Speaker Playback Endpoint */ 149 .num = 3, 150 .aggregated = 0, 151 .group_position = 0, 152 .group_id = 0, 153 }, 154 }; 155 156 static const struct snd_soc_acpi_adr_device cs42l43_0_adr[] = { 157 { 158 .adr = 0x00003001FA424301ull, 159 .num_endpoints = ARRAY_SIZE(cs42l43_endpoints), 160 .endpoints = cs42l43_endpoints, 161 .name_prefix = "cs42l43" 162 } 163 }; 164 165 static const struct snd_soc_acpi_adr_device cs42l43_1_cs35l56x4_1_adr[] = { 166 { 167 .adr = 0x00013001FA424301ull, 168 .num_endpoints = ARRAY_SIZE(cs42l43_endpoints), 169 .endpoints = cs42l43_endpoints, 170 .name_prefix = "cs42l43" 171 }, 172 { 173 .adr = 0x00013001FA355601ull, 174 .num_endpoints = 1, 175 .endpoints = &spk_l_endpoint, 176 .name_prefix = "AMP1" 177 }, 178 { 179 .adr = 0x00013101FA355601ull, 180 .num_endpoints = 1, 181 .endpoints = &spk_r_endpoint, 182 .name_prefix = "AMP2" 183 }, 184 { 185 .adr = 0x00013201FA355601ull, 186 .num_endpoints = 1, 187 .endpoints = &spk_2_endpoint, 188 .name_prefix = "AMP3" 189 }, 190 { 191 .adr = 0x00013301FA355601ull, 192 .num_endpoints = 1, 193 .endpoints = &spk_3_endpoint, 194 .name_prefix = "AMP4" 195 }, 196 }; 197 198 static const struct snd_soc_acpi_adr_device cs35l56x4_1_adr[] = { 199 { 200 .adr = 0x00013301FA355601ull, 201 .num_endpoints = 1, 202 .endpoints = &spk_l_endpoint, 203 .name_prefix = "AMP1" 204 }, 205 { 206 .adr = 0x00013201FA355601ull, 207 .num_endpoints = 1, 208 .endpoints = &spk_r_endpoint, 209 .name_prefix = "AMP2" 210 }, 211 { 212 .adr = 0x00013101FA355601ull, 213 .num_endpoints = 1, 214 .endpoints = &spk_2_endpoint, 215 .name_prefix = "AMP3" 216 }, 217 { 218 .adr = 0x00013001FA355601ull, 219 .num_endpoints = 1, 220 .endpoints = &spk_3_endpoint, 221 .name_prefix = "AMP4" 222 }, 223 }; 224 225 static const struct snd_soc_acpi_link_adr acp70_cs42l43_l1_cs35l56x4_l1[] = { 226 { 227 .mask = BIT(1), 228 .num_adr = ARRAY_SIZE(cs42l43_1_cs35l56x4_1_adr), 229 .adr_d = cs42l43_1_cs35l56x4_1_adr, 230 }, 231 {} 232 }; 233 234 static const struct snd_soc_acpi_link_adr acp70_cs42l43_l0_cs35l56x4_l1[] = { 235 { 236 .mask = BIT(0), 237 .num_adr = ARRAY_SIZE(cs42l43_0_adr), 238 .adr_d = cs42l43_0_adr, 239 }, 240 { 241 .mask = BIT(1), 242 .num_adr = ARRAY_SIZE(cs35l56x4_1_adr), 243 .adr_d = cs35l56x4_1_adr, 244 }, 245 {} 246 }; 247 248 static const struct snd_soc_acpi_link_adr acp70_cs35l56x4_l1[] = { 249 { 250 .mask = BIT(1), 251 .num_adr = ARRAY_SIZE(cs35l56x4_1_adr), 252 .adr_d = cs35l56x4_1_adr, 253 }, 254 {} 255 }; 256 257 static const struct snd_soc_acpi_link_adr acp70_rt722_only[] = { 258 { 259 .mask = BIT(0), 260 .num_adr = ARRAY_SIZE(rt722_0_single_adr), 261 .adr_d = rt722_0_single_adr, 262 }, 263 {} 264 }; 265 266 static const struct snd_soc_acpi_link_adr acp70_rt722_l0_rt1320_l1[] = { 267 { 268 .mask = BIT(0), 269 .num_adr = ARRAY_SIZE(rt722_0_single_adr), 270 .adr_d = rt722_0_single_adr, 271 }, 272 { 273 .mask = BIT(1), 274 .num_adr = ARRAY_SIZE(rt1320_1_single_adr), 275 .adr_d = rt1320_1_single_adr, 276 }, 277 {} 278 }; 279 280 struct snd_soc_acpi_mach snd_soc_acpi_amd_acp70_sdw_machines[] = { 281 { 282 .link_mask = BIT(0) | BIT(1), 283 .links = acp70_rt722_l0_rt1320_l1, 284 .drv_name = "amd_sdw", 285 }, 286 { 287 .link_mask = BIT(0), 288 .links = acp70_rt722_only, 289 .drv_name = "amd_sdw", 290 }, 291 { 292 .link_mask = BIT(0) | BIT(1), 293 .links = acp70_4_in_1_sdca, 294 .drv_name = "amd_sdw", 295 }, 296 { 297 .link_mask = BIT(0) | BIT(1), 298 .links = acp70_cs42l43_l0_cs35l56x4_l1, 299 .drv_name = "amd_sdw", 300 }, 301 { 302 .link_mask = BIT(1), 303 .links = acp70_cs42l43_l1_cs35l56x4_l1, 304 .drv_name = "amd_sdw", 305 }, 306 { 307 .link_mask = BIT(1), 308 .links = acp70_cs35l56x4_l1, 309 .drv_name = "amd_sdw", 310 }, 311 {}, 312 }; 313 EXPORT_SYMBOL(snd_soc_acpi_amd_acp70_sdw_machines); 314 315 struct snd_soc_acpi_mach snd_soc_acpi_amd_acp70_sof_sdw_machines[] = { 316 { 317 .link_mask = BIT(0), 318 .links = acp70_rt722_only, 319 .drv_name = "amd_sof_sdw", 320 .sof_tplg_filename = "sof-acp_7_0-rt722-l0.tplg", 321 .fw_filename = "sof-acp_7_0.ri", 322 }, 323 {}, 324 }; 325 EXPORT_SYMBOL(snd_soc_acpi_amd_acp70_sof_sdw_machines); 326 327 MODULE_DESCRIPTION("AMD ACP7.0 & ACP7.1 tables and support for ACPI enumeration"); 328 MODULE_LICENSE("GPL"); 329 MODULE_AUTHOR("Vijendar.Mukunda@amd.com"); 330