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 206*896c3dc2SGongjun Song static const struct snd_soc_acpi_link_adr rpl_sdw_rt711_link2_rt1316_link01[] = { 207*896c3dc2SGongjun Song { 208*896c3dc2SGongjun Song .mask = BIT(2), 209*896c3dc2SGongjun Song .num_adr = ARRAY_SIZE(rt711_sdca_2_adr), 210*896c3dc2SGongjun Song .adr_d = rt711_sdca_2_adr, 211*896c3dc2SGongjun Song }, 212*896c3dc2SGongjun Song { 213*896c3dc2SGongjun Song .mask = BIT(0), 214*896c3dc2SGongjun Song .num_adr = ARRAY_SIZE(rt1316_0_group2_adr), 215*896c3dc2SGongjun Song .adr_d = rt1316_0_group2_adr, 216*896c3dc2SGongjun Song }, 217*896c3dc2SGongjun Song { 218*896c3dc2SGongjun Song .mask = BIT(1), 219*896c3dc2SGongjun Song .num_adr = ARRAY_SIZE(rt1316_1_group2_adr), 220*896c3dc2SGongjun Song .adr_d = rt1316_1_group2_adr, 221*896c3dc2SGongjun Song }, 222*896c3dc2SGongjun Song {} 223*896c3dc2SGongjun Song }; 224*896c3dc2SGongjun 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 24955fc0344SGongjun Song static const struct snd_soc_acpi_link_adr rpl_sdw_rt1316_link12_rt714_link0[] = { 25055fc0344SGongjun Song { 25155fc0344SGongjun Song .mask = BIT(1), 25255fc0344SGongjun Song .num_adr = ARRAY_SIZE(rt1316_1_group1_adr), 25355fc0344SGongjun Song .adr_d = rt1316_1_group1_adr, 25455fc0344SGongjun Song }, 25555fc0344SGongjun Song { 25655fc0344SGongjun Song .mask = BIT(2), 25755fc0344SGongjun Song .num_adr = ARRAY_SIZE(rt1316_2_group1_adr), 25855fc0344SGongjun Song .adr_d = rt1316_2_group1_adr, 25955fc0344SGongjun Song }, 26055fc0344SGongjun Song { 26155fc0344SGongjun Song .mask = BIT(0), 26255fc0344SGongjun Song .num_adr = ARRAY_SIZE(rt714_0_adr), 26355fc0344SGongjun Song .adr_d = rt714_0_adr, 26455fc0344SGongjun Song }, 26555fc0344SGongjun Song {} 26655fc0344SGongjun Song }; 26755fc0344SGongjun Song 2685f3db54cSKai Vehmanen struct snd_soc_acpi_mach snd_soc_acpi_intel_rpl_machines[] = { 2695f3db54cSKai Vehmanen {}, 2705f3db54cSKai Vehmanen }; 2715f3db54cSKai Vehmanen EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_rpl_machines); 2725f3db54cSKai Vehmanen 2735f3db54cSKai Vehmanen /* this table is used when there is no I2S codec present */ 2745f3db54cSKai Vehmanen struct snd_soc_acpi_mach snd_soc_acpi_intel_rpl_sdw_machines[] = { 2755f3db54cSKai Vehmanen { 276e7ff7307SBard Liao .link_mask = 0xF, /* 4 active links required */ 277e7ff7307SBard Liao .links = rpl_sdca_3_in_1, 278e7ff7307SBard Liao .drv_name = "sof_sdw", 279e7ff7307SBard Liao .sof_tplg_filename = "sof-rpl-rt711-l0-rt1316-l13-rt714-l2.tplg", 280e7ff7307SBard Liao }, 281e7ff7307SBard Liao { 28297b5fbf4SGongjun Song .link_mask = 0xF, /* 4 active links required */ 28397b5fbf4SGongjun Song .links = rpl_sdw_rt711_link2_rt1316_link01_rt714_link3, 28497b5fbf4SGongjun Song .drv_name = "sof_sdw", 28597b5fbf4SGongjun Song .sof_tplg_filename = "sof-rpl-rt711-l2-rt1316-l01-rt714-l3.tplg", 28697b5fbf4SGongjun Song }, 28797b5fbf4SGongjun Song { 2880050e3d3SGongjun Song .link_mask = 0xF, /* 4 active links required */ 2890050e3d3SGongjun Song .links = rpl_sdw_rt711_link0_rt1318_link12_rt714_link3, 2900050e3d3SGongjun Song .drv_name = "sof_sdw", 2910050e3d3SGongjun Song .sof_tplg_filename = "sof-rpl-rt711-l0-rt1318-l12-rt714-l3.tplg", 2920050e3d3SGongjun Song }, 2930050e3d3SGongjun Song { 29455fc0344SGongjun Song .link_mask = 0x7, /* rt714 on link0 & two rt1316s on link1 and link2 */ 29555fc0344SGongjun Song .links = rpl_sdw_rt1316_link12_rt714_link0, 29655fc0344SGongjun Song .drv_name = "sof_sdw", 29755fc0344SGongjun Song .sof_tplg_filename = "sof-rpl-rt1316-l12-rt714-l0.tplg", 29855fc0344SGongjun Song }, 29955fc0344SGongjun Song { 300*896c3dc2SGongjun Song .link_mask = 0x7, /* rt711 on link2 & two rt1316s on link0 and link1 */ 301*896c3dc2SGongjun Song .links = rpl_sdw_rt711_link2_rt1316_link01, 302*896c3dc2SGongjun Song .drv_name = "sof_sdw", 303*896c3dc2SGongjun Song .sof_tplg_filename = "sof-rpl-rt711-l2-rt1316-l01.tplg", 304*896c3dc2SGongjun Song }, 305*896c3dc2SGongjun Song { 3065f3db54cSKai Vehmanen .link_mask = 0x1, /* link0 required */ 3075f3db54cSKai Vehmanen .links = rpl_rvp, 3085f3db54cSKai Vehmanen .drv_name = "sof_sdw", 3095f3db54cSKai Vehmanen .sof_tplg_filename = "sof-rpl-rt711.tplg", 3105f3db54cSKai Vehmanen }, 3115f3db54cSKai Vehmanen {}, 3125f3db54cSKai Vehmanen }; 3135f3db54cSKai Vehmanen EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_rpl_sdw_machines); 314