18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * soc-acpi-intel-cht-match.c - tables and support for CHT ACPI enumeration.
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * Copyright (c) 2017, Intel Corporation.
68c2ecf20Sopenharmony_ci */
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_ci#include <linux/dmi.h>
98c2ecf20Sopenharmony_ci#include <sound/soc-acpi.h>
108c2ecf20Sopenharmony_ci#include <sound/soc-acpi-intel-match.h>
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_cistatic unsigned long cht_machine_id;
138c2ecf20Sopenharmony_ci
148c2ecf20Sopenharmony_ci#define CHT_SURFACE_MACH 1
158c2ecf20Sopenharmony_ci
168c2ecf20Sopenharmony_cistatic int cht_surface_quirk_cb(const struct dmi_system_id *id)
178c2ecf20Sopenharmony_ci{
188c2ecf20Sopenharmony_ci	cht_machine_id = CHT_SURFACE_MACH;
198c2ecf20Sopenharmony_ci	return 1;
208c2ecf20Sopenharmony_ci}
218c2ecf20Sopenharmony_ci
228c2ecf20Sopenharmony_cistatic const struct dmi_system_id cht_table[] = {
238c2ecf20Sopenharmony_ci	{
248c2ecf20Sopenharmony_ci		.callback = cht_surface_quirk_cb,
258c2ecf20Sopenharmony_ci		.matches = {
268c2ecf20Sopenharmony_ci			DMI_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"),
278c2ecf20Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "Surface 3"),
288c2ecf20Sopenharmony_ci		},
298c2ecf20Sopenharmony_ci	},
308c2ecf20Sopenharmony_ci	{ }
318c2ecf20Sopenharmony_ci};
328c2ecf20Sopenharmony_ci
338c2ecf20Sopenharmony_cistatic struct snd_soc_acpi_mach cht_surface_mach = {
348c2ecf20Sopenharmony_ci	.id = "10EC5640",
358c2ecf20Sopenharmony_ci	.drv_name = "cht-bsw-rt5645",
368c2ecf20Sopenharmony_ci	.fw_filename = "intel/fw_sst_22a8.bin",
378c2ecf20Sopenharmony_ci	.board = "cht-bsw",
388c2ecf20Sopenharmony_ci	.sof_fw_filename = "sof-cht.ri",
398c2ecf20Sopenharmony_ci	.sof_tplg_filename = "sof-cht-rt5645.tplg",
408c2ecf20Sopenharmony_ci};
418c2ecf20Sopenharmony_ci
428c2ecf20Sopenharmony_cistatic struct snd_soc_acpi_mach *cht_quirk(void *arg)
438c2ecf20Sopenharmony_ci{
448c2ecf20Sopenharmony_ci	struct snd_soc_acpi_mach *mach = arg;
458c2ecf20Sopenharmony_ci
468c2ecf20Sopenharmony_ci	dmi_check_system(cht_table);
478c2ecf20Sopenharmony_ci
488c2ecf20Sopenharmony_ci	if (cht_machine_id == CHT_SURFACE_MACH)
498c2ecf20Sopenharmony_ci		return &cht_surface_mach;
508c2ecf20Sopenharmony_ci	else
518c2ecf20Sopenharmony_ci		return mach;
528c2ecf20Sopenharmony_ci}
538c2ecf20Sopenharmony_ci
548c2ecf20Sopenharmony_ci/* Cherryview-based platforms: CherryTrail and Braswell */
558c2ecf20Sopenharmony_cistruct snd_soc_acpi_mach  snd_soc_acpi_intel_cherrytrail_machines[] = {
568c2ecf20Sopenharmony_ci	{
578c2ecf20Sopenharmony_ci		.id = "10EC5670",
588c2ecf20Sopenharmony_ci		.drv_name = "cht-bsw-rt5672",
598c2ecf20Sopenharmony_ci		.fw_filename = "intel/fw_sst_22a8.bin",
608c2ecf20Sopenharmony_ci		.board = "cht-bsw",
618c2ecf20Sopenharmony_ci		.sof_fw_filename = "sof-cht.ri",
628c2ecf20Sopenharmony_ci		.sof_tplg_filename = "sof-cht-rt5670.tplg",
638c2ecf20Sopenharmony_ci	},
648c2ecf20Sopenharmony_ci	{
658c2ecf20Sopenharmony_ci		.id = "10EC5672",
668c2ecf20Sopenharmony_ci		.drv_name = "cht-bsw-rt5672",
678c2ecf20Sopenharmony_ci		.fw_filename = "intel/fw_sst_22a8.bin",
688c2ecf20Sopenharmony_ci		.board = "cht-bsw",
698c2ecf20Sopenharmony_ci		.sof_fw_filename = "sof-cht.ri",
708c2ecf20Sopenharmony_ci		.sof_tplg_filename = "sof-cht-rt5670.tplg",
718c2ecf20Sopenharmony_ci	},
728c2ecf20Sopenharmony_ci	{
738c2ecf20Sopenharmony_ci		.id = "10EC5645",
748c2ecf20Sopenharmony_ci		.drv_name = "cht-bsw-rt5645",
758c2ecf20Sopenharmony_ci		.fw_filename = "intel/fw_sst_22a8.bin",
768c2ecf20Sopenharmony_ci		.board = "cht-bsw",
778c2ecf20Sopenharmony_ci		.sof_fw_filename = "sof-cht.ri",
788c2ecf20Sopenharmony_ci		.sof_tplg_filename = "sof-cht-rt5645.tplg",
798c2ecf20Sopenharmony_ci	},
808c2ecf20Sopenharmony_ci	{
818c2ecf20Sopenharmony_ci		.id = "10EC5650",
828c2ecf20Sopenharmony_ci		.drv_name = "cht-bsw-rt5645",
838c2ecf20Sopenharmony_ci		.fw_filename = "intel/fw_sst_22a8.bin",
848c2ecf20Sopenharmony_ci		.board = "cht-bsw",
858c2ecf20Sopenharmony_ci		.sof_fw_filename = "sof-cht.ri",
868c2ecf20Sopenharmony_ci		.sof_tplg_filename = "sof-cht-rt5645.tplg",
878c2ecf20Sopenharmony_ci	},
888c2ecf20Sopenharmony_ci	{
898c2ecf20Sopenharmony_ci		.id = "10EC3270",
908c2ecf20Sopenharmony_ci		.drv_name = "cht-bsw-rt5645",
918c2ecf20Sopenharmony_ci		.fw_filename = "intel/fw_sst_22a8.bin",
928c2ecf20Sopenharmony_ci		.board = "cht-bsw",
938c2ecf20Sopenharmony_ci		.sof_fw_filename = "sof-cht.ri",
948c2ecf20Sopenharmony_ci		.sof_tplg_filename = "sof-cht-rt5645.tplg",
958c2ecf20Sopenharmony_ci	},
968c2ecf20Sopenharmony_ci	{
978c2ecf20Sopenharmony_ci		.id = "193C9890",
988c2ecf20Sopenharmony_ci		.drv_name = "cht-bsw-max98090",
998c2ecf20Sopenharmony_ci		.fw_filename = "intel/fw_sst_22a8.bin",
1008c2ecf20Sopenharmony_ci		.board = "cht-bsw",
1018c2ecf20Sopenharmony_ci		.sof_fw_filename = "sof-cht.ri",
1028c2ecf20Sopenharmony_ci		.sof_tplg_filename = "sof-cht-max98090.tplg",
1038c2ecf20Sopenharmony_ci	},
1048c2ecf20Sopenharmony_ci	{
1058c2ecf20Sopenharmony_ci		.id = "10508824",
1068c2ecf20Sopenharmony_ci		.drv_name = "cht-bsw-nau8824",
1078c2ecf20Sopenharmony_ci		.fw_filename = "intel/fw_sst_22a8.bin",
1088c2ecf20Sopenharmony_ci		.board = "cht-bsw",
1098c2ecf20Sopenharmony_ci		.sof_fw_filename = "sof-cht.ri",
1108c2ecf20Sopenharmony_ci		.sof_tplg_filename = "sof-cht-nau8824.tplg",
1118c2ecf20Sopenharmony_ci	},
1128c2ecf20Sopenharmony_ci	{
1138c2ecf20Sopenharmony_ci		.id = "DLGS7212",
1148c2ecf20Sopenharmony_ci		.drv_name = "bytcht_da7213",
1158c2ecf20Sopenharmony_ci		.fw_filename = "intel/fw_sst_22a8.bin",
1168c2ecf20Sopenharmony_ci		.board = "bytcht_da7213",
1178c2ecf20Sopenharmony_ci		.sof_fw_filename = "sof-cht.ri",
1188c2ecf20Sopenharmony_ci		.sof_tplg_filename = "sof-cht-da7213.tplg",
1198c2ecf20Sopenharmony_ci	},
1208c2ecf20Sopenharmony_ci	{
1218c2ecf20Sopenharmony_ci		.id = "DLGS7213",
1228c2ecf20Sopenharmony_ci		.drv_name = "bytcht_da7213",
1238c2ecf20Sopenharmony_ci		.fw_filename = "intel/fw_sst_22a8.bin",
1248c2ecf20Sopenharmony_ci		.board = "bytcht_da7213",
1258c2ecf20Sopenharmony_ci		.sof_fw_filename = "sof-cht.ri",
1268c2ecf20Sopenharmony_ci		.sof_tplg_filename = "sof-cht-da7213.tplg",
1278c2ecf20Sopenharmony_ci	},
1288c2ecf20Sopenharmony_ci	{
1298c2ecf20Sopenharmony_ci		.id = "ESSX8316",
1308c2ecf20Sopenharmony_ci		.drv_name = "bytcht_es8316",
1318c2ecf20Sopenharmony_ci		.fw_filename = "intel/fw_sst_22a8.bin",
1328c2ecf20Sopenharmony_ci		.board = "bytcht_es8316",
1338c2ecf20Sopenharmony_ci		.sof_fw_filename = "sof-cht.ri",
1348c2ecf20Sopenharmony_ci		.sof_tplg_filename = "sof-cht-es8316.tplg",
1358c2ecf20Sopenharmony_ci	},
1368c2ecf20Sopenharmony_ci	/* some CHT-T platforms rely on RT5640, use Baytrail machine driver */
1378c2ecf20Sopenharmony_ci	{
1388c2ecf20Sopenharmony_ci		.id = "10EC5640",
1398c2ecf20Sopenharmony_ci		.drv_name = "bytcr_rt5640",
1408c2ecf20Sopenharmony_ci		.fw_filename = "intel/fw_sst_22a8.bin",
1418c2ecf20Sopenharmony_ci		.board = "bytcr_rt5640",
1428c2ecf20Sopenharmony_ci		.machine_quirk = cht_quirk,
1438c2ecf20Sopenharmony_ci		.sof_fw_filename = "sof-cht.ri",
1448c2ecf20Sopenharmony_ci		.sof_tplg_filename = "sof-cht-rt5640.tplg",
1458c2ecf20Sopenharmony_ci	},
1468c2ecf20Sopenharmony_ci	{
1478c2ecf20Sopenharmony_ci		.id = "10EC3276",
1488c2ecf20Sopenharmony_ci		.drv_name = "bytcr_rt5640",
1498c2ecf20Sopenharmony_ci		.fw_filename = "intel/fw_sst_22a8.bin",
1508c2ecf20Sopenharmony_ci		.board = "bytcr_rt5640",
1518c2ecf20Sopenharmony_ci		.sof_fw_filename = "sof-cht.ri",
1528c2ecf20Sopenharmony_ci		.sof_tplg_filename = "sof-cht-rt5640.tplg",
1538c2ecf20Sopenharmony_ci	},
1548c2ecf20Sopenharmony_ci	{
1558c2ecf20Sopenharmony_ci		.id = "10EC5682",
1568c2ecf20Sopenharmony_ci		.drv_name = "sof_rt5682",
1578c2ecf20Sopenharmony_ci		.sof_fw_filename = "sof-cht.ri",
1588c2ecf20Sopenharmony_ci		.sof_tplg_filename = "sof-cht-rt5682.tplg",
1598c2ecf20Sopenharmony_ci	},
1608c2ecf20Sopenharmony_ci	/* some CHT-T platforms rely on RT5651, use Baytrail machine driver */
1618c2ecf20Sopenharmony_ci	{
1628c2ecf20Sopenharmony_ci		.id = "10EC5651",
1638c2ecf20Sopenharmony_ci		.drv_name = "bytcr_rt5651",
1648c2ecf20Sopenharmony_ci		.fw_filename = "intel/fw_sst_22a8.bin",
1658c2ecf20Sopenharmony_ci		.board = "bytcr_rt5651",
1668c2ecf20Sopenharmony_ci		.sof_fw_filename = "sof-cht.ri",
1678c2ecf20Sopenharmony_ci		.sof_tplg_filename = "sof-cht-rt5651.tplg",
1688c2ecf20Sopenharmony_ci	},
1698c2ecf20Sopenharmony_ci	{
1708c2ecf20Sopenharmony_ci		.id = "14F10720",
1718c2ecf20Sopenharmony_ci		.drv_name = "bytcht_cx2072x",
1728c2ecf20Sopenharmony_ci		.fw_filename = "intel/fw_sst_22a8.bin",
1738c2ecf20Sopenharmony_ci		.board = "bytcht_cx2072x",
1748c2ecf20Sopenharmony_ci		.sof_fw_filename = "sof-cht.ri",
1758c2ecf20Sopenharmony_ci		.sof_tplg_filename = "sof-cht-cx2072x.tplg",
1768c2ecf20Sopenharmony_ci	},
1778c2ecf20Sopenharmony_ci	{
1788c2ecf20Sopenharmony_ci		.id = "104C5122",
1798c2ecf20Sopenharmony_ci		.drv_name = "sof_pcm512x",
1808c2ecf20Sopenharmony_ci		.sof_fw_filename = "sof-cht.ri",
1818c2ecf20Sopenharmony_ci		.sof_tplg_filename = "sof-cht-src-50khz-pcm512x.tplg",
1828c2ecf20Sopenharmony_ci	},
1838c2ecf20Sopenharmony_ci
1848c2ecf20Sopenharmony_ci#if IS_ENABLED(CONFIG_SND_SOC_INTEL_BYT_CHT_NOCODEC_MACH)
1858c2ecf20Sopenharmony_ci	/*
1868c2ecf20Sopenharmony_ci	 * This is always last in the table so that it is selected only when
1878c2ecf20Sopenharmony_ci	 * enabled explicitly and there is no codec-related information in SSDT
1888c2ecf20Sopenharmony_ci	 */
1898c2ecf20Sopenharmony_ci	{
1908c2ecf20Sopenharmony_ci		.id = "808622A8",
1918c2ecf20Sopenharmony_ci		.drv_name = "bytcht_nocodec",
1928c2ecf20Sopenharmony_ci		.fw_filename = "intel/fw_sst_22a8.bin",
1938c2ecf20Sopenharmony_ci		.board = "bytcht_nocodec",
1948c2ecf20Sopenharmony_ci	},
1958c2ecf20Sopenharmony_ci#endif
1968c2ecf20Sopenharmony_ci	{},
1978c2ecf20Sopenharmony_ci};
1988c2ecf20Sopenharmony_ciEXPORT_SYMBOL_GPL(snd_soc_acpi_intel_cherrytrail_machines);
1998c2ecf20Sopenharmony_ci
2008c2ecf20Sopenharmony_ciMODULE_LICENSE("GPL v2");
2018c2ecf20Sopenharmony_ciMODULE_DESCRIPTION("Intel Common ACPI Match module");
202