190 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2/*3 * soc-acpi-intel-icl-match.c - tables and support for ICL ACPI enumeration.4 *5 * Copyright (c) 2018, Intel Corporation.6 *7 */8 9#include <sound/soc-acpi.h>10#include <sound/soc-acpi-intel-match.h>11 12static const struct snd_soc_acpi_codecs essx_83x6 = {13 .num_codecs = 3,14 .codecs = { "ESSX8316", "ESSX8326", "ESSX8336"},15};16 17struct snd_soc_acpi_mach snd_soc_acpi_intel_icl_machines[] = {18 {19 .id = "INT34C2",20 .drv_name = "icl_rt274",21 .fw_filename = "intel/dsp_fw_icl.bin",22 .sof_tplg_filename = "sof-icl-rt274.tplg",23 },24 {25 .id = "10EC5682",26 .drv_name = "icl_rt5682_def",27 .sof_tplg_filename = "sof-icl-rt5682.tplg",28 },29 {30 .comp_ids = &essx_83x6,31 .drv_name = "sof-essx8336",32 .sof_tplg_filename = "sof-icl-es8336", /* the tplg suffix is added at run time */33 .tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_SSP_NUMBER |34 SND_SOC_ACPI_TPLG_INTEL_SSP_MSB |35 SND_SOC_ACPI_TPLG_INTEL_DMIC_NUMBER,36 },37 {},38};39EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_icl_machines);40 41static const struct snd_soc_acpi_endpoint single_endpoint = {42 .num = 0,43 .aggregated = 0,44 .group_position = 0,45 .group_id = 0,46};47 48static const struct snd_soc_acpi_endpoint spk_l_endpoint = {49 .num = 0,50 .aggregated = 1,51 .group_position = 0,52 .group_id = 1,53};54 55static const struct snd_soc_acpi_endpoint spk_r_endpoint = {56 .num = 0,57 .aggregated = 1,58 .group_position = 1,59 .group_id = 1,60};61 62static const struct snd_soc_acpi_adr_device rt700_0_adr[] = {63 {64 .adr = 0x000010025D070000ull,65 .num_endpoints = 1,66 .endpoints = &single_endpoint,67 .name_prefix = "rt700"68 }69};70 71static const struct snd_soc_acpi_link_adr icl_rvp[] = {72 {73 .mask = BIT(0),74 .num_adr = ARRAY_SIZE(rt700_0_adr),75 .adr_d = rt700_0_adr,76 },77 {}78};79 80static const struct snd_soc_acpi_adr_device rt711_0_adr[] = {81 {82 .adr = 0x000020025D071100ull,83 .num_endpoints = 1,84 .endpoints = &single_endpoint,85 .name_prefix = "rt711"86 }87};88 89static const struct snd_soc_acpi_adr_device rt1308_1_adr[] = {90 {91 .adr = 0x000120025D130800ull,92 .num_endpoints = 1,93 .endpoints = &single_endpoint,94 .name_prefix = "rt1308-1"95 }96};97 98static const struct snd_soc_acpi_adr_device rt1308_1_group1_adr[] = {99 {100 .adr = 0x000120025D130800ull,101 .num_endpoints = 1,102 .endpoints = &spk_l_endpoint,103 .name_prefix = "rt1308-1"104 }105};106 107static const struct snd_soc_acpi_adr_device rt1308_2_group1_adr[] = {108 {109 .adr = 0x000220025D130800ull,110 .num_endpoints = 1,111 .endpoints = &spk_r_endpoint,112 .name_prefix = "rt1308-2"113 }114};115 116static const struct snd_soc_acpi_adr_device rt715_3_adr[] = {117 {118 .adr = 0x000320025D071500ull,119 .num_endpoints = 1,120 .endpoints = &single_endpoint,121 .name_prefix = "rt715"122 }123};124 125static const struct snd_soc_acpi_link_adr icl_3_in_1_default[] = {126 {127 .mask = BIT(0),128 .num_adr = ARRAY_SIZE(rt711_0_adr),129 .adr_d = rt711_0_adr,130 },131 {132 .mask = BIT(1),133 .num_adr = ARRAY_SIZE(rt1308_1_group1_adr),134 .adr_d = rt1308_1_group1_adr,135 },136 {137 .mask = BIT(2),138 .num_adr = ARRAY_SIZE(rt1308_2_group1_adr),139 .adr_d = rt1308_2_group1_adr,140 },141 {142 .mask = BIT(3),143 .num_adr = ARRAY_SIZE(rt715_3_adr),144 .adr_d = rt715_3_adr,145 },146 {}147};148 149static const struct snd_soc_acpi_link_adr icl_3_in_1_mono_amp[] = {150 {151 .mask = BIT(0),152 .num_adr = ARRAY_SIZE(rt711_0_adr),153 .adr_d = rt711_0_adr,154 },155 {156 .mask = BIT(1),157 .num_adr = ARRAY_SIZE(rt1308_1_adr),158 .adr_d = rt1308_1_adr,159 },160 {161 .mask = BIT(3),162 .num_adr = ARRAY_SIZE(rt715_3_adr),163 .adr_d = rt715_3_adr,164 },165 {}166};167 168struct snd_soc_acpi_mach snd_soc_acpi_intel_icl_sdw_machines[] = {169 {170 .link_mask = 0xF, /* 4 active links required */171 .links = icl_3_in_1_default,172 .drv_name = "sof_sdw",173 .sof_tplg_filename = "sof-icl-rt711-rt1308-rt715.tplg",174 },175 {176 .link_mask = 0xB, /* 3 active links required */177 .links = icl_3_in_1_mono_amp,178 .drv_name = "sof_sdw",179 .sof_tplg_filename = "sof-icl-rt711-rt1308-rt715-mono.tplg",180 },181 {182 .link_mask = 0x1, /* rt700 connected on link0 */183 .links = icl_rvp,184 .drv_name = "sof_sdw",185 .sof_tplg_filename = "sof-icl-rt700.tplg",186 },187 {},188};189EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_icl_sdw_machines);190