1 // SPDX-License-Identifier: GPL-2.0-only 1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 2 /* 3 * soc-apci-intel-adl-match.c - tables and sup 3 * soc-apci-intel-adl-match.c - tables and support for ADL ACPI enumeration. 4 * 4 * 5 * Copyright (c) 2020, Intel Corporation. 5 * Copyright (c) 2020, Intel Corporation. 6 */ 6 */ 7 7 8 #include <sound/soc-acpi.h> 8 #include <sound/soc-acpi.h> 9 #include <sound/soc-acpi-intel-match.h> 9 #include <sound/soc-acpi-intel-match.h> 10 #include <sound/soc-acpi-intel-ssp-common.h> << 11 10 12 static const struct snd_soc_acpi_codecs essx_8 11 static const struct snd_soc_acpi_codecs essx_83x6 = { 13 .num_codecs = 3, 12 .num_codecs = 3, 14 .codecs = { "ESSX8316", "ESSX8326", "E 13 .codecs = { "ESSX8316", "ESSX8326", "ESSX8336"}, 15 }; 14 }; 16 15 17 static const struct snd_soc_acpi_endpoint sing 16 static const struct snd_soc_acpi_endpoint single_endpoint = { 18 .num = 0, 17 .num = 0, 19 .aggregated = 0, 18 .aggregated = 0, 20 .group_position = 0, 19 .group_position = 0, 21 .group_id = 0, 20 .group_id = 0, 22 }; 21 }; 23 22 24 static const struct snd_soc_acpi_endpoint spk_ 23 static const struct snd_soc_acpi_endpoint spk_l_endpoint = { 25 .num = 0, 24 .num = 0, 26 .aggregated = 1, 25 .aggregated = 1, 27 .group_position = 0, 26 .group_position = 0, 28 .group_id = 1, 27 .group_id = 1, 29 }; 28 }; 30 29 31 static const struct snd_soc_acpi_endpoint spk_ 30 static const struct snd_soc_acpi_endpoint spk_r_endpoint = { 32 .num = 0, 31 .num = 0, 33 .aggregated = 1, 32 .aggregated = 1, 34 .group_position = 1, 33 .group_position = 1, 35 .group_id = 1, 34 .group_id = 1, 36 }; 35 }; 37 36 38 static const struct snd_soc_acpi_endpoint spk_ << 39 .num = 0, << 40 .aggregated = 1, << 41 .group_position = 2, << 42 .group_id = 1, << 43 }; << 44 << 45 static const struct snd_soc_acpi_endpoint spk_ << 46 .num = 0, << 47 .aggregated = 1, << 48 .group_position = 3, << 49 .group_id = 1, << 50 }; << 51 << 52 static const struct snd_soc_acpi_adr_device cs << 53 { << 54 .adr = 0x00023201FA355601ull, << 55 .num_endpoints = 1, << 56 .endpoints = &spk_r_endpoint, << 57 .name_prefix = "AMP3" << 58 }, << 59 { << 60 .adr = 0x00023301FA355601ull, << 61 .num_endpoints = 1, << 62 .endpoints = &spk_3_endpoint, << 63 .name_prefix = "AMP4" << 64 } << 65 }; << 66 << 67 static const struct snd_soc_acpi_adr_device cs << 68 { << 69 .adr = 0x00033001fa355601ull, << 70 .num_endpoints = 1, << 71 .endpoints = &spk_l_endpoint, << 72 .name_prefix = "AMP1" << 73 }, << 74 { << 75 .adr = 0x00033101fa355601ull, << 76 .num_endpoints = 1, << 77 .endpoints = &spk_2_endpoint, << 78 .name_prefix = "AMP2" << 79 } << 80 }; << 81 << 82 static const struct snd_soc_acpi_endpoint cs42 << 83 { /* Jack Playback Endpoint */ << 84 .num = 0, << 85 .aggregated = 0, << 86 .group_position = 0, << 87 .group_id = 0, << 88 }, << 89 { /* DMIC Capture Endpoint */ << 90 .num = 1, << 91 .aggregated = 0, << 92 .group_position = 0, << 93 .group_id = 0, << 94 }, << 95 { /* Jack Capture Endpoint */ << 96 .num = 2, << 97 .aggregated = 0, << 98 .group_position = 0, << 99 .group_id = 0, << 100 }, << 101 { /* Speaker Playback Endpoint */ << 102 .num = 3, << 103 .aggregated = 0, << 104 .group_position = 0, << 105 .group_id = 0, << 106 }, << 107 }; << 108 << 109 static const struct snd_soc_acpi_adr_device cs << 110 { << 111 .adr = 0x00003001FA424301ull, << 112 .num_endpoints = ARRAY_SIZE(cs << 113 .endpoints = cs42l43_endpoints << 114 .name_prefix = "cs42l43" << 115 } << 116 }; << 117 << 118 static const struct snd_soc_acpi_adr_device rt 37 static const struct snd_soc_acpi_adr_device rt711_0_adr[] = { 119 { 38 { 120 .adr = 0x000020025D071100ull, 39 .adr = 0x000020025D071100ull, 121 .num_endpoints = 1, 40 .num_endpoints = 1, 122 .endpoints = &single_endpoint, 41 .endpoints = &single_endpoint, 123 .name_prefix = "rt711" 42 .name_prefix = "rt711" 124 } 43 } 125 }; 44 }; 126 45 127 static const struct snd_soc_acpi_adr_device rt 46 static const struct snd_soc_acpi_adr_device rt1308_1_group1_adr[] = { 128 { 47 { 129 .adr = 0x000120025D130800ull, 48 .adr = 0x000120025D130800ull, 130 .num_endpoints = 1, 49 .num_endpoints = 1, 131 .endpoints = &spk_l_endpoint, 50 .endpoints = &spk_l_endpoint, 132 .name_prefix = "rt1308-1" 51 .name_prefix = "rt1308-1" 133 } 52 } 134 }; 53 }; 135 54 136 static const struct snd_soc_acpi_adr_device rt 55 static const struct snd_soc_acpi_adr_device rt1308_2_group1_adr[] = { 137 { 56 { 138 .adr = 0x000220025D130800ull, 57 .adr = 0x000220025D130800ull, 139 .num_endpoints = 1, 58 .num_endpoints = 1, 140 .endpoints = &spk_r_endpoint, 59 .endpoints = &spk_r_endpoint, 141 .name_prefix = "rt1308-2" 60 .name_prefix = "rt1308-2" 142 } 61 } 143 }; 62 }; 144 63 145 static const struct snd_soc_acpi_adr_device rt 64 static const struct snd_soc_acpi_adr_device rt715_3_adr[] = { 146 { 65 { 147 .adr = 0x000320025D071500ull, 66 .adr = 0x000320025D071500ull, 148 .num_endpoints = 1, 67 .num_endpoints = 1, 149 .endpoints = &single_endpoint, 68 .endpoints = &single_endpoint, 150 .name_prefix = "rt715" 69 .name_prefix = "rt715" 151 } 70 } 152 }; 71 }; 153 72 154 static const struct snd_soc_acpi_adr_device rt 73 static const struct snd_soc_acpi_adr_device rt711_sdca_0_adr[] = { 155 { 74 { 156 .adr = 0x000030025D071101ull, 75 .adr = 0x000030025D071101ull, 157 .num_endpoints = 1, 76 .num_endpoints = 1, 158 .endpoints = &single_endpoint, 77 .endpoints = &single_endpoint, 159 .name_prefix = "rt711" 78 .name_prefix = "rt711" 160 } 79 } 161 }; 80 }; 162 81 163 static const struct snd_soc_acpi_adr_device rt 82 static const struct snd_soc_acpi_adr_device rt711_sdca_2_adr[] = { 164 { 83 { 165 .adr = 0x000230025D071101ull, 84 .adr = 0x000230025D071101ull, 166 .num_endpoints = 1, 85 .num_endpoints = 1, 167 .endpoints = &single_endpoint, 86 .endpoints = &single_endpoint, 168 .name_prefix = "rt711" 87 .name_prefix = "rt711" 169 } 88 } 170 }; 89 }; 171 90 172 static const struct snd_soc_acpi_adr_device rt 91 static const struct snd_soc_acpi_adr_device rt1316_1_group1_adr[] = { 173 { 92 { 174 .adr = 0x000131025D131601ull, 93 .adr = 0x000131025D131601ull, /* unique ID is set for some reason */ 175 .num_endpoints = 1, 94 .num_endpoints = 1, 176 .endpoints = &spk_l_endpoint, 95 .endpoints = &spk_l_endpoint, 177 .name_prefix = "rt1316-1" 96 .name_prefix = "rt1316-1" 178 } 97 } 179 }; 98 }; 180 99 181 static const struct snd_soc_acpi_adr_device rt 100 static const struct snd_soc_acpi_adr_device rt1316_2_group1_adr[] = { 182 { 101 { 183 .adr = 0x000230025D131601ull, 102 .adr = 0x000230025D131601ull, 184 .num_endpoints = 1, 103 .num_endpoints = 1, 185 .endpoints = &spk_r_endpoint, 104 .endpoints = &spk_r_endpoint, 186 .name_prefix = "rt1316-2" 105 .name_prefix = "rt1316-2" 187 } 106 } 188 }; 107 }; 189 108 190 static const struct snd_soc_acpi_adr_device rt 109 static const struct snd_soc_acpi_adr_device rt1316_3_group1_adr[] = { 191 { 110 { 192 .adr = 0x000330025D131601ull, 111 .adr = 0x000330025D131601ull, 193 .num_endpoints = 1, 112 .num_endpoints = 1, 194 .endpoints = &spk_r_endpoint, 113 .endpoints = &spk_r_endpoint, 195 .name_prefix = "rt1316-2" 114 .name_prefix = "rt1316-2" 196 } 115 } 197 }; 116 }; 198 117 199 static const struct snd_soc_acpi_adr_device rt 118 static const struct snd_soc_acpi_adr_device rt1316_0_group2_adr[] = { 200 { 119 { 201 .adr = 0x000031025D131601ull, 120 .adr = 0x000031025D131601ull, 202 .num_endpoints = 1, 121 .num_endpoints = 1, 203 .endpoints = &spk_l_endpoint, 122 .endpoints = &spk_l_endpoint, 204 .name_prefix = "rt1316-1" 123 .name_prefix = "rt1316-1" 205 } 124 } 206 }; 125 }; 207 126 208 static const struct snd_soc_acpi_adr_device rt 127 static const struct snd_soc_acpi_adr_device rt1316_1_group2_adr[] = { 209 { 128 { 210 .adr = 0x000130025D131601ull, 129 .adr = 0x000130025D131601ull, 211 .num_endpoints = 1, 130 .num_endpoints = 1, 212 .endpoints = &spk_r_endpoint, 131 .endpoints = &spk_r_endpoint, 213 .name_prefix = "rt1316-2" 132 .name_prefix = "rt1316-2" 214 } 133 } 215 }; 134 }; 216 135 217 static const struct snd_soc_acpi_adr_device rt << 218 { << 219 .adr = 0x000130025D131601ull, << 220 .num_endpoints = 1, << 221 .endpoints = &single_endpoint, << 222 .name_prefix = "rt1316-1" << 223 } << 224 }; << 225 << 226 static const struct snd_soc_acpi_adr_device rt 136 static const struct snd_soc_acpi_adr_device rt1316_2_single_adr[] = { 227 { 137 { 228 .adr = 0x000230025D131601ull, 138 .adr = 0x000230025D131601ull, 229 .num_endpoints = 1, 139 .num_endpoints = 1, 230 .endpoints = &single_endpoint, 140 .endpoints = &single_endpoint, 231 .name_prefix = "rt1316-1" 141 .name_prefix = "rt1316-1" 232 } 142 } 233 }; 143 }; 234 144 235 static const struct snd_soc_acpi_adr_device rt 145 static const struct snd_soc_acpi_adr_device rt1316_3_single_adr[] = { 236 { 146 { 237 .adr = 0x000330025D131601ull, 147 .adr = 0x000330025D131601ull, 238 .num_endpoints = 1, 148 .num_endpoints = 1, 239 .endpoints = &single_endpoint, 149 .endpoints = &single_endpoint, 240 .name_prefix = "rt1316-1" 150 .name_prefix = "rt1316-1" 241 } 151 } 242 }; 152 }; 243 153 244 static const struct snd_soc_acpi_adr_device rt 154 static const struct snd_soc_acpi_adr_device rt714_0_adr[] = { 245 { 155 { 246 .adr = 0x000030025D071401ull, 156 .adr = 0x000030025D071401ull, 247 .num_endpoints = 1, 157 .num_endpoints = 1, 248 .endpoints = &single_endpoint, 158 .endpoints = &single_endpoint, 249 .name_prefix = "rt714" 159 .name_prefix = "rt714" 250 } 160 } 251 }; 161 }; 252 162 253 static const struct snd_soc_acpi_adr_device rt 163 static const struct snd_soc_acpi_adr_device rt714_2_adr[] = { 254 { 164 { 255 .adr = 0x000230025D071401ull, 165 .adr = 0x000230025D071401ull, 256 .num_endpoints = 1, 166 .num_endpoints = 1, 257 .endpoints = &single_endpoint, 167 .endpoints = &single_endpoint, 258 .name_prefix = "rt714" 168 .name_prefix = "rt714" 259 } 169 } 260 }; 170 }; 261 171 262 static const struct snd_soc_acpi_adr_device rt 172 static const struct snd_soc_acpi_adr_device rt714_3_adr[] = { 263 { 173 { 264 .adr = 0x000330025D071401ull, 174 .adr = 0x000330025D071401ull, 265 .num_endpoints = 1, 175 .num_endpoints = 1, 266 .endpoints = &single_endpoint, 176 .endpoints = &single_endpoint, 267 .name_prefix = "rt714" 177 .name_prefix = "rt714" 268 } 178 } 269 }; 179 }; 270 180 271 static const struct snd_soc_acpi_link_adr adl_ 181 static const struct snd_soc_acpi_link_adr adl_default[] = { 272 { 182 { 273 .mask = BIT(0), 183 .mask = BIT(0), 274 .num_adr = ARRAY_SIZE(rt711_0_ 184 .num_adr = ARRAY_SIZE(rt711_0_adr), 275 .adr_d = rt711_0_adr, 185 .adr_d = rt711_0_adr, 276 }, 186 }, 277 { 187 { 278 .mask = BIT(1), 188 .mask = BIT(1), 279 .num_adr = ARRAY_SIZE(rt1308_1 189 .num_adr = ARRAY_SIZE(rt1308_1_group1_adr), 280 .adr_d = rt1308_1_group1_adr, 190 .adr_d = rt1308_1_group1_adr, 281 }, 191 }, 282 { 192 { 283 .mask = BIT(2), 193 .mask = BIT(2), 284 .num_adr = ARRAY_SIZE(rt1308_2 194 .num_adr = ARRAY_SIZE(rt1308_2_group1_adr), 285 .adr_d = rt1308_2_group1_adr, 195 .adr_d = rt1308_2_group1_adr, 286 }, 196 }, 287 { 197 { 288 .mask = BIT(3), 198 .mask = BIT(3), 289 .num_adr = ARRAY_SIZE(rt715_3_ 199 .num_adr = ARRAY_SIZE(rt715_3_adr), 290 .adr_d = rt715_3_adr, 200 .adr_d = rt715_3_adr, 291 }, 201 }, 292 {} 202 {} 293 }; 203 }; 294 204 295 static const struct snd_soc_acpi_link_adr adl_ 205 static const struct snd_soc_acpi_link_adr adl_sdca_default[] = { 296 { 206 { 297 .mask = BIT(0), 207 .mask = BIT(0), 298 .num_adr = ARRAY_SIZE(rt711_sd 208 .num_adr = ARRAY_SIZE(rt711_sdca_0_adr), 299 .adr_d = rt711_sdca_0_adr, 209 .adr_d = rt711_sdca_0_adr, 300 }, 210 }, 301 { 211 { 302 .mask = BIT(1), 212 .mask = BIT(1), 303 .num_adr = ARRAY_SIZE(rt1316_1 213 .num_adr = ARRAY_SIZE(rt1316_1_group1_adr), 304 .adr_d = rt1316_1_group1_adr, 214 .adr_d = rt1316_1_group1_adr, 305 }, 215 }, 306 { 216 { 307 .mask = BIT(2), 217 .mask = BIT(2), 308 .num_adr = ARRAY_SIZE(rt1316_2 218 .num_adr = ARRAY_SIZE(rt1316_2_group1_adr), 309 .adr_d = rt1316_2_group1_adr, 219 .adr_d = rt1316_2_group1_adr, 310 }, 220 }, 311 { 221 { 312 .mask = BIT(3), 222 .mask = BIT(3), 313 .num_adr = ARRAY_SIZE(rt714_3_ 223 .num_adr = ARRAY_SIZE(rt714_3_adr), 314 .adr_d = rt714_3_adr, 224 .adr_d = rt714_3_adr, 315 }, 225 }, 316 {} 226 {} 317 }; 227 }; 318 228 319 static const struct snd_soc_acpi_link_adr adl_ 229 static const struct snd_soc_acpi_link_adr adl_sdca_3_in_1[] = { 320 { 230 { 321 .mask = BIT(0), 231 .mask = BIT(0), 322 .num_adr = ARRAY_SIZE(rt711_sd 232 .num_adr = ARRAY_SIZE(rt711_sdca_0_adr), 323 .adr_d = rt711_sdca_0_adr, 233 .adr_d = rt711_sdca_0_adr, 324 }, 234 }, 325 { 235 { 326 .mask = BIT(1), 236 .mask = BIT(1), 327 .num_adr = ARRAY_SIZE(rt1316_1 237 .num_adr = ARRAY_SIZE(rt1316_1_group1_adr), 328 .adr_d = rt1316_1_group1_adr, 238 .adr_d = rt1316_1_group1_adr, 329 }, 239 }, 330 { 240 { 331 .mask = BIT(2), 241 .mask = BIT(2), 332 .num_adr = ARRAY_SIZE(rt714_2_ 242 .num_adr = ARRAY_SIZE(rt714_2_adr), 333 .adr_d = rt714_2_adr, 243 .adr_d = rt714_2_adr, 334 }, 244 }, 335 { 245 { 336 .mask = BIT(3), 246 .mask = BIT(3), 337 .num_adr = ARRAY_SIZE(rt1316_3 247 .num_adr = ARRAY_SIZE(rt1316_3_group1_adr), 338 .adr_d = rt1316_3_group1_adr, 248 .adr_d = rt1316_3_group1_adr, 339 }, 249 }, 340 {} 250 {} 341 }; 251 }; 342 252 343 static const struct snd_soc_acpi_link_adr adl_ 253 static const struct snd_soc_acpi_link_adr adl_sdw_rt711_link2_rt1316_link01_rt714_link3[] = { 344 { 254 { 345 .mask = BIT(2), 255 .mask = BIT(2), 346 .num_adr = ARRAY_SIZE(rt711_sd 256 .num_adr = ARRAY_SIZE(rt711_sdca_2_adr), 347 .adr_d = rt711_sdca_2_adr, 257 .adr_d = rt711_sdca_2_adr, 348 }, 258 }, 349 { 259 { 350 .mask = BIT(0), 260 .mask = BIT(0), 351 .num_adr = ARRAY_SIZE(rt1316_0 261 .num_adr = ARRAY_SIZE(rt1316_0_group2_adr), 352 .adr_d = rt1316_0_group2_adr, 262 .adr_d = rt1316_0_group2_adr, 353 }, 263 }, 354 { 264 { 355 .mask = BIT(1), 265 .mask = BIT(1), 356 .num_adr = ARRAY_SIZE(rt1316_1 266 .num_adr = ARRAY_SIZE(rt1316_1_group2_adr), 357 .adr_d = rt1316_1_group2_adr, 267 .adr_d = rt1316_1_group2_adr, 358 }, 268 }, 359 { 269 { 360 .mask = BIT(3), 270 .mask = BIT(3), 361 .num_adr = ARRAY_SIZE(rt714_3_ 271 .num_adr = ARRAY_SIZE(rt714_3_adr), 362 .adr_d = rt714_3_adr, 272 .adr_d = rt714_3_adr, 363 }, 273 }, 364 {} 274 {} 365 }; 275 }; 366 276 367 static const struct snd_soc_acpi_link_adr adl_ 277 static const struct snd_soc_acpi_link_adr adl_sdw_rt711_link2_rt1316_link01[] = { 368 { 278 { 369 .mask = BIT(2), 279 .mask = BIT(2), 370 .num_adr = ARRAY_SIZE(rt711_sd 280 .num_adr = ARRAY_SIZE(rt711_sdca_2_adr), 371 .adr_d = rt711_sdca_2_adr, 281 .adr_d = rt711_sdca_2_adr, 372 }, 282 }, 373 { 283 { 374 .mask = BIT(0), 284 .mask = BIT(0), 375 .num_adr = ARRAY_SIZE(rt1316_0 285 .num_adr = ARRAY_SIZE(rt1316_0_group2_adr), 376 .adr_d = rt1316_0_group2_adr, 286 .adr_d = rt1316_0_group2_adr, 377 }, 287 }, 378 { 288 { 379 .mask = BIT(1), 289 .mask = BIT(1), 380 .num_adr = ARRAY_SIZE(rt1316_1 290 .num_adr = ARRAY_SIZE(rt1316_1_group2_adr), 381 .adr_d = rt1316_1_group2_adr, 291 .adr_d = rt1316_1_group2_adr, 382 }, 292 }, 383 {} 293 {} 384 }; 294 }; 385 295 386 static const struct snd_soc_acpi_link_adr adl_ 296 static const struct snd_soc_acpi_link_adr adl_sdw_rt1316_link12_rt714_link0[] = { 387 { 297 { 388 .mask = BIT(1), 298 .mask = BIT(1), 389 .num_adr = ARRAY_SIZE(rt1316_1 299 .num_adr = ARRAY_SIZE(rt1316_1_group1_adr), 390 .adr_d = rt1316_1_group1_adr, 300 .adr_d = rt1316_1_group1_adr, 391 }, 301 }, 392 { 302 { 393 .mask = BIT(2), 303 .mask = BIT(2), 394 .num_adr = ARRAY_SIZE(rt1316_2 304 .num_adr = ARRAY_SIZE(rt1316_2_group1_adr), 395 .adr_d = rt1316_2_group1_adr, 305 .adr_d = rt1316_2_group1_adr, 396 }, 306 }, 397 { 307 { 398 .mask = BIT(0), 308 .mask = BIT(0), 399 .num_adr = ARRAY_SIZE(rt714_0_ 309 .num_adr = ARRAY_SIZE(rt714_0_adr), 400 .adr_d = rt714_0_adr, 310 .adr_d = rt714_0_adr, 401 }, 311 }, 402 {} 312 {} 403 }; 313 }; 404 314 405 static const struct snd_soc_acpi_link_adr adl_ << 406 { << 407 .mask = BIT(1), << 408 .num_adr = ARRAY_SIZE(rt1316_1 << 409 .adr_d = rt1316_1_single_adr, << 410 }, << 411 { << 412 .mask = BIT(0), << 413 .num_adr = ARRAY_SIZE(rt714_0_ << 414 .adr_d = rt714_0_adr, << 415 }, << 416 {} << 417 }; << 418 << 419 static const struct snd_soc_acpi_link_adr adl_ 315 static const struct snd_soc_acpi_link_adr adl_sdw_rt1316_link2_rt714_link3[] = { 420 { 316 { 421 .mask = BIT(2), 317 .mask = BIT(2), 422 .num_adr = ARRAY_SIZE(rt1316_2 318 .num_adr = ARRAY_SIZE(rt1316_2_single_adr), 423 .adr_d = rt1316_2_single_adr, 319 .adr_d = rt1316_2_single_adr, 424 }, 320 }, 425 { 321 { 426 .mask = BIT(3), 322 .mask = BIT(3), 427 .num_adr = ARRAY_SIZE(rt714_3_ 323 .num_adr = ARRAY_SIZE(rt714_3_adr), 428 .adr_d = rt714_3_adr, 324 .adr_d = rt714_3_adr, 429 }, 325 }, 430 {} 326 {} 431 }; 327 }; 432 328 433 static const struct snd_soc_acpi_link_adr adl_ 329 static const struct snd_soc_acpi_link_adr adl_sdw_rt1316_link2_rt714_link0[] = { 434 { 330 { 435 .mask = BIT(2), 331 .mask = BIT(2), 436 .num_adr = ARRAY_SIZE(rt1316_2 332 .num_adr = ARRAY_SIZE(rt1316_2_single_adr), 437 .adr_d = rt1316_2_single_adr, 333 .adr_d = rt1316_2_single_adr, 438 }, 334 }, 439 { 335 { 440 .mask = BIT(0), 336 .mask = BIT(0), 441 .num_adr = ARRAY_SIZE(rt714_0_ 337 .num_adr = ARRAY_SIZE(rt714_0_adr), 442 .adr_d = rt714_0_adr, 338 .adr_d = rt714_0_adr, 443 }, 339 }, 444 {} 340 {} 445 }; 341 }; 446 342 447 static const struct snd_soc_acpi_link_adr adl_ 343 static const struct snd_soc_acpi_link_adr adl_sdw_rt711_link0_rt1316_link3[] = { 448 { 344 { 449 .mask = BIT(0), 345 .mask = BIT(0), 450 .num_adr = ARRAY_SIZE(rt711_sd 346 .num_adr = ARRAY_SIZE(rt711_sdca_0_adr), 451 .adr_d = rt711_sdca_0_adr, 347 .adr_d = rt711_sdca_0_adr, 452 }, 348 }, 453 { 349 { 454 .mask = BIT(3), 350 .mask = BIT(3), 455 .num_adr = ARRAY_SIZE(rt1316_3 351 .num_adr = ARRAY_SIZE(rt1316_3_single_adr), 456 .adr_d = rt1316_3_single_adr, 352 .adr_d = rt1316_3_single_adr, 457 }, 353 }, 458 {} 354 {} 459 }; 355 }; 460 356 461 static const struct snd_soc_acpi_link_adr adl_ 357 static const struct snd_soc_acpi_link_adr adl_sdw_rt711_link0_rt1316_link2[] = { 462 { 358 { 463 .mask = BIT(0), 359 .mask = BIT(0), 464 .num_adr = ARRAY_SIZE(rt711_sd 360 .num_adr = ARRAY_SIZE(rt711_sdca_0_adr), 465 .adr_d = rt711_sdca_0_adr, 361 .adr_d = rt711_sdca_0_adr, 466 }, 362 }, 467 { 363 { 468 .mask = BIT(2), 364 .mask = BIT(2), 469 .num_adr = ARRAY_SIZE(rt1316_2 365 .num_adr = ARRAY_SIZE(rt1316_2_single_adr), 470 .adr_d = rt1316_2_single_adr, 366 .adr_d = rt1316_2_single_adr, 471 }, 367 }, 472 {} 368 {} 473 }; 369 }; 474 370 475 static const struct snd_soc_acpi_adr_device mx 371 static const struct snd_soc_acpi_adr_device mx8373_2_adr[] = { 476 { 372 { 477 .adr = 0x000223019F837300ull, 373 .adr = 0x000223019F837300ull, 478 .num_endpoints = 1, 374 .num_endpoints = 1, 479 .endpoints = &spk_l_endpoint, 375 .endpoints = &spk_l_endpoint, 480 .name_prefix = "Left" 376 .name_prefix = "Left" 481 }, 377 }, 482 { 378 { 483 .adr = 0x000227019F837300ull, 379 .adr = 0x000227019F837300ull, 484 .num_endpoints = 1, 380 .num_endpoints = 1, 485 .endpoints = &spk_r_endpoint, 381 .endpoints = &spk_r_endpoint, 486 .name_prefix = "Right" 382 .name_prefix = "Right" 487 } 383 } 488 }; 384 }; 489 385 490 static const struct snd_soc_acpi_adr_device rt 386 static const struct snd_soc_acpi_adr_device rt5682_0_adr[] = { 491 { 387 { 492 .adr = 0x000021025D568200ull, 388 .adr = 0x000021025D568200ull, 493 .num_endpoints = 1, 389 .num_endpoints = 1, 494 .endpoints = &single_endpoint, 390 .endpoints = &single_endpoint, 495 .name_prefix = "rt5682" 391 .name_prefix = "rt5682" 496 } 392 } 497 }; 393 }; 498 394 499 static const struct snd_soc_acpi_link_adr adl_ << 500 { << 501 .mask = BIT(0), << 502 .num_adr = ARRAY_SIZE(cs42l43_ << 503 .adr_d = cs42l43_0_adr, << 504 }, << 505 { << 506 .mask = BIT(2), << 507 .num_adr = ARRAY_SIZE(cs35l56_ << 508 .adr_d = cs35l56_2_r_adr, << 509 }, << 510 { << 511 .mask = BIT(3), << 512 .num_adr = ARRAY_SIZE(cs35l56_ << 513 .adr_d = cs35l56_3_l_adr, << 514 }, << 515 {} << 516 }; << 517 << 518 static const struct snd_soc_acpi_link_adr adl_ 395 static const struct snd_soc_acpi_link_adr adl_rvp[] = { 519 { 396 { 520 .mask = BIT(0), 397 .mask = BIT(0), 521 .num_adr = ARRAY_SIZE(rt711_0_ 398 .num_adr = ARRAY_SIZE(rt711_0_adr), 522 .adr_d = rt711_0_adr, 399 .adr_d = rt711_0_adr, 523 }, 400 }, 524 {} 401 {} 525 }; 402 }; 526 403 527 static const struct snd_soc_acpi_link_adr adlp 404 static const struct snd_soc_acpi_link_adr adlps_rvp[] = { 528 { 405 { 529 .mask = BIT(0), 406 .mask = BIT(0), 530 .num_adr = ARRAY_SIZE(rt711_sd 407 .num_adr = ARRAY_SIZE(rt711_sdca_0_adr), 531 .adr_d = rt711_sdca_0_adr, 408 .adr_d = rt711_sdca_0_adr, 532 }, 409 }, 533 {} 410 {} 534 }; 411 }; 535 412 536 static const struct snd_soc_acpi_link_adr adl_ 413 static const struct snd_soc_acpi_link_adr adl_chromebook_base[] = { 537 { 414 { 538 .mask = BIT(0), 415 .mask = BIT(0), 539 .num_adr = ARRAY_SIZE(rt5682_0 416 .num_adr = ARRAY_SIZE(rt5682_0_adr), 540 .adr_d = rt5682_0_adr, 417 .adr_d = rt5682_0_adr, 541 }, 418 }, 542 { 419 { 543 .mask = BIT(2), 420 .mask = BIT(2), 544 .num_adr = ARRAY_SIZE(mx8373_2 421 .num_adr = ARRAY_SIZE(mx8373_2_adr), 545 .adr_d = mx8373_2_adr, 422 .adr_d = mx8373_2_adr, 546 }, 423 }, 547 {} 424 {} 548 }; 425 }; 549 426 >> 427 static const struct snd_soc_acpi_codecs adl_max98373_amp = { >> 428 .num_codecs = 1, >> 429 .codecs = {"MX98373"} >> 430 }; >> 431 550 static const struct snd_soc_acpi_codecs adl_ma 432 static const struct snd_soc_acpi_codecs adl_max98357a_amp = { 551 .num_codecs = 1, 433 .num_codecs = 1, 552 .codecs = {"MX98357A"} 434 .codecs = {"MX98357A"} 553 }; 435 }; 554 436 >> 437 static const struct snd_soc_acpi_codecs adl_max98360a_amp = { >> 438 .num_codecs = 1, >> 439 .codecs = {"MX98360A"} >> 440 }; >> 441 555 static const struct snd_soc_acpi_codecs adl_rt 442 static const struct snd_soc_acpi_codecs adl_rt5682_rt5682s_hp = { 556 .num_codecs = 2, 443 .num_codecs = 2, 557 .codecs = {RT5682_ACPI_HID, RT5682S_AC !! 444 .codecs = {"10EC5682", "RTL5682"}, >> 445 }; >> 446 >> 447 static const struct snd_soc_acpi_codecs adl_rt1015p_amp = { >> 448 .num_codecs = 1, >> 449 .codecs = {"RTL1015"} 558 }; 450 }; 559 451 560 static const struct snd_soc_acpi_codecs adl_rt 452 static const struct snd_soc_acpi_codecs adl_rt1019p_amp = { 561 .num_codecs = 1, 453 .num_codecs = 1, 562 .codecs = {"RTL1019"} 454 .codecs = {"RTL1019"} 563 }; 455 }; 564 456 >> 457 static const struct snd_soc_acpi_codecs adl_max98390_amp = { >> 458 .num_codecs = 1, >> 459 .codecs = {"MX98390"} >> 460 }; >> 461 565 static const struct snd_soc_acpi_codecs adl_lt 462 static const struct snd_soc_acpi_codecs adl_lt6911_hdmi = { 566 .num_codecs = 1, 463 .num_codecs = 1, 567 .codecs = {"INTC10B0"} 464 .codecs = {"INTC10B0"} 568 }; 465 }; 569 466 570 struct snd_soc_acpi_mach snd_soc_acpi_intel_ad 467 struct snd_soc_acpi_mach snd_soc_acpi_intel_adl_machines[] = { 571 { 468 { 572 .comp_ids = &adl_rt5682_rt5682 469 .comp_ids = &adl_rt5682_rt5682s_hp, >> 470 .drv_name = "adl_mx98373_rt5682", >> 471 .machine_quirk = snd_soc_acpi_codec_list, >> 472 .quirk_data = &adl_max98373_amp, >> 473 .sof_tplg_filename = "sof-adl-max98373-rt5682.tplg", >> 474 }, >> 475 { >> 476 .comp_ids = &adl_rt5682_rt5682s_hp, 573 .drv_name = "adl_mx98357_rt568 477 .drv_name = "adl_mx98357_rt5682", 574 .machine_quirk = snd_soc_acpi_ 478 .machine_quirk = snd_soc_acpi_codec_list, 575 .quirk_data = &adl_max98357a_a 479 .quirk_data = &adl_max98357a_amp, 576 .sof_tplg_filename = "sof-adl- 480 .sof_tplg_filename = "sof-adl-max98357a-rt5682.tplg", 577 }, 481 }, 578 { 482 { >> 483 .comp_ids = &adl_rt5682_rt5682s_hp, >> 484 .drv_name = "adl_mx98360_rt5682", >> 485 .machine_quirk = snd_soc_acpi_codec_list, >> 486 .quirk_data = &adl_max98360a_amp, >> 487 .sof_tplg_filename = "sof-adl-max98360a-rt5682.tplg", >> 488 }, >> 489 { 579 .id = "10508825", 490 .id = "10508825", 580 .drv_name = "adl_rt1019p_8825" 491 .drv_name = "adl_rt1019p_8825", 581 .machine_quirk = snd_soc_acpi_ 492 .machine_quirk = snd_soc_acpi_codec_list, 582 .quirk_data = &adl_rt1019p_amp 493 .quirk_data = &adl_rt1019p_amp, 583 .sof_tplg_filename = "sof-adl- 494 .sof_tplg_filename = "sof-adl-rt1019-nau8825.tplg", 584 }, 495 }, 585 { 496 { 586 .comp_ids = &adl_rt5682_rt5682 !! 497 .id = "10508825", 587 .drv_name = "adl_rt5682_c1_h02 !! 498 .drv_name = "adl_max98373_8825", 588 .machine_quirk = snd_soc_acpi_ 499 .machine_quirk = snd_soc_acpi_codec_list, 589 .quirk_data = &adl_lt6911_hdmi !! 500 .quirk_data = &adl_max98373_amp, 590 .sof_tplg_filename = "sof-adl- !! 501 .sof_tplg_filename = "sof-adl-max98373-nau8825.tplg", 591 }, 502 }, 592 { 503 { 593 .comp_ids = &essx_83x6, !! 504 .id = "10508825", 594 .drv_name = "adl_es83x6_c1_h02 !! 505 .drv_name = "adl_mx98360a_8825", 595 .machine_quirk = snd_soc_acpi_ 506 .machine_quirk = snd_soc_acpi_codec_list, 596 .quirk_data = &adl_lt6911_hdmi !! 507 .quirk_data = &adl_max98360a_amp, 597 .sof_tplg_filename = "sof-adl- !! 508 .sof_tplg_filename = "sof-adl-max98360a-nau8825.tplg", 598 }, 509 }, 599 { 510 { 600 .comp_ids = &essx_83x6, !! 511 .id = "RTL5682", 601 .drv_name = "sof-essx8336", !! 512 .drv_name = "adl_rt1019_rt5682s", 602 .sof_tplg_filename = "sof-adl- !! 513 .machine_quirk = snd_soc_acpi_codec_list, 603 .tplg_quirk_mask = SND_SOC_ACP !! 514 .quirk_data = &adl_rt1019p_amp, 604 SND_SO !! 515 .sof_tplg_filename = "sof-adl-rt1019-rt5682.tplg", 605 SND_SO << 606 }, 516 }, 607 /* place boards for each headphone cod !! 517 { 608 * tplg name and machine driver will d !! 518 .id = "10508825", 609 */ !! 519 .drv_name = "adl_rt1015p_8825", 610 { !! 520 .machine_quirk = snd_soc_acpi_codec_list, 611 .id = CS42L42_ACPI_HID, !! 521 .quirk_data = &adl_rt1015p_amp, 612 .drv_name = "adl_cs42l42_def", !! 522 .sof_tplg_filename = "sof-adl-rt1015-nau8825.tplg", 613 .sof_tplg_filename = "sof-adl" !! 523 }, 614 .tplg_quirk_mask = SND_SOC_ACP !! 524 { 615 SND_SO !! 525 .id = "10508825", 616 }, !! 526 .drv_name = "sof_nau8825", 617 { !! 527 .sof_tplg_filename = "sof-adl-nau8825.tplg", 618 .id = DA7219_ACPI_HID, << 619 .drv_name = "adl_da7219_def", << 620 .sof_tplg_filename = "sof-adl" << 621 .tplg_quirk_mask = SND_SOC_ACP << 622 SND_SO << 623 }, << 624 { << 625 .id = NAU8825_ACPI_HID, << 626 .drv_name = "adl_nau8825_def", << 627 .sof_tplg_filename = "sof-adl" << 628 .tplg_quirk_mask = SND_SOC_ACP << 629 SND_SO << 630 }, << 631 { << 632 .id = RT5650_ACPI_HID, << 633 .drv_name = "adl_rt5682_def", << 634 .sof_tplg_filename = "sof-adl" << 635 .tplg_quirk_mask = SND_SOC_ACP << 636 SND_SO << 637 }, 528 }, 638 { 529 { 639 .comp_ids = &adl_rt5682_rt5682 530 .comp_ids = &adl_rt5682_rt5682s_hp, 640 .drv_name = "adl_rt5682_def", !! 531 .drv_name = "adl_max98390_rt5682", 641 .sof_tplg_filename = "sof-adl" !! 532 .machine_quirk = snd_soc_acpi_codec_list, 642 .tplg_quirk_mask = SND_SOC_ACP !! 533 .quirk_data = &adl_max98390_amp, 643 SND_SO !! 534 .sof_tplg_filename = "sof-adl-max98390-rt5682.tplg", >> 535 }, >> 536 { >> 537 .comp_ids = &adl_rt5682_rt5682s_hp, >> 538 .drv_name = "adl_rt5682", >> 539 .sof_tplg_filename = "sof-adl-rt5682.tplg", >> 540 }, >> 541 { >> 542 .id = "10134242", >> 543 .drv_name = "adl_mx98360a_cs4242", >> 544 .machine_quirk = snd_soc_acpi_codec_list, >> 545 .quirk_data = &adl_max98360a_amp, >> 546 .sof_tplg_filename = "sof-adl-max98360a-cs42l42.tplg", 644 }, 547 }, 645 /* place amp-only boards in the end of 548 /* place amp-only boards in the end of table */ 646 { 549 { 647 .id = "CSC3541", 550 .id = "CSC3541", 648 .drv_name = "adl_cs35l41", 551 .drv_name = "adl_cs35l41", 649 .sof_tplg_filename = "sof-adl- 552 .sof_tplg_filename = "sof-adl-cs35l41.tplg", 650 }, 553 }, 651 { 554 { 652 .id = "INTC10B0", !! 555 .comp_ids = &essx_83x6, 653 .drv_name = "adl_lt6911_hdmi_s !! 556 .drv_name = "adl_es83x6_c1_h02", 654 .sof_tplg_filename = "sof-adl- !! 557 .machine_quirk = snd_soc_acpi_codec_list, >> 558 .quirk_data = &adl_lt6911_hdmi, >> 559 .sof_tplg_filename = "sof-adl-es83x6-ssp1-hdmi-ssp02.tplg", >> 560 }, >> 561 { >> 562 .comp_ids = &essx_83x6, >> 563 .drv_name = "sof-essx8336", >> 564 .sof_tplg_filename = "sof-adl-es8336", /* the tplg suffix is added at run time */ >> 565 .tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_SSP_NUMBER | >> 566 SND_SOC_ACPI_TPLG_INTEL_SSP_MSB | >> 567 SND_SOC_ACPI_TPLG_INTEL_DMIC_NUMBER, 655 }, 568 }, 656 {}, 569 {}, 657 }; 570 }; 658 EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_adl_machi 571 EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_adl_machines); 659 572 660 /* this table is used when there is no I2S cod 573 /* this table is used when there is no I2S codec present */ 661 struct snd_soc_acpi_mach snd_soc_acpi_intel_ad 574 struct snd_soc_acpi_mach snd_soc_acpi_intel_adl_sdw_machines[] = { 662 { 575 { 663 .link_mask = BIT(0) | BIT(2) | << 664 .links = adl_cs42l43_l0_cs35l5 << 665 .drv_name = "sof_sdw", << 666 .sof_tplg_filename = "sof-adl- << 667 }, << 668 { << 669 .link_mask = 0xF, /* 4 active 576 .link_mask = 0xF, /* 4 active links required */ 670 .links = adl_default, 577 .links = adl_default, 671 .drv_name = "sof_sdw", 578 .drv_name = "sof_sdw", 672 .sof_tplg_filename = "sof-adl- 579 .sof_tplg_filename = "sof-adl-rt711-l0-rt1308-l12-rt715-l3.tplg", 673 }, 580 }, 674 { 581 { 675 .link_mask = 0xF, /* 4 active 582 .link_mask = 0xF, /* 4 active links required */ 676 .links = adl_sdca_default, 583 .links = adl_sdca_default, 677 .drv_name = "sof_sdw", 584 .drv_name = "sof_sdw", 678 .sof_tplg_filename = "sof-adl- 585 .sof_tplg_filename = "sof-adl-rt711-l0-rt1316-l12-rt714-l3.tplg", 679 }, 586 }, 680 { 587 { 681 .link_mask = 0xF, /* 4 active 588 .link_mask = 0xF, /* 4 active links required */ 682 .links = adl_sdca_3_in_1, 589 .links = adl_sdca_3_in_1, 683 .drv_name = "sof_sdw", 590 .drv_name = "sof_sdw", 684 .sof_tplg_filename = "sof-adl- 591 .sof_tplg_filename = "sof-adl-rt711-l0-rt1316-l13-rt714-l2.tplg", 685 }, 592 }, 686 { 593 { 687 .link_mask = 0xF, /* 4 active 594 .link_mask = 0xF, /* 4 active links required */ 688 .links = adl_sdw_rt711_link2_r 595 .links = adl_sdw_rt711_link2_rt1316_link01_rt714_link3, 689 .drv_name = "sof_sdw", 596 .drv_name = "sof_sdw", 690 .sof_tplg_filename = "sof-adl- 597 .sof_tplg_filename = "sof-adl-rt711-l2-rt1316-l01-rt714-l3.tplg", 691 }, 598 }, 692 { 599 { 693 .link_mask = 0x7, /* rt1316 on 600 .link_mask = 0x7, /* rt1316 on link0 and link1 & rt711 on link2*/ 694 .links = adl_sdw_rt711_link2_r 601 .links = adl_sdw_rt711_link2_rt1316_link01, 695 .drv_name = "sof_sdw", 602 .drv_name = "sof_sdw", 696 .sof_tplg_filename = "sof-adl- 603 .sof_tplg_filename = "sof-adl-rt711-l2-rt1316-l01.tplg", 697 }, 604 }, 698 { 605 { 699 .link_mask = 0xC, /* rt1316 on 606 .link_mask = 0xC, /* rt1316 on link2 & rt714 on link3 */ 700 .links = adl_sdw_rt1316_link2_ 607 .links = adl_sdw_rt1316_link2_rt714_link3, 701 .drv_name = "sof_sdw", 608 .drv_name = "sof_sdw", 702 .sof_tplg_filename = "sof-adl- 609 .sof_tplg_filename = "sof-adl-rt1316-l2-mono-rt714-l3.tplg", 703 }, 610 }, 704 { 611 { 705 .link_mask = 0x7, /* rt714 on 612 .link_mask = 0x7, /* rt714 on link0 & two rt1316s on link1 and link2 */ 706 .links = adl_sdw_rt1316_link12 613 .links = adl_sdw_rt1316_link12_rt714_link0, 707 .drv_name = "sof_sdw", 614 .drv_name = "sof_sdw", 708 .sof_tplg_filename = "sof-adl- 615 .sof_tplg_filename = "sof-adl-rt1316-l12-rt714-l0.tplg", 709 }, << 710 { << 711 .link_mask = 0x3, /* rt1316 on << 712 .links = adl_sdw_rt1316_link1_ << 713 .drv_name = "sof_sdw", << 714 .sof_tplg_filename = "sof-adl- << 715 }, 616 }, 716 { 617 { 717 .link_mask = 0x5, /* 2 active 618 .link_mask = 0x5, /* 2 active links required */ 718 .links = adl_sdw_rt1316_link2_ 619 .links = adl_sdw_rt1316_link2_rt714_link0, 719 .drv_name = "sof_sdw", 620 .drv_name = "sof_sdw", 720 .sof_tplg_filename = "sof-adl- 621 .sof_tplg_filename = "sof-adl-rt1316-l2-mono-rt714-l0.tplg", 721 }, 622 }, 722 { 623 { 723 .link_mask = 0x9, /* 2 active 624 .link_mask = 0x9, /* 2 active links required */ 724 .links = adl_sdw_rt711_link0_r 625 .links = adl_sdw_rt711_link0_rt1316_link3, 725 .drv_name = "sof_sdw", 626 .drv_name = "sof_sdw", 726 .sof_tplg_filename = "sof-adl- 627 .sof_tplg_filename = "sof-adl-rt711-l0-rt1316-l3.tplg", 727 }, 628 }, 728 { 629 { 729 .link_mask = 0x5, /* 2 active 630 .link_mask = 0x5, /* 2 active links required */ 730 .links = adl_sdw_rt711_link0_r 631 .links = adl_sdw_rt711_link0_rt1316_link2, 731 .drv_name = "sof_sdw", 632 .drv_name = "sof_sdw", 732 .sof_tplg_filename = "sof-adl- 633 .sof_tplg_filename = "sof-adl-rt711-l0-rt1316-l2.tplg", 733 }, 634 }, 734 { 635 { 735 .link_mask = 0x1, /* link0 req 636 .link_mask = 0x1, /* link0 required */ 736 .links = adl_rvp, 637 .links = adl_rvp, 737 .drv_name = "sof_sdw", 638 .drv_name = "sof_sdw", 738 .sof_tplg_filename = "sof-adl- 639 .sof_tplg_filename = "sof-adl-rt711.tplg", 739 }, 640 }, 740 { 641 { 741 .link_mask = 0x1, /* link0 req 642 .link_mask = 0x1, /* link0 required */ 742 .links = adlps_rvp, 643 .links = adlps_rvp, 743 .drv_name = "sof_sdw", 644 .drv_name = "sof_sdw", 744 .sof_tplg_filename = "sof-adl- 645 .sof_tplg_filename = "sof-adl-rt711.tplg", 745 }, 646 }, 746 { 647 { 747 .link_mask = 0x5, /* rt5682 on 648 .link_mask = 0x5, /* rt5682 on link0 & 2xmax98373 on link 2 */ 748 .links = adl_chromebook_base, 649 .links = adl_chromebook_base, 749 .drv_name = "sof_sdw", 650 .drv_name = "sof_sdw", 750 .sof_tplg_filename = "sof-adl- 651 .sof_tplg_filename = "sof-adl-sdw-max98373-rt5682.tplg", 751 }, 652 }, 752 {}, 653 {}, 753 }; 654 }; 754 EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_adl_sdw_m 655 EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_adl_sdw_machines); 755 656
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.