brintos

brintos / linux-shallow public Read only

0
0
Text · 7.0 KiB · f79d755 Raw
315 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2/*3 * soc-acpi-intel-cml-match.c - tables and support for CML ACPI enumeration.4 *5 * Copyright (c) 2019, 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 17static const struct snd_soc_acpi_codecs rt1011_spk_codecs = {18	.num_codecs = 1,19	.codecs = {"10EC1011"}20};21 22static const struct snd_soc_acpi_codecs rt1015_spk_codecs = {23	.num_codecs = 1,24	.codecs = {"10EC1015"}25};26 27static const struct snd_soc_acpi_codecs max98357a_spk_codecs = {28	.num_codecs = 1,29	.codecs = {"MX98357A"}30};31 32static const struct snd_soc_acpi_codecs max98390_spk_codecs = {33	.num_codecs = 1,34	.codecs = {"MX98390"}35};36 37/*38 * The order of the three entries with .id = "10EC5682" matters39 * here, because DSDT tables expose an ACPI HID for the MAX98357A40 * speaker amplifier which is not populated on the board.41 */42struct snd_soc_acpi_mach snd_soc_acpi_intel_cml_machines[] = {43	{44		.id = "10EC5682",45		.drv_name = "cml_rt5682_def",46		.machine_quirk = snd_soc_acpi_codec_list,47		.quirk_data = &rt1011_spk_codecs,48		.sof_tplg_filename = "sof-cml-rt1011-rt5682.tplg",49	},50	{51		.id = "10EC5682",52		.drv_name = "cml_rt5682_def",53		.machine_quirk = snd_soc_acpi_codec_list,54		.quirk_data = &rt1015_spk_codecs,55		.sof_tplg_filename = "sof-cml-rt1011-rt5682.tplg",56	},57	{58		.id = "10EC5682",59		.drv_name = "cml_rt5682_def",60		.machine_quirk = snd_soc_acpi_codec_list,61		.quirk_data = &max98357a_spk_codecs,62		.sof_tplg_filename = "sof-cml-rt5682-max98357a.tplg",63	},64	{65		.id = "10EC5682",66		.drv_name = "cml_rt5682_def",67		.sof_tplg_filename = "sof-cml-rt5682.tplg",68	},69	{70		.id = "DLGS7219",71		.drv_name = "cml_da7219_def",72		.machine_quirk = snd_soc_acpi_codec_list,73		.quirk_data = &max98357a_spk_codecs,74		.sof_tplg_filename = "sof-cml-da7219-max98357a.tplg",75	},76	{77		.id = "DLGS7219",78		.drv_name = "cml_da7219_def",79		.machine_quirk = snd_soc_acpi_codec_list,80		.quirk_data = &max98390_spk_codecs,81		.sof_tplg_filename = "sof-cml-da7219-max98390.tplg",82	},83	{84		.comp_ids = &essx_83x6,85		.drv_name = "sof-essx8336",86		.sof_tplg_filename = "sof-cml-es8336", /* the tplg suffix is added at run time */87		.tplg_quirk_mask = SND_SOC_ACPI_TPLG_INTEL_SSP_NUMBER |88					SND_SOC_ACPI_TPLG_INTEL_SSP_MSB |89					SND_SOC_ACPI_TPLG_INTEL_DMIC_NUMBER,90	},91	{},92};93EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_cml_machines);94 95static const struct snd_soc_acpi_endpoint single_endpoint = {96	.num = 0,97	.aggregated = 0,98	.group_position = 0,99	.group_id = 0,100};101 102static const struct snd_soc_acpi_endpoint spk_l_endpoint = {103	.num = 0,104	.aggregated = 1,105	.group_position = 0,106	.group_id = 1,107};108 109static const struct snd_soc_acpi_endpoint spk_r_endpoint = {110	.num = 0,111	.aggregated = 1,112	.group_position = 1,113	.group_id = 1,114};115 116static const struct snd_soc_acpi_adr_device rt700_1_adr[] = {117	{118		.adr = 0x000110025D070000ull,119		.num_endpoints = 1,120		.endpoints = &single_endpoint,121		.name_prefix = "rt700"122	}123};124 125static const struct snd_soc_acpi_link_adr cml_rvp[] = {126	{127		.mask = BIT(1),128		.num_adr = ARRAY_SIZE(rt700_1_adr),129		.adr_d = rt700_1_adr,130	},131	{}132};133 134static const struct snd_soc_acpi_adr_device rt711_0_adr[] = {135	{136		.adr = 0x000020025D071100ull,137		.num_endpoints = 1,138		.endpoints = &single_endpoint,139		.name_prefix = "rt711"140	}141};142 143static const struct snd_soc_acpi_adr_device rt1308_1_single_adr[] = {144	{145		.adr = 0x000120025D130800ull,146		.num_endpoints = 1,147		.endpoints = &single_endpoint,148		.name_prefix = "rt1308-1"149	}150};151 152static const struct snd_soc_acpi_adr_device rt1308_1_group1_adr[] = {153	{154		.adr = 0x000120025D130800ull,155		.num_endpoints = 1,156		.endpoints = &spk_l_endpoint,157		.name_prefix = "rt1308-1"158	}159};160 161static const struct snd_soc_acpi_adr_device rt1308_2_group1_adr[] = {162	{163		.adr = 0x000220025D130800ull,164		.num_endpoints = 1,165		.endpoints = &spk_r_endpoint,166		.name_prefix = "rt1308-2"167	}168};169 170static const struct snd_soc_acpi_adr_device rt715_3_adr[] = {171	{172		.adr = 0x000320025D071500ull,173		.num_endpoints = 1,174		.endpoints = &single_endpoint,175		.name_prefix = "rt715"176	}177};178 179static const struct snd_soc_acpi_adr_device rt711_sdca_0_adr[] = {180	{181		.adr = 0x000030025D071101ull,182		.num_endpoints = 1,183		.endpoints = &single_endpoint,184		.name_prefix = "rt711"185	}186};187 188static const struct snd_soc_acpi_adr_device rt1316_1_group1_adr[] = {189	{190		.adr = 0x000131025D131601ull, /* unique ID is set for some reason */191		.num_endpoints = 1,192		.endpoints = &spk_l_endpoint,193		.name_prefix = "rt1316-1"194	}195};196 197static const struct snd_soc_acpi_adr_device rt1316_2_group1_adr[] = {198	{199		.adr = 0x000230025D131601ull,200		.num_endpoints = 1,201		.endpoints = &spk_r_endpoint,202		.name_prefix = "rt1316-2"203	}204};205 206static const struct snd_soc_acpi_adr_device rt714_3_adr[] = {207	{208		.adr = 0x000330025D071401ull,209		.num_endpoints = 1,210		.endpoints = &single_endpoint,211		.name_prefix = "rt714"212	}213};214 215static const struct snd_soc_acpi_link_adr cml_3_in_1_default[] = {216	{217		.mask = BIT(0),218		.num_adr = ARRAY_SIZE(rt711_0_adr),219		.adr_d = rt711_0_adr,220	},221	{222		.mask = BIT(1),223		.num_adr = ARRAY_SIZE(rt1308_1_group1_adr),224		.adr_d = rt1308_1_group1_adr,225	},226	{227		.mask = BIT(2),228		.num_adr = ARRAY_SIZE(rt1308_2_group1_adr),229		.adr_d = rt1308_2_group1_adr,230	},231	{232		.mask = BIT(3),233		.num_adr = ARRAY_SIZE(rt715_3_adr),234		.adr_d = rt715_3_adr,235	},236	{}237};238 239static const struct snd_soc_acpi_link_adr cml_3_in_1_mono_amp[] = {240	{241		.mask = BIT(0),242		.num_adr = ARRAY_SIZE(rt711_0_adr),243		.adr_d = rt711_0_adr,244	},245	{246		.mask = BIT(1),247		.num_adr = ARRAY_SIZE(rt1308_1_single_adr),248		.adr_d = rt1308_1_single_adr,249	},250	{251		.mask = BIT(3),252		.num_adr = ARRAY_SIZE(rt715_3_adr),253		.adr_d = rt715_3_adr,254	},255	{}256};257 258static const struct snd_soc_acpi_link_adr cml_3_in_1_sdca[] = {259	{260		.mask = BIT(0),261		.num_adr = ARRAY_SIZE(rt711_sdca_0_adr),262		.adr_d = rt711_sdca_0_adr,263	},264	{265		.mask = BIT(1),266		.num_adr = ARRAY_SIZE(rt1316_1_group1_adr),267		.adr_d = rt1316_1_group1_adr,268	},269	{270		.mask = BIT(2),271		.num_adr = ARRAY_SIZE(rt1316_2_group1_adr),272		.adr_d = rt1316_2_group1_adr,273	},274	{275		.mask = BIT(3),276		.num_adr = ARRAY_SIZE(rt714_3_adr),277		.adr_d = rt714_3_adr,278	},279	{}280};281 282struct snd_soc_acpi_mach snd_soc_acpi_intel_cml_sdw_machines[] = {283	{284		.link_mask = 0xF, /* 4 active links required */285		.links = cml_3_in_1_default,286		.drv_name = "sof_sdw",287		.sof_tplg_filename = "sof-cml-rt711-rt1308-rt715.tplg",288	},289	{290		.link_mask = 0xF, /* 4 active links required */291		.links = cml_3_in_1_sdca,292		.drv_name = "sof_sdw",293		.sof_tplg_filename = "sof-cml-rt711-rt1316-rt714.tplg",294	},295	{296		/*297		 * link_mask should be 0xB, but all links are enabled by BIOS.298		 * This entry will be selected if there is no rt1308 exposed299		 * on link2 since it will fail to match the above entry.300		 */301		.link_mask = 0xF,302		.links = cml_3_in_1_mono_amp,303		.drv_name = "sof_sdw",304		.sof_tplg_filename = "sof-cml-rt711-rt1308-mono-rt715.tplg",305	},306	{307		.link_mask = 0x2, /* RT700 connected on Link1 */308		.links = cml_rvp,309		.drv_name = "sof_sdw",310		.sof_tplg_filename = "sof-cml-rt700.tplg",311	},312	{}313};314EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_cml_sdw_machines);315