18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * soc-acpi-intel-byt-match.c - tables and support for BYT 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 byt_machine_id; 138c2ecf20Sopenharmony_ci 148c2ecf20Sopenharmony_ci#define BYT_THINKPAD_10 1 158c2ecf20Sopenharmony_ci#define BYT_POV_P1006W 2 168c2ecf20Sopenharmony_ci#define BYT_AEGEX_10 3 178c2ecf20Sopenharmony_ci 188c2ecf20Sopenharmony_cistatic int byt_thinkpad10_quirk_cb(const struct dmi_system_id *id) 198c2ecf20Sopenharmony_ci{ 208c2ecf20Sopenharmony_ci byt_machine_id = BYT_THINKPAD_10; 218c2ecf20Sopenharmony_ci return 1; 228c2ecf20Sopenharmony_ci} 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_cistatic int byt_pov_p1006w_quirk_cb(const struct dmi_system_id *id) 258c2ecf20Sopenharmony_ci{ 268c2ecf20Sopenharmony_ci byt_machine_id = BYT_POV_P1006W; 278c2ecf20Sopenharmony_ci return 1; 288c2ecf20Sopenharmony_ci} 298c2ecf20Sopenharmony_ci 308c2ecf20Sopenharmony_cistatic int byt_aegex10_quirk_cb(const struct dmi_system_id *id) 318c2ecf20Sopenharmony_ci{ 328c2ecf20Sopenharmony_ci byt_machine_id = BYT_AEGEX_10; 338c2ecf20Sopenharmony_ci return 1; 348c2ecf20Sopenharmony_ci} 358c2ecf20Sopenharmony_ci 368c2ecf20Sopenharmony_cistatic const struct dmi_system_id byt_table[] = { 378c2ecf20Sopenharmony_ci { 388c2ecf20Sopenharmony_ci .callback = byt_thinkpad10_quirk_cb, 398c2ecf20Sopenharmony_ci .matches = { 408c2ecf20Sopenharmony_ci DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), 418c2ecf20Sopenharmony_ci DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad 8"), 428c2ecf20Sopenharmony_ci }, 438c2ecf20Sopenharmony_ci }, 448c2ecf20Sopenharmony_ci { 458c2ecf20Sopenharmony_ci .callback = byt_thinkpad10_quirk_cb, 468c2ecf20Sopenharmony_ci .matches = { 478c2ecf20Sopenharmony_ci DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), 488c2ecf20Sopenharmony_ci DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad 10"), 498c2ecf20Sopenharmony_ci }, 508c2ecf20Sopenharmony_ci }, 518c2ecf20Sopenharmony_ci { 528c2ecf20Sopenharmony_ci .callback = byt_thinkpad10_quirk_cb, 538c2ecf20Sopenharmony_ci .matches = { 548c2ecf20Sopenharmony_ci DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), 558c2ecf20Sopenharmony_ci DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad Tablet B"), 568c2ecf20Sopenharmony_ci }, 578c2ecf20Sopenharmony_ci }, 588c2ecf20Sopenharmony_ci { 598c2ecf20Sopenharmony_ci .callback = byt_thinkpad10_quirk_cb, 608c2ecf20Sopenharmony_ci .matches = { 618c2ecf20Sopenharmony_ci DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), 628c2ecf20Sopenharmony_ci DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Miix 2 10"), 638c2ecf20Sopenharmony_ci }, 648c2ecf20Sopenharmony_ci }, 658c2ecf20Sopenharmony_ci { 668c2ecf20Sopenharmony_ci /* Point of View mobii wintab p1006w (v1.0) */ 678c2ecf20Sopenharmony_ci .callback = byt_pov_p1006w_quirk_cb, 688c2ecf20Sopenharmony_ci .matches = { 698c2ecf20Sopenharmony_ci DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Insyde"), 708c2ecf20Sopenharmony_ci DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "BayTrail"), 718c2ecf20Sopenharmony_ci /* Note 105b is Foxcon's USB/PCI vendor id */ 728c2ecf20Sopenharmony_ci DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "105B"), 738c2ecf20Sopenharmony_ci DMI_EXACT_MATCH(DMI_BOARD_NAME, "0E57"), 748c2ecf20Sopenharmony_ci }, 758c2ecf20Sopenharmony_ci }, 768c2ecf20Sopenharmony_ci { 778c2ecf20Sopenharmony_ci /* Aegex 10 tablet (RU2) */ 788c2ecf20Sopenharmony_ci .callback = byt_aegex10_quirk_cb, 798c2ecf20Sopenharmony_ci .matches = { 808c2ecf20Sopenharmony_ci DMI_MATCH(DMI_SYS_VENDOR, "AEGEX"), 818c2ecf20Sopenharmony_ci DMI_MATCH(DMI_PRODUCT_VERSION, "RU2"), 828c2ecf20Sopenharmony_ci }, 838c2ecf20Sopenharmony_ci }, 848c2ecf20Sopenharmony_ci { } 858c2ecf20Sopenharmony_ci}; 868c2ecf20Sopenharmony_ci 878c2ecf20Sopenharmony_ci/* The Thinkapd 10 and Aegex 10 tablets have the same ID problem */ 888c2ecf20Sopenharmony_cistatic struct snd_soc_acpi_mach byt_thinkpad_10 = { 898c2ecf20Sopenharmony_ci .id = "10EC5640", 908c2ecf20Sopenharmony_ci .drv_name = "cht-bsw-rt5672", 918c2ecf20Sopenharmony_ci .fw_filename = "intel/fw_sst_0f28.bin", 928c2ecf20Sopenharmony_ci .board = "cht-bsw", 938c2ecf20Sopenharmony_ci .sof_fw_filename = "sof-byt.ri", 948c2ecf20Sopenharmony_ci .sof_tplg_filename = "sof-byt-rt5670.tplg", 958c2ecf20Sopenharmony_ci}; 968c2ecf20Sopenharmony_ci 978c2ecf20Sopenharmony_cistatic struct snd_soc_acpi_mach byt_pov_p1006w = { 988c2ecf20Sopenharmony_ci .id = "10EC5640", 998c2ecf20Sopenharmony_ci .drv_name = "bytcr_rt5651", 1008c2ecf20Sopenharmony_ci .fw_filename = "intel/fw_sst_0f28.bin", 1018c2ecf20Sopenharmony_ci .board = "bytcr_rt5651", 1028c2ecf20Sopenharmony_ci .sof_fw_filename = "sof-byt.ri", 1038c2ecf20Sopenharmony_ci .sof_tplg_filename = "sof-byt-rt5651.tplg", 1048c2ecf20Sopenharmony_ci}; 1058c2ecf20Sopenharmony_ci 1068c2ecf20Sopenharmony_cistatic struct snd_soc_acpi_mach *byt_quirk(void *arg) 1078c2ecf20Sopenharmony_ci{ 1088c2ecf20Sopenharmony_ci struct snd_soc_acpi_mach *mach = arg; 1098c2ecf20Sopenharmony_ci 1108c2ecf20Sopenharmony_ci dmi_check_system(byt_table); 1118c2ecf20Sopenharmony_ci 1128c2ecf20Sopenharmony_ci switch (byt_machine_id) { 1138c2ecf20Sopenharmony_ci case BYT_THINKPAD_10: 1148c2ecf20Sopenharmony_ci case BYT_AEGEX_10: 1158c2ecf20Sopenharmony_ci return &byt_thinkpad_10; 1168c2ecf20Sopenharmony_ci case BYT_POV_P1006W: 1178c2ecf20Sopenharmony_ci return &byt_pov_p1006w; 1188c2ecf20Sopenharmony_ci default: 1198c2ecf20Sopenharmony_ci return mach; 1208c2ecf20Sopenharmony_ci } 1218c2ecf20Sopenharmony_ci} 1228c2ecf20Sopenharmony_ci 1238c2ecf20Sopenharmony_cistruct snd_soc_acpi_mach snd_soc_acpi_intel_baytrail_machines[] = { 1248c2ecf20Sopenharmony_ci { 1258c2ecf20Sopenharmony_ci .id = "10EC5640", 1268c2ecf20Sopenharmony_ci .drv_name = "bytcr_rt5640", 1278c2ecf20Sopenharmony_ci .fw_filename = "intel/fw_sst_0f28.bin", 1288c2ecf20Sopenharmony_ci .board = "bytcr_rt5640", 1298c2ecf20Sopenharmony_ci .machine_quirk = byt_quirk, 1308c2ecf20Sopenharmony_ci .sof_fw_filename = "sof-byt.ri", 1318c2ecf20Sopenharmony_ci .sof_tplg_filename = "sof-byt-rt5640.tplg", 1328c2ecf20Sopenharmony_ci }, 1338c2ecf20Sopenharmony_ci { 1348c2ecf20Sopenharmony_ci .id = "10EC5642", 1358c2ecf20Sopenharmony_ci .drv_name = "bytcr_rt5640", 1368c2ecf20Sopenharmony_ci .fw_filename = "intel/fw_sst_0f28.bin", 1378c2ecf20Sopenharmony_ci .board = "bytcr_rt5640", 1388c2ecf20Sopenharmony_ci .sof_fw_filename = "sof-byt.ri", 1398c2ecf20Sopenharmony_ci .sof_tplg_filename = "sof-byt-rt5640.tplg", 1408c2ecf20Sopenharmony_ci }, 1418c2ecf20Sopenharmony_ci { 1428c2ecf20Sopenharmony_ci .id = "INTCCFFD", 1438c2ecf20Sopenharmony_ci .drv_name = "bytcr_rt5640", 1448c2ecf20Sopenharmony_ci .fw_filename = "intel/fw_sst_0f28.bin", 1458c2ecf20Sopenharmony_ci .board = "bytcr_rt5640", 1468c2ecf20Sopenharmony_ci .sof_fw_filename = "sof-byt.ri", 1478c2ecf20Sopenharmony_ci .sof_tplg_filename = "sof-byt-rt5640.tplg", 1488c2ecf20Sopenharmony_ci }, 1498c2ecf20Sopenharmony_ci { 1508c2ecf20Sopenharmony_ci .id = "10EC5651", 1518c2ecf20Sopenharmony_ci .drv_name = "bytcr_rt5651", 1528c2ecf20Sopenharmony_ci .fw_filename = "intel/fw_sst_0f28.bin", 1538c2ecf20Sopenharmony_ci .board = "bytcr_rt5651", 1548c2ecf20Sopenharmony_ci .sof_fw_filename = "sof-byt.ri", 1558c2ecf20Sopenharmony_ci .sof_tplg_filename = "sof-byt-rt5651.tplg", 1568c2ecf20Sopenharmony_ci }, 1578c2ecf20Sopenharmony_ci { 1588c2ecf20Sopenharmony_ci .id = "DLGS7212", 1598c2ecf20Sopenharmony_ci .drv_name = "bytcht_da7213", 1608c2ecf20Sopenharmony_ci .fw_filename = "intel/fw_sst_0f28.bin", 1618c2ecf20Sopenharmony_ci .board = "bytcht_da7213", 1628c2ecf20Sopenharmony_ci .sof_fw_filename = "sof-byt.ri", 1638c2ecf20Sopenharmony_ci .sof_tplg_filename = "sof-byt-da7213.tplg", 1648c2ecf20Sopenharmony_ci }, 1658c2ecf20Sopenharmony_ci { 1668c2ecf20Sopenharmony_ci .id = "DLGS7213", 1678c2ecf20Sopenharmony_ci .drv_name = "bytcht_da7213", 1688c2ecf20Sopenharmony_ci .fw_filename = "intel/fw_sst_0f28.bin", 1698c2ecf20Sopenharmony_ci .board = "bytcht_da7213", 1708c2ecf20Sopenharmony_ci .sof_fw_filename = "sof-byt.ri", 1718c2ecf20Sopenharmony_ci .sof_tplg_filename = "sof-byt-da7213.tplg", 1728c2ecf20Sopenharmony_ci }, 1738c2ecf20Sopenharmony_ci { 1748c2ecf20Sopenharmony_ci .id = "ESSX8316", 1758c2ecf20Sopenharmony_ci .drv_name = "bytcht_es8316", 1768c2ecf20Sopenharmony_ci .fw_filename = "intel/fw_sst_0f28.bin", 1778c2ecf20Sopenharmony_ci .board = "bytcht_es8316", 1788c2ecf20Sopenharmony_ci .sof_fw_filename = "sof-byt.ri", 1798c2ecf20Sopenharmony_ci .sof_tplg_filename = "sof-byt-es8316.tplg", 1808c2ecf20Sopenharmony_ci }, 1818c2ecf20Sopenharmony_ci { 1828c2ecf20Sopenharmony_ci .id = "10EC5682", 1838c2ecf20Sopenharmony_ci .drv_name = "sof_rt5682", 1848c2ecf20Sopenharmony_ci .sof_fw_filename = "sof-byt.ri", 1858c2ecf20Sopenharmony_ci .sof_tplg_filename = "sof-byt-rt5682.tplg", 1868c2ecf20Sopenharmony_ci }, 1878c2ecf20Sopenharmony_ci /* some Baytrail platforms rely on RT5645, use CHT machine driver */ 1888c2ecf20Sopenharmony_ci { 1898c2ecf20Sopenharmony_ci .id = "10EC5645", 1908c2ecf20Sopenharmony_ci .drv_name = "cht-bsw-rt5645", 1918c2ecf20Sopenharmony_ci .fw_filename = "intel/fw_sst_0f28.bin", 1928c2ecf20Sopenharmony_ci .board = "cht-bsw", 1938c2ecf20Sopenharmony_ci .sof_fw_filename = "sof-byt.ri", 1948c2ecf20Sopenharmony_ci .sof_tplg_filename = "sof-byt-rt5645.tplg", 1958c2ecf20Sopenharmony_ci }, 1968c2ecf20Sopenharmony_ci { 1978c2ecf20Sopenharmony_ci .id = "10EC5648", 1988c2ecf20Sopenharmony_ci .drv_name = "cht-bsw-rt5645", 1998c2ecf20Sopenharmony_ci .fw_filename = "intel/fw_sst_0f28.bin", 2008c2ecf20Sopenharmony_ci .board = "cht-bsw", 2018c2ecf20Sopenharmony_ci .sof_fw_filename = "sof-byt.ri", 2028c2ecf20Sopenharmony_ci .sof_tplg_filename = "sof-byt-rt5645.tplg", 2038c2ecf20Sopenharmony_ci }, 2048c2ecf20Sopenharmony_ci /* use CHT driver to Baytrail Chromebooks */ 2058c2ecf20Sopenharmony_ci { 2068c2ecf20Sopenharmony_ci .id = "193C9890", 2078c2ecf20Sopenharmony_ci .drv_name = "cht-bsw-max98090", 2088c2ecf20Sopenharmony_ci .fw_filename = "intel/fw_sst_0f28.bin", 2098c2ecf20Sopenharmony_ci .board = "cht-bsw", 2108c2ecf20Sopenharmony_ci .sof_fw_filename = "sof-byt.ri", 2118c2ecf20Sopenharmony_ci .sof_tplg_filename = "sof-byt-max98090.tplg", 2128c2ecf20Sopenharmony_ci }, 2138c2ecf20Sopenharmony_ci { 2148c2ecf20Sopenharmony_ci .id = "14F10720", 2158c2ecf20Sopenharmony_ci .drv_name = "bytcht_cx2072x", 2168c2ecf20Sopenharmony_ci .fw_filename = "intel/fw_sst_0f28.bin", 2178c2ecf20Sopenharmony_ci .board = "bytcht_cx2072x", 2188c2ecf20Sopenharmony_ci .sof_fw_filename = "sof-byt.ri", 2198c2ecf20Sopenharmony_ci .sof_tplg_filename = "sof-byt-cx2072x.tplg", 2208c2ecf20Sopenharmony_ci }, 2218c2ecf20Sopenharmony_ci#if IS_ENABLED(CONFIG_SND_SOC_INTEL_BYT_CHT_NOCODEC_MACH) 2228c2ecf20Sopenharmony_ci /* 2238c2ecf20Sopenharmony_ci * This is always last in the table so that it is selected only when 2248c2ecf20Sopenharmony_ci * enabled explicitly and there is no codec-related information in SSDT 2258c2ecf20Sopenharmony_ci */ 2268c2ecf20Sopenharmony_ci { 2278c2ecf20Sopenharmony_ci .id = "80860F28", 2288c2ecf20Sopenharmony_ci .drv_name = "bytcht_nocodec", 2298c2ecf20Sopenharmony_ci .fw_filename = "intel/fw_sst_0f28.bin", 2308c2ecf20Sopenharmony_ci .board = "bytcht_nocodec", 2318c2ecf20Sopenharmony_ci }, 2328c2ecf20Sopenharmony_ci#endif 2338c2ecf20Sopenharmony_ci {}, 2348c2ecf20Sopenharmony_ci}; 2358c2ecf20Sopenharmony_ciEXPORT_SYMBOL_GPL(snd_soc_acpi_intel_baytrail_machines); 2368c2ecf20Sopenharmony_ci 2378c2ecf20Sopenharmony_ciMODULE_LICENSE("GPL v2"); 2388c2ecf20Sopenharmony_ciMODULE_DESCRIPTION("Intel Common ACPI Match module"); 239