1e149ca29SPierre-Louis Bossart // SPDX-License-Identifier: GPL-2.0-only 29923e907SPierre-Louis Bossart /* 3e51b6980SChristophe JAILLET * soc-acpi-intel-icl-match.c - tables and support for ICL ACPI enumeration. 49923e907SPierre-Louis Bossart * 59923e907SPierre-Louis Bossart * Copyright (c) 2018, Intel Corporation. 69923e907SPierre-Louis Bossart * 79923e907SPierre-Louis Bossart */ 89923e907SPierre-Louis Bossart 99923e907SPierre-Louis Bossart #include <sound/soc-acpi.h> 109923e907SPierre-Louis Bossart #include <sound/soc-acpi-intel-match.h> 119923e907SPierre-Louis Bossart #include "../skylake/skl.h" 129923e907SPierre-Louis Bossart 13*9a1d248bSPierre-Louis Bossart static const struct snd_soc_acpi_codecs essx_83x6 = { 14*9a1d248bSPierre-Louis Bossart .num_codecs = 3, 15*9a1d248bSPierre-Louis Bossart .codecs = { "ESSX8316", "ESSX8326", "ESSX8336"}, 16*9a1d248bSPierre-Louis Bossart }; 17*9a1d248bSPierre-Louis Bossart 189923e907SPierre-Louis Bossart static struct skl_machine_pdata icl_pdata = { 199923e907SPierre-Louis Bossart .use_tplg_pcm = true, 209923e907SPierre-Louis Bossart }; 219923e907SPierre-Louis Bossart 229923e907SPierre-Louis Bossart struct snd_soc_acpi_mach snd_soc_acpi_intel_icl_machines[] = { 239923e907SPierre-Louis Bossart { 249923e907SPierre-Louis Bossart .id = "INT34C2", 259923e907SPierre-Louis Bossart .drv_name = "icl_rt274", 269923e907SPierre-Louis Bossart .fw_filename = "intel/dsp_fw_icl.bin", 279923e907SPierre-Louis Bossart .pdata = &icl_pdata, 28a5b1e228SPierre-Louis Bossart .sof_tplg_filename = "sof-icl-rt274.tplg", 299923e907SPierre-Louis Bossart }, 30f70abd75SBard liao { 31f70abd75SBard liao .id = "10EC5682", 32f70abd75SBard liao .drv_name = "sof_rt5682", 33f70abd75SBard liao .sof_tplg_filename = "sof-icl-rt5682.tplg", 34f70abd75SBard liao }, 35*9a1d248bSPierre-Louis Bossart { 36*9a1d248bSPierre-Louis Bossart .comp_ids = &essx_83x6, 37*9a1d248bSPierre-Louis Bossart .drv_name = "sof-essx8336", 38*9a1d248bSPierre-Louis Bossart .sof_tplg_filename = "sof-icl-es8336", /* the tplg suffix is added at run time */ 39*9a1d248bSPierre-Louis Bossart .tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_SSP_NUMBER | 40*9a1d248bSPierre-Louis Bossart SND_SOC_ACPI_TPLG_INTEL_SSP_MSB | 41*9a1d248bSPierre-Louis Bossart SND_SOC_ACPI_TPLG_INTEL_DMIC_NUMBER, 42*9a1d248bSPierre-Louis Bossart }, 439923e907SPierre-Louis Bossart {}, 449923e907SPierre-Louis Bossart }; 459923e907SPierre-Louis Bossart EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_icl_machines); 469923e907SPierre-Louis Bossart 47004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_endpoint single_endpoint = { 48004bd416SPierre-Louis Bossart .num = 0, 49004bd416SPierre-Louis Bossart .aggregated = 0, 50004bd416SPierre-Louis Bossart .group_position = 0, 51004bd416SPierre-Louis Bossart .group_id = 0, 52004bd416SPierre-Louis Bossart }; 53004bd416SPierre-Louis Bossart 54004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_endpoint spk_l_endpoint = { 55004bd416SPierre-Louis Bossart .num = 0, 56004bd416SPierre-Louis Bossart .aggregated = 1, 57004bd416SPierre-Louis Bossart .group_position = 0, 58004bd416SPierre-Louis Bossart .group_id = 1, 59004bd416SPierre-Louis Bossart }; 60004bd416SPierre-Louis Bossart 61004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_endpoint spk_r_endpoint = { 62004bd416SPierre-Louis Bossart .num = 0, 63004bd416SPierre-Louis Bossart .aggregated = 1, 64004bd416SPierre-Louis Bossart .group_position = 1, 65004bd416SPierre-Louis Bossart .group_id = 1, 66004bd416SPierre-Louis Bossart }; 67004bd416SPierre-Louis Bossart 68004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt700_0_adr[] = { 69004bd416SPierre-Louis Bossart { 700c52d3e2SPierre-Louis Bossart .adr = 0x000010025D070000ull, 71004bd416SPierre-Louis Bossart .num_endpoints = 1, 72004bd416SPierre-Louis Bossart .endpoints = &single_endpoint, 73f9380830SPierre-Louis Bossart .name_prefix = "rt700" 74004bd416SPierre-Louis Bossart } 754313dd3eSBard Liao }; 764313dd3eSBard Liao 774313dd3eSBard Liao static const struct snd_soc_acpi_link_adr icl_rvp[] = { 784313dd3eSBard Liao { 794313dd3eSBard Liao .mask = BIT(0), 804313dd3eSBard Liao .num_adr = ARRAY_SIZE(rt700_0_adr), 81004bd416SPierre-Louis Bossart .adr_d = rt700_0_adr, 824313dd3eSBard Liao }, 834313dd3eSBard Liao {} 844313dd3eSBard Liao }; 854313dd3eSBard Liao 86004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt711_0_adr[] = { 87004bd416SPierre-Louis Bossart { 880c52d3e2SPierre-Louis Bossart .adr = 0x000020025D071100ull, 89004bd416SPierre-Louis Bossart .num_endpoints = 1, 90004bd416SPierre-Louis Bossart .endpoints = &single_endpoint, 91f9380830SPierre-Louis Bossart .name_prefix = "rt711" 92004bd416SPierre-Louis Bossart } 934313dd3eSBard Liao }; 944313dd3eSBard Liao 95004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt1308_1_adr[] = { 96004bd416SPierre-Louis Bossart { 970c52d3e2SPierre-Louis Bossart .adr = 0x000120025D130800ull, 98004bd416SPierre-Louis Bossart .num_endpoints = 1, 99004bd416SPierre-Louis Bossart .endpoints = &single_endpoint, 100f9380830SPierre-Louis Bossart .name_prefix = "rt1308-1" 101004bd416SPierre-Louis Bossart } 1024313dd3eSBard Liao }; 1034313dd3eSBard Liao 104004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt1308_1_group1_adr[] = { 105004bd416SPierre-Louis Bossart { 1060c52d3e2SPierre-Louis Bossart .adr = 0x000120025D130800ull, 107004bd416SPierre-Louis Bossart .num_endpoints = 1, 108004bd416SPierre-Louis Bossart .endpoints = &spk_l_endpoint, 109f9380830SPierre-Louis Bossart .name_prefix = "rt1308-1" 110004bd416SPierre-Louis Bossart } 111004bd416SPierre-Louis Bossart }; 112004bd416SPierre-Louis Bossart 113004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt1308_2_group1_adr[] = { 114004bd416SPierre-Louis Bossart { 1150c52d3e2SPierre-Louis Bossart .adr = 0x000220025D130800ull, 116004bd416SPierre-Louis Bossart .num_endpoints = 1, 117004bd416SPierre-Louis Bossart .endpoints = &spk_r_endpoint, 118f9380830SPierre-Louis Bossart .name_prefix = "rt1308-2" 119004bd416SPierre-Louis Bossart } 120004bd416SPierre-Louis Bossart }; 121004bd416SPierre-Louis Bossart 122004bd416SPierre-Louis Bossart static const struct snd_soc_acpi_adr_device rt715_3_adr[] = { 123004bd416SPierre-Louis Bossart { 1240c52d3e2SPierre-Louis Bossart .adr = 0x000320025D071500ull, 125004bd416SPierre-Louis Bossart .num_endpoints = 1, 126004bd416SPierre-Louis Bossart .endpoints = &single_endpoint, 127f9380830SPierre-Louis Bossart .name_prefix = "rt715" 128004bd416SPierre-Louis Bossart } 1294313dd3eSBard Liao }; 1304313dd3eSBard Liao 1314313dd3eSBard Liao static const struct snd_soc_acpi_link_adr icl_3_in_1_default[] = { 1324313dd3eSBard Liao { 1334313dd3eSBard Liao .mask = BIT(0), 1344313dd3eSBard Liao .num_adr = ARRAY_SIZE(rt711_0_adr), 135004bd416SPierre-Louis Bossart .adr_d = rt711_0_adr, 1364313dd3eSBard Liao }, 1374313dd3eSBard Liao { 1384313dd3eSBard Liao .mask = BIT(1), 139004bd416SPierre-Louis Bossart .num_adr = ARRAY_SIZE(rt1308_1_group1_adr), 140004bd416SPierre-Louis Bossart .adr_d = rt1308_1_group1_adr, 1414313dd3eSBard Liao }, 1424313dd3eSBard Liao { 1434313dd3eSBard Liao .mask = BIT(2), 144004bd416SPierre-Louis Bossart .num_adr = ARRAY_SIZE(rt1308_2_group1_adr), 145004bd416SPierre-Louis Bossart .adr_d = rt1308_2_group1_adr, 1464313dd3eSBard Liao }, 1474313dd3eSBard Liao { 1484313dd3eSBard Liao .mask = BIT(3), 1494313dd3eSBard Liao .num_adr = ARRAY_SIZE(rt715_3_adr), 150004bd416SPierre-Louis Bossart .adr_d = rt715_3_adr, 1514313dd3eSBard Liao }, 1524313dd3eSBard Liao {} 1534313dd3eSBard Liao }; 1544313dd3eSBard Liao 1554313dd3eSBard Liao static const struct snd_soc_acpi_link_adr icl_3_in_1_mono_amp[] = { 1564313dd3eSBard Liao { 1574313dd3eSBard Liao .mask = BIT(0), 1584313dd3eSBard Liao .num_adr = ARRAY_SIZE(rt711_0_adr), 159004bd416SPierre-Louis Bossart .adr_d = rt711_0_adr, 1604313dd3eSBard Liao }, 1614313dd3eSBard Liao { 1624313dd3eSBard Liao .mask = BIT(1), 1634313dd3eSBard Liao .num_adr = ARRAY_SIZE(rt1308_1_adr), 164004bd416SPierre-Louis Bossart .adr_d = rt1308_1_adr, 1654313dd3eSBard Liao }, 1664313dd3eSBard Liao { 1674313dd3eSBard Liao .mask = BIT(3), 1684313dd3eSBard Liao .num_adr = ARRAY_SIZE(rt715_3_adr), 169004bd416SPierre-Louis Bossart .adr_d = rt715_3_adr, 1704313dd3eSBard Liao }, 1714313dd3eSBard Liao {} 1724313dd3eSBard Liao }; 1734313dd3eSBard Liao 1744313dd3eSBard Liao struct snd_soc_acpi_mach snd_soc_acpi_intel_icl_sdw_machines[] = { 1754313dd3eSBard Liao { 1764313dd3eSBard Liao .link_mask = 0xF, /* 4 active links required */ 1774313dd3eSBard Liao .links = icl_3_in_1_default, 178ba762e67SRander Wang .drv_name = "sof_sdw", 1794313dd3eSBard Liao .sof_tplg_filename = "sof-icl-rt711-rt1308-rt715.tplg", 1804313dd3eSBard Liao }, 1814313dd3eSBard Liao { 1824313dd3eSBard Liao .link_mask = 0xB, /* 3 active links required */ 1834313dd3eSBard Liao .links = icl_3_in_1_mono_amp, 184ba762e67SRander Wang .drv_name = "sof_sdw", 1854313dd3eSBard Liao .sof_tplg_filename = "sof-icl-rt711-rt1308-rt715-mono.tplg", 1864313dd3eSBard Liao }, 1874313dd3eSBard Liao { 1884313dd3eSBard Liao .link_mask = 0x1, /* rt700 connected on link0 */ 1894313dd3eSBard Liao .links = icl_rvp, 190ba762e67SRander Wang .drv_name = "sof_sdw", 1914313dd3eSBard Liao .sof_tplg_filename = "sof-icl-rt700.tplg", 1924313dd3eSBard Liao }, 1934313dd3eSBard Liao {}, 1944313dd3eSBard Liao }; 1954313dd3eSBard Liao EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_icl_sdw_machines); 196