brintos

brintos / linux-shallow public Read only

0
0
Text · 7.7 KiB · 365209e Raw
338 lines · c
1// SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause)2//3// This file is provided under a dual BSD/GPLv2 license. When using or4// redistributing this file, you may do so under either license.5//6// Copyright(c) 2021, 2023 Advanced Micro Devices, Inc.7//8// Authors: Ajit Kumar Pandey <AjitKumar.Pandey@amd.com>9//10 11/* ACP machine configuration module */12 13#include <linux/acpi.h>14#include <linux/bits.h>15#include <linux/dmi.h>16#include <linux/module.h>17#include <linux/pci.h>18 19#include "../sof/amd/acp.h"20#include "mach-config.h"21 22#define ACP_7_0_REV	0x7023 24static int acp_quirk_data;25 26static const struct config_entry config_table[] = {27	{28		.flags = FLAG_AMD_SOF,29		.device = ACP_PCI_DEV_ID,30		.dmi_table = (const struct dmi_system_id []) {31			{32				.matches = {33					DMI_MATCH(DMI_SYS_VENDOR, "AMD"),34					DMI_MATCH(DMI_PRODUCT_NAME, "Majolica-CZN"),35				},36			},37			{}38		},39	},40	{41		.flags = FLAG_AMD_SOF,42		.device = ACP_PCI_DEV_ID,43		.dmi_table = (const struct dmi_system_id []) {44			{45				.matches = {46					DMI_MATCH(DMI_SYS_VENDOR, "Google"),47				},48			},49			{}50		},51	},52	{53		.flags = FLAG_AMD_LEGACY,54		.device = ACP_PCI_DEV_ID,55		.dmi_table = (const struct dmi_system_id []) {56			{57				.matches = {58					DMI_MATCH(DMI_SYS_VENDOR, "Valve"),59					DMI_MATCH(DMI_PRODUCT_NAME, "Jupiter"),60				},61			},62			{}63		},64	},65	{66		.flags = FLAG_AMD_SOF,67		.device = ACP_PCI_DEV_ID,68		.dmi_table = (const struct dmi_system_id []) {69			{70				.matches = {71					DMI_MATCH(DMI_SYS_VENDOR, "Valve"),72					DMI_MATCH(DMI_PRODUCT_NAME, "Galileo"),73				},74			},75			{}76		},77	},78	{79		.flags = FLAG_AMD_LEGACY,80		.device = ACP_PCI_DEV_ID,81		.dmi_table = (const struct dmi_system_id []) {82			{83				.matches = {84					DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "HUAWEI"),85					DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "KLVL-WXXW"),86					DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "M1010"),87				},88			},89			{}90		},91	},92	{93		.flags = FLAG_AMD_LEGACY,94		.device = ACP_PCI_DEV_ID,95		.dmi_table = (const struct dmi_system_id []) {96			{97				.matches = {98					DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "HUAWEI"),99					DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "KLVL-WXX9"),100					DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "M1010"),101				},102			},103			{}104		},105	},106	{107		.flags = FLAG_AMD_LEGACY,108		.device = ACP_PCI_DEV_ID,109		.dmi_table = (const struct dmi_system_id []) {110			{111				.matches = {112					DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "HUAWEI"),113					DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "BOM-WXX9"),114					DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "M1010"),115				},116			},117			{}118		},119	},120	{121		.flags = FLAG_AMD_LEGACY,122		.device = ACP_PCI_DEV_ID,123		.dmi_table = (const struct dmi_system_id []) {124			{125				.matches = {126					DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "HUAWEI"),127					DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "HVY-WXX9"),128					DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "M1010"),129				},130			},131			{}132		},133	},134	{135		.flags = FLAG_AMD_LEGACY,136		.device = ACP_PCI_DEV_ID,137		.dmi_table = (const struct dmi_system_id []) {138			{139				.matches = {140					DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "HUAWEI"),141					DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "HVY-WXX9"),142					DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "M1020"),143				},144			},145			{}146		},147	},148	{149		.flags = FLAG_AMD_LEGACY,150		.device = ACP_PCI_DEV_ID,151		.dmi_table = (const struct dmi_system_id []) {152			{153				.matches = {154					DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "HUAWEI"),155					DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "HVY-WXX9"),156					DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "M1040"),157				},158			},159			{}160		},161	},162};163 164static int snd_amd_acp_acpi_find_config(struct pci_dev *pci)165{166	const union acpi_object *obj;167	int acp_flag = FLAG_AMD_LEGACY_ONLY_DMIC;168 169	if (!acpi_dev_get_property(ACPI_COMPANION(&pci->dev), "acp-audio-config-flag",170				   ACPI_TYPE_INTEGER, &obj))171		acp_flag = obj->integer.value;172 173	return acp_flag;174}175 176int snd_amd_acp_find_config(struct pci_dev *pci)177{178	const struct config_entry *table = config_table;179	u16 device = pci->device;180	int i;181 182	/* Do not enable FLAGS on older platforms with Rev Id zero183	 * For platforms which has ACP 7.0 or higher, read the acp184	 * config flag from BIOS ACPI table and for older platforms185	 * read it from DMI tables.186	 */187	if (!pci->revision)188		return 0;189	else if (pci->revision >= ACP_7_0_REV)190		return snd_amd_acp_acpi_find_config(pci);191 192	for (i = 0; i < ARRAY_SIZE(config_table); i++, table++) {193		if (table->device != device)194			continue;195		if (table->dmi_table && !dmi_check_system(table->dmi_table))196			continue;197		acp_quirk_data = table->flags;198		return table->flags;199	}200 201	return 0;202}203EXPORT_SYMBOL(snd_amd_acp_find_config);204 205static struct snd_soc_acpi_codecs amp_rt1019 = {206	.num_codecs = 1,207	.codecs = {"10EC1019"}208};209 210static struct snd_soc_acpi_codecs amp_max = {211	.num_codecs = 1,212	.codecs = {"MX98360A"}213};214 215static struct snd_soc_acpi_codecs amp_max98388 = {216	.num_codecs = 1,217	.codecs = {"ADS8388"}218};219 220struct snd_soc_acpi_mach snd_soc_acpi_amd_sof_machines[] = {221	{222		.id = "10EC5682",223		.drv_name = "rt5682-rt1019",224		.pdata = (void *)&acp_quirk_data,225		.machine_quirk = snd_soc_acpi_codec_list,226		.quirk_data = &amp_rt1019,227		.fw_filename = "sof-rn.ri",228		.sof_tplg_filename = "sof-rn-rt5682-rt1019.tplg",229	},230	{231		.id = "10EC5682",232		.drv_name = "rt5682-max",233		.pdata = (void *)&acp_quirk_data,234		.machine_quirk = snd_soc_acpi_codec_list,235		.quirk_data = &amp_max,236		.fw_filename = "sof-rn.ri",237		.sof_tplg_filename = "sof-rn-rt5682-max98360.tplg",238	},239	{240		.id = "RTL5682",241		.drv_name = "rt5682s-max",242		.pdata = (void *)&acp_quirk_data,243		.machine_quirk = snd_soc_acpi_codec_list,244		.quirk_data = &amp_max,245		.fw_filename = "sof-rn.ri",246		.sof_tplg_filename = "sof-rn-rt5682-max98360.tplg",247	},248	{249		.id = "RTL5682",250		.drv_name = "rt5682s-rt1019",251		.pdata = (void *)&acp_quirk_data,252		.machine_quirk = snd_soc_acpi_codec_list,253		.quirk_data = &amp_rt1019,254		.fw_filename = "sof-rn.ri",255		.sof_tplg_filename = "sof-rn-rt5682-rt1019.tplg",256	},257	{258		.id = "AMDI1019",259		.drv_name = "renoir-dsp",260		.pdata = (void *)&acp_quirk_data,261		.fw_filename = "sof-rn.ri",262		.sof_tplg_filename = "sof-acp.tplg",263	},264	{},265};266EXPORT_SYMBOL(snd_soc_acpi_amd_sof_machines);267 268struct snd_soc_acpi_mach snd_soc_acpi_amd_vangogh_sof_machines[] = {269	{270		.id = "NVTN2020",271		.drv_name = "nau8821-max",272		.pdata = &acp_quirk_data,273		.machine_quirk = snd_soc_acpi_codec_list,274		.quirk_data = &amp_max98388,275		.fw_filename = "sof-vangogh.ri",276		.sof_tplg_filename = "sof-vangogh-nau8821-max.tplg",277	},278	{},279};280EXPORT_SYMBOL(snd_soc_acpi_amd_vangogh_sof_machines);281 282struct snd_soc_acpi_mach snd_soc_acpi_amd_rmb_sof_machines[] = {283	{284		.id = "AMDI1019",285		.drv_name = "rmb-dsp",286		.pdata = &acp_quirk_data,287		.fw_filename = "sof-rmb.ri",288		.sof_tplg_filename = "sof-acp-rmb.tplg",289	},290	{291		.id = "10508825",292		.drv_name = "nau8825-max",293		.pdata = &acp_quirk_data,294		.machine_quirk = snd_soc_acpi_codec_list,295		.quirk_data = &amp_max,296		.fw_filename = "sof-rmb.ri",297		.sof_tplg_filename = "sof-rmb-nau8825-max98360.tplg",298	},299	{300		.id = "RTL5682",301		.drv_name = "rt5682s-hs-rt1019",302		.pdata = &acp_quirk_data,303		.machine_quirk = snd_soc_acpi_codec_list,304		.quirk_data = &amp_rt1019,305		.fw_filename = "sof-rmb.ri",306		.sof_tplg_filename = "sof-rmb-rt5682s-rt1019.tplg",307	},308	{},309};310EXPORT_SYMBOL(snd_soc_acpi_amd_rmb_sof_machines);311 312struct snd_soc_acpi_mach snd_soc_acpi_amd_acp63_sof_machines[] = {313	{314		.id = "AMDI1019",315		.drv_name = "acp63-dsp",316		.pdata = &acp_quirk_data,317		.fw_filename = "sof-acp_6_3.ri",318		.sof_tplg_filename = "sof-acp_6_3.tplg",319	},320	{},321};322EXPORT_SYMBOL(snd_soc_acpi_amd_acp63_sof_machines);323 324struct snd_soc_acpi_mach snd_soc_acpi_amd_acp70_sof_machines[] = {325	{326		.id = "AMDI1010",327		.drv_name = "acp70-dsp",328		.pdata = &acp_quirk_data,329		.fw_filename = "sof-acp_7_0.ri",330		.sof_tplg_filename = "sof-acp_7_0.tplg",331	},332	{},333};334EXPORT_SYMBOL(snd_soc_acpi_amd_acp70_sof_machines);335 336MODULE_DESCRIPTION("AMD ACP Machine Configuration Module");337MODULE_LICENSE("Dual BSD/GPL");338