15f3db54cSKai Vehmanen // SPDX-License-Identifier: GPL-2.0-only 25f3db54cSKai Vehmanen /* 35f3db54cSKai Vehmanen * soc-apci-intel-rpl-match.c - tables and support for RPL ACPI enumeration. 45f3db54cSKai Vehmanen * 55f3db54cSKai Vehmanen * Copyright (c) 2022 Intel Corporation. 65f3db54cSKai Vehmanen */ 75f3db54cSKai Vehmanen 85f3db54cSKai Vehmanen #include <sound/soc-acpi.h> 95f3db54cSKai Vehmanen #include <sound/soc-acpi-intel-match.h> 105f3db54cSKai Vehmanen 115f3db54cSKai Vehmanen static const struct snd_soc_acpi_endpoint single_endpoint = { 125f3db54cSKai Vehmanen .num = 0, 135f3db54cSKai Vehmanen .aggregated = 0, 145f3db54cSKai Vehmanen .group_position = 0, 155f3db54cSKai Vehmanen .group_id = 0, 165f3db54cSKai Vehmanen }; 175f3db54cSKai Vehmanen 18e7ff7307SBard Liao static const struct snd_soc_acpi_endpoint spk_l_endpoint = { 19e7ff7307SBard Liao .num = 0, 20e7ff7307SBard Liao .aggregated = 1, 21e7ff7307SBard Liao .group_position = 0, 22e7ff7307SBard Liao .group_id = 1, 23e7ff7307SBard Liao }; 24e7ff7307SBard Liao 25e7ff7307SBard Liao static const struct snd_soc_acpi_endpoint spk_r_endpoint = { 26e7ff7307SBard Liao .num = 0, 27e7ff7307SBard Liao .aggregated = 1, 28e7ff7307SBard Liao .group_position = 1, 29e7ff7307SBard Liao .group_id = 1, 30e7ff7307SBard Liao }; 31e7ff7307SBard Liao 325f3db54cSKai Vehmanen static const struct snd_soc_acpi_adr_device rt711_0_adr[] = { 335f3db54cSKai Vehmanen { 345f3db54cSKai Vehmanen .adr = 0x000020025D071100ull, 355f3db54cSKai Vehmanen .num_endpoints = 1, 365f3db54cSKai Vehmanen .endpoints = &single_endpoint, 375f3db54cSKai Vehmanen .name_prefix = "rt711" 385f3db54cSKai Vehmanen } 395f3db54cSKai Vehmanen }; 405f3db54cSKai Vehmanen 415f3db54cSKai Vehmanen static const struct snd_soc_acpi_link_adr rpl_rvp[] = { 425f3db54cSKai Vehmanen { 435f3db54cSKai Vehmanen .mask = BIT(0), 445f3db54cSKai Vehmanen .num_adr = ARRAY_SIZE(rt711_0_adr), 455f3db54cSKai Vehmanen .adr_d = rt711_0_adr, 465f3db54cSKai Vehmanen }, 475f3db54cSKai Vehmanen {} 485f3db54cSKai Vehmanen }; 495f3db54cSKai Vehmanen 50e7ff7307SBard Liao static const struct snd_soc_acpi_adr_device rt711_sdca_0_adr[] = { 51e7ff7307SBard Liao { 52e7ff7307SBard Liao .adr = 0x000030025D071101ull, 53e7ff7307SBard Liao .num_endpoints = 1, 54e7ff7307SBard Liao .endpoints = &single_endpoint, 55e7ff7307SBard Liao .name_prefix = "rt711" 56e7ff7307SBard Liao } 57e7ff7307SBard Liao }; 58e7ff7307SBard Liao 5997b5fbf4SGongjun Song static const struct snd_soc_acpi_adr_device rt711_sdca_2_adr[] = { 6097b5fbf4SGongjun Song { 6197b5fbf4SGongjun Song .adr = 0x000230025D071101ull, 6297b5fbf4SGongjun Song .num_endpoints = 1, 6397b5fbf4SGongjun Song .endpoints = &single_endpoint, 6497b5fbf4SGongjun Song .name_prefix = "rt711" 6597b5fbf4SGongjun Song } 6697b5fbf4SGongjun Song }; 6797b5fbf4SGongjun Song 68e7ff7307SBard Liao static const struct snd_soc_acpi_adr_device rt1316_1_group1_adr[] = { 69e7ff7307SBard Liao { 70e7ff7307SBard Liao .adr = 0x000131025D131601ull, /* unique ID is set for some reason */ 71e7ff7307SBard Liao .num_endpoints = 1, 72e7ff7307SBard Liao .endpoints = &spk_l_endpoint, 73e7ff7307SBard Liao .name_prefix = "rt1316-1" 74e7ff7307SBard Liao } 75e7ff7307SBard Liao }; 76e7ff7307SBard Liao 7755fc0344SGongjun Song static const struct snd_soc_acpi_adr_device rt1316_2_group1_adr[] = { 7855fc0344SGongjun Song { 7955fc0344SGongjun Song .adr = 0x000230025D131601ull, 8055fc0344SGongjun Song .num_endpoints = 1, 8155fc0344SGongjun Song .endpoints = &spk_r_endpoint, 8255fc0344SGongjun Song .name_prefix = "rt1316-2" 8355fc0344SGongjun Song } 8455fc0344SGongjun Song }; 8555fc0344SGongjun Song 86e7ff7307SBard Liao static const struct snd_soc_acpi_adr_device rt1316_3_group1_adr[] = { 87e7ff7307SBard Liao { 88e7ff7307SBard Liao .adr = 0x000330025D131601ull, 89e7ff7307SBard Liao .num_endpoints = 1, 90e7ff7307SBard Liao .endpoints = &spk_r_endpoint, 91e7ff7307SBard Liao .name_prefix = "rt1316-2" 92e7ff7307SBard Liao } 93e7ff7307SBard Liao }; 94e7ff7307SBard Liao 9597b5fbf4SGongjun Song static const struct snd_soc_acpi_adr_device rt1316_0_group2_adr[] = { 9697b5fbf4SGongjun Song { 9797b5fbf4SGongjun Song .adr = 0x000030025D131601ull, 9897b5fbf4SGongjun Song .num_endpoints = 1, 9997b5fbf4SGongjun Song .endpoints = &spk_l_endpoint, 10097b5fbf4SGongjun Song .name_prefix = "rt1316-1" 10197b5fbf4SGongjun Song } 10297b5fbf4SGongjun Song }; 10397b5fbf4SGongjun Song 10497b5fbf4SGongjun Song static const struct snd_soc_acpi_adr_device rt1316_1_group2_adr[] = { 10597b5fbf4SGongjun Song { 10697b5fbf4SGongjun Song .adr = 0x000131025D131601ull, 10797b5fbf4SGongjun Song .num_endpoints = 1, 10897b5fbf4SGongjun Song .endpoints = &spk_r_endpoint, 10997b5fbf4SGongjun Song .name_prefix = "rt1316-2" 11097b5fbf4SGongjun Song } 11197b5fbf4SGongjun Song }; 11297b5fbf4SGongjun Song 1130050e3d3SGongjun Song static const struct snd_soc_acpi_adr_device rt1318_1_group1_adr[] = { 1140050e3d3SGongjun Song { 1150612d748SGongjun Song .adr = 0x000132025D131801ull, 1160050e3d3SGongjun Song .num_endpoints = 1, 1170050e3d3SGongjun Song .endpoints = &spk_l_endpoint, 1180050e3d3SGongjun Song .name_prefix = "rt1318-1" 1190050e3d3SGongjun Song } 1200050e3d3SGongjun Song }; 1210050e3d3SGongjun Song 1220050e3d3SGongjun Song static const struct snd_soc_acpi_adr_device rt1318_2_group1_adr[] = { 1230050e3d3SGongjun Song { 1240050e3d3SGongjun Song .adr = 0x000230025D131801ull, 1250050e3d3SGongjun Song .num_endpoints = 1, 1260050e3d3SGongjun Song .endpoints = &spk_r_endpoint, 1270050e3d3SGongjun Song .name_prefix = "rt1318-2" 1280050e3d3SGongjun Song } 1290050e3d3SGongjun Song }; 1300050e3d3SGongjun Song 13155fc0344SGongjun Song static const struct snd_soc_acpi_adr_device rt714_0_adr[] = { 13255fc0344SGongjun Song { 13355fc0344SGongjun Song .adr = 0x000030025D071401ull, 13455fc0344SGongjun Song .num_endpoints = 1, 13555fc0344SGongjun Song .endpoints = &single_endpoint, 13655fc0344SGongjun Song .name_prefix = "rt714" 13755fc0344SGongjun Song } 13855fc0344SGongjun Song }; 13955fc0344SGongjun Song 140e7ff7307SBard Liao static const struct snd_soc_acpi_adr_device rt714_2_adr[] = { 141e7ff7307SBard Liao { 142e7ff7307SBard Liao .adr = 0x000230025D071401ull, 143e7ff7307SBard Liao .num_endpoints = 1, 144e7ff7307SBard Liao .endpoints = &single_endpoint, 145e7ff7307SBard Liao .name_prefix = "rt714" 146e7ff7307SBard Liao } 147e7ff7307SBard Liao }; 148e7ff7307SBard Liao 14997b5fbf4SGongjun Song static const struct snd_soc_acpi_adr_device rt714_3_adr[] = { 15097b5fbf4SGongjun Song { 15197b5fbf4SGongjun Song .adr = 0x000330025D071401ull, 15297b5fbf4SGongjun Song .num_endpoints = 1, 15397b5fbf4SGongjun Song .endpoints = &single_endpoint, 15497b5fbf4SGongjun Song .name_prefix = "rt714" 15597b5fbf4SGongjun Song } 15697b5fbf4SGongjun Song }; 15797b5fbf4SGongjun Song 158e7ff7307SBard Liao static const struct snd_soc_acpi_link_adr rpl_sdca_3_in_1[] = { 159e7ff7307SBard Liao { 160e7ff7307SBard Liao .mask = BIT(0), 161e7ff7307SBard Liao .num_adr = ARRAY_SIZE(rt711_sdca_0_adr), 162e7ff7307SBard Liao .adr_d = rt711_sdca_0_adr, 163e7ff7307SBard Liao }, 164e7ff7307SBard Liao { 165e7ff7307SBard Liao .mask = BIT(1), 166e7ff7307SBard Liao .num_adr = ARRAY_SIZE(rt1316_1_group1_adr), 167e7ff7307SBard Liao .adr_d = rt1316_1_group1_adr, 168e7ff7307SBard Liao }, 169e7ff7307SBard Liao { 170e7ff7307SBard Liao .mask = BIT(2), 171e7ff7307SBard Liao .num_adr = ARRAY_SIZE(rt714_2_adr), 172e7ff7307SBard Liao .adr_d = rt714_2_adr, 173e7ff7307SBard Liao }, 174e7ff7307SBard Liao { 175e7ff7307SBard Liao .mask = BIT(3), 176e7ff7307SBard Liao .num_adr = ARRAY_SIZE(rt1316_3_group1_adr), 177e7ff7307SBard Liao .adr_d = rt1316_3_group1_adr, 178e7ff7307SBard Liao }, 179e7ff7307SBard Liao {} 180e7ff7307SBard Liao }; 181e7ff7307SBard Liao 18297b5fbf4SGongjun Song static const struct snd_soc_acpi_link_adr rpl_sdw_rt711_link2_rt1316_link01_rt714_link3[] = { 18397b5fbf4SGongjun Song { 18497b5fbf4SGongjun Song .mask = BIT(2), 18597b5fbf4SGongjun Song .num_adr = ARRAY_SIZE(rt711_sdca_2_adr), 18697b5fbf4SGongjun Song .adr_d = rt711_sdca_2_adr, 18797b5fbf4SGongjun Song }, 18897b5fbf4SGongjun Song { 18997b5fbf4SGongjun Song .mask = BIT(0), 19097b5fbf4SGongjun Song .num_adr = ARRAY_SIZE(rt1316_0_group2_adr), 19197b5fbf4SGongjun Song .adr_d = rt1316_0_group2_adr, 19297b5fbf4SGongjun Song }, 19397b5fbf4SGongjun Song { 19497b5fbf4SGongjun Song .mask = BIT(1), 19597b5fbf4SGongjun Song .num_adr = ARRAY_SIZE(rt1316_1_group2_adr), 19697b5fbf4SGongjun Song .adr_d = rt1316_1_group2_adr, 19797b5fbf4SGongjun Song }, 19897b5fbf4SGongjun Song { 19997b5fbf4SGongjun Song .mask = BIT(3), 20097b5fbf4SGongjun Song .num_adr = ARRAY_SIZE(rt714_3_adr), 20197b5fbf4SGongjun Song .adr_d = rt714_3_adr, 20297b5fbf4SGongjun Song }, 20397b5fbf4SGongjun Song {} 20497b5fbf4SGongjun Song }; 20597b5fbf4SGongjun Song 206896c3dc2SGongjun Song static const struct snd_soc_acpi_link_adr rpl_sdw_rt711_link2_rt1316_link01[] = { 207896c3dc2SGongjun Song { 208896c3dc2SGongjun Song .mask = BIT(2), 209896c3dc2SGongjun Song .num_adr = ARRAY_SIZE(rt711_sdca_2_adr), 210896c3dc2SGongjun Song .adr_d = rt711_sdca_2_adr, 211896c3dc2SGongjun Song }, 212896c3dc2SGongjun Song { 213896c3dc2SGongjun Song .mask = BIT(0), 214896c3dc2SGongjun Song .num_adr = ARRAY_SIZE(rt1316_0_group2_adr), 215896c3dc2SGongjun Song .adr_d = rt1316_0_group2_adr, 216896c3dc2SGongjun Song }, 217896c3dc2SGongjun Song { 218896c3dc2SGongjun Song .mask = BIT(1), 219896c3dc2SGongjun Song .num_adr = ARRAY_SIZE(rt1316_1_group2_adr), 220896c3dc2SGongjun Song .adr_d = rt1316_1_group2_adr, 221896c3dc2SGongjun Song }, 222896c3dc2SGongjun Song {} 223896c3dc2SGongjun Song }; 224896c3dc2SGongjun Song 2250050e3d3SGongjun Song static const struct snd_soc_acpi_link_adr rpl_sdw_rt711_link0_rt1318_link12_rt714_link3[] = { 2260050e3d3SGongjun Song { 2270050e3d3SGongjun Song .mask = BIT(0), 2280050e3d3SGongjun Song .num_adr = ARRAY_SIZE(rt711_sdca_0_adr), 2290050e3d3SGongjun Song .adr_d = rt711_sdca_0_adr, 2300050e3d3SGongjun Song }, 2310050e3d3SGongjun Song { 2320050e3d3SGongjun Song .mask = BIT(1), 2330050e3d3SGongjun Song .num_adr = ARRAY_SIZE(rt1318_1_group1_adr), 2340050e3d3SGongjun Song .adr_d = rt1318_1_group1_adr, 2350050e3d3SGongjun Song }, 2360050e3d3SGongjun Song { 2370050e3d3SGongjun Song .mask = BIT(2), 2380050e3d3SGongjun Song .num_adr = ARRAY_SIZE(rt1318_2_group1_adr), 2390050e3d3SGongjun Song .adr_d = rt1318_2_group1_adr, 2400050e3d3SGongjun Song }, 2410050e3d3SGongjun Song { 2420050e3d3SGongjun Song .mask = BIT(3), 2430050e3d3SGongjun Song .num_adr = ARRAY_SIZE(rt714_3_adr), 2440050e3d3SGongjun Song .adr_d = rt714_3_adr, 2450050e3d3SGongjun Song }, 2460050e3d3SGongjun Song {} 2470050e3d3SGongjun Song }; 2480050e3d3SGongjun Song 249*b25a31b4SGongjun Song static const struct snd_soc_acpi_link_adr rpl_sdw_rt711_link0_rt1318_link12[] = { 250*b25a31b4SGongjun Song { 251*b25a31b4SGongjun Song .mask = BIT(0), 252*b25a31b4SGongjun Song .num_adr = ARRAY_SIZE(rt711_sdca_0_adr), 253*b25a31b4SGongjun Song .adr_d = rt711_sdca_0_adr, 254*b25a31b4SGongjun Song }, 255*b25a31b4SGongjun Song { 256*b25a31b4SGongjun Song .mask = BIT(1), 257*b25a31b4SGongjun Song .num_adr = ARRAY_SIZE(rt1318_1_group1_adr), 258*b25a31b4SGongjun Song .adr_d = rt1318_1_group1_adr, 259*b25a31b4SGongjun Song }, 260*b25a31b4SGongjun Song { 261*b25a31b4SGongjun Song .mask = BIT(2), 262*b25a31b4SGongjun Song .num_adr = ARRAY_SIZE(rt1318_2_group1_adr), 263*b25a31b4SGongjun Song .adr_d = rt1318_2_group1_adr, 264*b25a31b4SGongjun Song }, 265*b25a31b4SGongjun Song {} 266*b25a31b4SGongjun Song }; 267*b25a31b4SGongjun Song 26855fc0344SGongjun Song static const struct snd_soc_acpi_link_adr rpl_sdw_rt1316_link12_rt714_link0[] = { 26955fc0344SGongjun Song { 27055fc0344SGongjun Song .mask = BIT(1), 27155fc0344SGongjun Song .num_adr = ARRAY_SIZE(rt1316_1_group1_adr), 27255fc0344SGongjun Song .adr_d = rt1316_1_group1_adr, 27355fc0344SGongjun Song }, 27455fc0344SGongjun Song { 27555fc0344SGongjun Song .mask = BIT(2), 27655fc0344SGongjun Song .num_adr = ARRAY_SIZE(rt1316_2_group1_adr), 27755fc0344SGongjun Song .adr_d = rt1316_2_group1_adr, 27855fc0344SGongjun Song }, 27955fc0344SGongjun Song { 28055fc0344SGongjun Song .mask = BIT(0), 28155fc0344SGongjun Song .num_adr = ARRAY_SIZE(rt714_0_adr), 28255fc0344SGongjun Song .adr_d = rt714_0_adr, 28355fc0344SGongjun Song }, 28455fc0344SGongjun Song {} 28555fc0344SGongjun Song }; 28655fc0344SGongjun Song 2875f3db54cSKai Vehmanen struct snd_soc_acpi_mach snd_soc_acpi_intel_rpl_machines[] = { 2885f3db54cSKai Vehmanen {}, 2895f3db54cSKai Vehmanen }; 2905f3db54cSKai Vehmanen EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_rpl_machines); 2915f3db54cSKai Vehmanen 2925f3db54cSKai Vehmanen /* this table is used when there is no I2S codec present */ 2935f3db54cSKai Vehmanen struct snd_soc_acpi_mach snd_soc_acpi_intel_rpl_sdw_machines[] = { 2945f3db54cSKai Vehmanen { 295e7ff7307SBard Liao .link_mask = 0xF, /* 4 active links required */ 296e7ff7307SBard Liao .links = rpl_sdca_3_in_1, 297e7ff7307SBard Liao .drv_name = "sof_sdw", 298e7ff7307SBard Liao .sof_tplg_filename = "sof-rpl-rt711-l0-rt1316-l13-rt714-l2.tplg", 299e7ff7307SBard Liao }, 300e7ff7307SBard Liao { 30197b5fbf4SGongjun Song .link_mask = 0xF, /* 4 active links required */ 30297b5fbf4SGongjun Song .links = rpl_sdw_rt711_link2_rt1316_link01_rt714_link3, 30397b5fbf4SGongjun Song .drv_name = "sof_sdw", 30497b5fbf4SGongjun Song .sof_tplg_filename = "sof-rpl-rt711-l2-rt1316-l01-rt714-l3.tplg", 30597b5fbf4SGongjun Song }, 30697b5fbf4SGongjun Song { 3070050e3d3SGongjun Song .link_mask = 0xF, /* 4 active links required */ 3080050e3d3SGongjun Song .links = rpl_sdw_rt711_link0_rt1318_link12_rt714_link3, 3090050e3d3SGongjun Song .drv_name = "sof_sdw", 3100050e3d3SGongjun Song .sof_tplg_filename = "sof-rpl-rt711-l0-rt1318-l12-rt714-l3.tplg", 3110050e3d3SGongjun Song }, 3120050e3d3SGongjun Song { 313*b25a31b4SGongjun Song .link_mask = 0x7, /* rt711 on link0 & two rt1318s on link1 and link2 */ 314*b25a31b4SGongjun Song .links = rpl_sdw_rt711_link0_rt1318_link12, 315*b25a31b4SGongjun Song .drv_name = "sof_sdw", 316*b25a31b4SGongjun Song .sof_tplg_filename = "sof-rpl-rt711-l0-rt1318-l12.tplg", 317*b25a31b4SGongjun Song }, 318*b25a31b4SGongjun Song { 31955fc0344SGongjun Song .link_mask = 0x7, /* rt714 on link0 & two rt1316s on link1 and link2 */ 32055fc0344SGongjun Song .links = rpl_sdw_rt1316_link12_rt714_link0, 32155fc0344SGongjun Song .drv_name = "sof_sdw", 32255fc0344SGongjun Song .sof_tplg_filename = "sof-rpl-rt1316-l12-rt714-l0.tplg", 32355fc0344SGongjun Song }, 32455fc0344SGongjun Song { 325896c3dc2SGongjun Song .link_mask = 0x7, /* rt711 on link2 & two rt1316s on link0 and link1 */ 326896c3dc2SGongjun Song .links = rpl_sdw_rt711_link2_rt1316_link01, 327896c3dc2SGongjun Song .drv_name = "sof_sdw", 328896c3dc2SGongjun Song .sof_tplg_filename = "sof-rpl-rt711-l2-rt1316-l01.tplg", 329896c3dc2SGongjun Song }, 330896c3dc2SGongjun Song { 3315f3db54cSKai Vehmanen .link_mask = 0x1, /* link0 required */ 3325f3db54cSKai Vehmanen .links = rpl_rvp, 3335f3db54cSKai Vehmanen .drv_name = "sof_sdw", 3345f3db54cSKai Vehmanen .sof_tplg_filename = "sof-rpl-rt711.tplg", 3355f3db54cSKai Vehmanen }, 3365f3db54cSKai Vehmanen {}, 3375f3db54cSKai Vehmanen }; 3385f3db54cSKai Vehmanen EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_rpl_sdw_machines); 339