160046406SPierre-Louis Bossart /* 260046406SPierre-Louis Bossart * soc-apci-intel-byt-match.c - tables and support for BYT ACPI enumeration. 360046406SPierre-Louis Bossart * 460046406SPierre-Louis Bossart * Copyright (c) 2017, Intel Corporation. 560046406SPierre-Louis Bossart * 660046406SPierre-Louis Bossart * 760046406SPierre-Louis Bossart * This program is free software; you can redistribute it and/or modify it 860046406SPierre-Louis Bossart * under the terms and conditions of the GNU General Public License, 960046406SPierre-Louis Bossart * version 2, as published by the Free Software Foundation. 1060046406SPierre-Louis Bossart * 1160046406SPierre-Louis Bossart * This program is distributed in the hope it will be useful, but WITHOUT 1260046406SPierre-Louis Bossart * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 1360046406SPierre-Louis Bossart * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 1460046406SPierre-Louis Bossart * more details. 1560046406SPierre-Louis Bossart */ 1660046406SPierre-Louis Bossart 1760046406SPierre-Louis Bossart #include <linux/dmi.h> 1860046406SPierre-Louis Bossart #include <sound/soc-acpi.h> 1960046406SPierre-Louis Bossart #include <sound/soc-acpi-intel-match.h> 2060046406SPierre-Louis Bossart 2160046406SPierre-Louis Bossart static unsigned long byt_machine_id; 2260046406SPierre-Louis Bossart 2360046406SPierre-Louis Bossart #define BYT_THINKPAD_10 1 2460046406SPierre-Louis Bossart 2560046406SPierre-Louis Bossart static int byt_thinkpad10_quirk_cb(const struct dmi_system_id *id) 2660046406SPierre-Louis Bossart { 2760046406SPierre-Louis Bossart byt_machine_id = BYT_THINKPAD_10; 2860046406SPierre-Louis Bossart return 1; 2960046406SPierre-Louis Bossart } 3060046406SPierre-Louis Bossart 3160046406SPierre-Louis Bossart 3260046406SPierre-Louis Bossart static const struct dmi_system_id byt_table[] = { 3360046406SPierre-Louis Bossart { 3460046406SPierre-Louis Bossart .callback = byt_thinkpad10_quirk_cb, 3560046406SPierre-Louis Bossart .matches = { 3660046406SPierre-Louis Bossart DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), 372ca426a2SHans de Goede DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad 8"), 382ca426a2SHans de Goede }, 392ca426a2SHans de Goede }, 402ca426a2SHans de Goede { 412ca426a2SHans de Goede .callback = byt_thinkpad10_quirk_cb, 422ca426a2SHans de Goede .matches = { 432ca426a2SHans de Goede DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), 4460046406SPierre-Louis Bossart DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad 10"), 4560046406SPierre-Louis Bossart }, 4660046406SPierre-Louis Bossart }, 4760046406SPierre-Louis Bossart { 4860046406SPierre-Louis Bossart .callback = byt_thinkpad10_quirk_cb, 4960046406SPierre-Louis Bossart .matches = { 5060046406SPierre-Louis Bossart DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), 5160046406SPierre-Louis Bossart DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad Tablet B"), 5260046406SPierre-Louis Bossart }, 5360046406SPierre-Louis Bossart }, 5460046406SPierre-Louis Bossart { 5560046406SPierre-Louis Bossart .callback = byt_thinkpad10_quirk_cb, 5660046406SPierre-Louis Bossart .matches = { 5760046406SPierre-Louis Bossart DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), 5860046406SPierre-Louis Bossart DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Miix 2 10"), 5960046406SPierre-Louis Bossart }, 6060046406SPierre-Louis Bossart }, 6160046406SPierre-Louis Bossart { } 6260046406SPierre-Louis Bossart }; 6360046406SPierre-Louis Bossart 6460046406SPierre-Louis Bossart static struct snd_soc_acpi_mach byt_thinkpad_10 = { 6560046406SPierre-Louis Bossart .id = "10EC5640", 6660046406SPierre-Louis Bossart .drv_name = "cht-bsw-rt5672", 6760046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 6860046406SPierre-Louis Bossart .board = "cht-bsw", 694f722a6aSPierre-Louis Bossart .sof_fw_filename = "intel/sof-byt.ri", 704f722a6aSPierre-Louis Bossart .sof_tplg_filename = "intel/sof-byt-rt5670.tplg", 71c1a8ed69SPierre-Louis Bossart .asoc_plat_name = "sst-mfld-platform", 7260046406SPierre-Louis Bossart }; 7360046406SPierre-Louis Bossart 7460046406SPierre-Louis Bossart static struct snd_soc_acpi_mach *byt_quirk(void *arg) 7560046406SPierre-Louis Bossart { 7660046406SPierre-Louis Bossart struct snd_soc_acpi_mach *mach = arg; 7760046406SPierre-Louis Bossart 7860046406SPierre-Louis Bossart dmi_check_system(byt_table); 7960046406SPierre-Louis Bossart 8060046406SPierre-Louis Bossart if (byt_machine_id == BYT_THINKPAD_10) 8160046406SPierre-Louis Bossart return &byt_thinkpad_10; 8260046406SPierre-Louis Bossart else 8360046406SPierre-Louis Bossart return mach; 8460046406SPierre-Louis Bossart } 8560046406SPierre-Louis Bossart 8660046406SPierre-Louis Bossart struct snd_soc_acpi_mach snd_soc_acpi_intel_baytrail_legacy_machines[] = { 8760046406SPierre-Louis Bossart { 8860046406SPierre-Louis Bossart .id = "10EC5640", 8960046406SPierre-Louis Bossart .drv_name = "byt-rt5640", 9060046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin-48kHz_i2s_master", 9160046406SPierre-Louis Bossart }, 9260046406SPierre-Louis Bossart { 9360046406SPierre-Louis Bossart .id = "193C9890", 9460046406SPierre-Louis Bossart .drv_name = "byt-max98090", 9560046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin-48kHz_i2s_master", 9660046406SPierre-Louis Bossart }, 9760046406SPierre-Louis Bossart {} 9860046406SPierre-Louis Bossart }; 9960046406SPierre-Louis Bossart EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_baytrail_legacy_machines); 10060046406SPierre-Louis Bossart 10160046406SPierre-Louis Bossart struct snd_soc_acpi_mach snd_soc_acpi_intel_baytrail_machines[] = { 10260046406SPierre-Louis Bossart { 10360046406SPierre-Louis Bossart .id = "10EC5640", 10460046406SPierre-Louis Bossart .drv_name = "bytcr_rt5640", 10560046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 10660046406SPierre-Louis Bossart .board = "bytcr_rt5640", 10760046406SPierre-Louis Bossart .machine_quirk = byt_quirk, 1084f722a6aSPierre-Louis Bossart .sof_fw_filename = "intel/sof-byt.ri", 1094f722a6aSPierre-Louis Bossart .sof_tplg_filename = "intel/sof-byt-rt5640.tplg", 110c1a8ed69SPierre-Louis Bossart .asoc_plat_name = "sst-mfld-platform", 11160046406SPierre-Louis Bossart }, 11260046406SPierre-Louis Bossart { 11360046406SPierre-Louis Bossart .id = "10EC5642", 11460046406SPierre-Louis Bossart .drv_name = "bytcr_rt5640", 11560046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 11660046406SPierre-Louis Bossart .board = "bytcr_rt5640", 1174f722a6aSPierre-Louis Bossart .sof_fw_filename = "intel/sof-byt.ri", 1184f722a6aSPierre-Louis Bossart .sof_tplg_filename = "intel/sof-byt-rt5640.tplg", 119c1a8ed69SPierre-Louis Bossart .asoc_plat_name = "sst-mfld-platform", 12060046406SPierre-Louis Bossart }, 12160046406SPierre-Louis Bossart { 12260046406SPierre-Louis Bossart .id = "INTCCFFD", 12360046406SPierre-Louis Bossart .drv_name = "bytcr_rt5640", 12460046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 12560046406SPierre-Louis Bossart .board = "bytcr_rt5640", 1264f722a6aSPierre-Louis Bossart .sof_fw_filename = "intel/sof-byt.ri", 1274f722a6aSPierre-Louis Bossart .sof_tplg_filename = "intel/sof-byt-rt5640.tplg", 128c1a8ed69SPierre-Louis Bossart .asoc_plat_name = "sst-mfld-platform", 12960046406SPierre-Louis Bossart }, 13060046406SPierre-Louis Bossart { 13160046406SPierre-Louis Bossart .id = "10EC5651", 13260046406SPierre-Louis Bossart .drv_name = "bytcr_rt5651", 13360046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 13460046406SPierre-Louis Bossart .board = "bytcr_rt5651", 1354f722a6aSPierre-Louis Bossart .sof_fw_filename = "intel/sof-byt.ri", 1364f722a6aSPierre-Louis Bossart .sof_tplg_filename = "intel/sof-byt-rt5651.tplg", 137c1a8ed69SPierre-Louis Bossart .asoc_plat_name = "sst-mfld-platform", 13860046406SPierre-Louis Bossart }, 13960046406SPierre-Louis Bossart { 14060046406SPierre-Louis Bossart .id = "DLGS7212", 14160046406SPierre-Louis Bossart .drv_name = "bytcht_da7213", 14260046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 14360046406SPierre-Louis Bossart .board = "bytcht_da7213", 1444f722a6aSPierre-Louis Bossart .sof_fw_filename = "intel/sof-byt.ri", 1454f722a6aSPierre-Louis Bossart .sof_tplg_filename = "intel/sof-byt-da7213.tplg", 146c1a8ed69SPierre-Louis Bossart .asoc_plat_name = "sst-mfld-platform", 14760046406SPierre-Louis Bossart }, 14860046406SPierre-Louis Bossart { 14960046406SPierre-Louis Bossart .id = "DLGS7213", 15060046406SPierre-Louis Bossart .drv_name = "bytcht_da7213", 15160046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 15260046406SPierre-Louis Bossart .board = "bytcht_da7213", 1534f722a6aSPierre-Louis Bossart .sof_fw_filename = "intel/sof-byt.ri", 1544f722a6aSPierre-Louis Bossart .sof_tplg_filename = "intel/sof-byt-da7213.tplg", 155c1a8ed69SPierre-Louis Bossart .asoc_plat_name = "sst-mfld-platform", 15660046406SPierre-Louis Bossart }, 15760046406SPierre-Louis Bossart /* some Baytrail platforms rely on RT5645, use CHT machine driver */ 15860046406SPierre-Louis Bossart { 15960046406SPierre-Louis Bossart .id = "10EC5645", 16060046406SPierre-Louis Bossart .drv_name = "cht-bsw-rt5645", 16160046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 16260046406SPierre-Louis Bossart .board = "cht-bsw", 1634f722a6aSPierre-Louis Bossart .sof_fw_filename = "intel/sof-byt.ri", 1644f722a6aSPierre-Louis Bossart .sof_tplg_filename = "intel/sof-byt-rt5645.tplg", 165c1a8ed69SPierre-Louis Bossart .asoc_plat_name = "sst-mfld-platform", 16660046406SPierre-Louis Bossart }, 16760046406SPierre-Louis Bossart { 16860046406SPierre-Louis Bossart .id = "10EC5648", 16960046406SPierre-Louis Bossart .drv_name = "cht-bsw-rt5645", 17060046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 17160046406SPierre-Louis Bossart .board = "cht-bsw", 1724f722a6aSPierre-Louis Bossart .sof_fw_filename = "intel/sof-byt.ri", 1734f722a6aSPierre-Louis Bossart .sof_tplg_filename = "intel/sof-byt-rt5645.tplg", 174c1a8ed69SPierre-Louis Bossart .asoc_plat_name = "sst-mfld-platform", 17560046406SPierre-Louis Bossart }, 17660046406SPierre-Louis Bossart /* use CHT driver to Baytrail Chromebooks */ 17760046406SPierre-Louis Bossart { 17860046406SPierre-Louis Bossart .id = "193C9890", 17960046406SPierre-Louis Bossart .drv_name = "cht-bsw-max98090", 18060046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 18160046406SPierre-Louis Bossart .board = "cht-bsw", 1824f722a6aSPierre-Louis Bossart .sof_fw_filename = "intel/sof-byt.ri", 1834f722a6aSPierre-Louis Bossart .sof_tplg_filename = "intel/sof-byt-max98090.tplg", 184c1a8ed69SPierre-Louis Bossart .asoc_plat_name = "sst-mfld-platform", 18560046406SPierre-Louis Bossart }, 18660046406SPierre-Louis Bossart #if IS_ENABLED(CONFIG_SND_SOC_INTEL_BYT_CHT_NOCODEC_MACH) 18760046406SPierre-Louis Bossart /* 18860046406SPierre-Louis Bossart * This is always last in the table so that it is selected only when 18960046406SPierre-Louis Bossart * enabled explicitly and there is no codec-related information in SSDT 19060046406SPierre-Louis Bossart */ 19160046406SPierre-Louis Bossart { 19260046406SPierre-Louis Bossart .id = "80860F28", 19360046406SPierre-Louis Bossart .drv_name = "bytcht_nocodec", 19460046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 19560046406SPierre-Louis Bossart .board = "bytcht_nocodec", 19660046406SPierre-Louis Bossart }, 19760046406SPierre-Louis Bossart #endif 19860046406SPierre-Louis Bossart {}, 19960046406SPierre-Louis Bossart }; 20060046406SPierre-Louis Bossart EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_baytrail_machines); 20160046406SPierre-Louis Bossart 20260046406SPierre-Louis Bossart MODULE_LICENSE("GPL v2"); 20360046406SPierre-Louis Bossart MODULE_DESCRIPTION("Intel Common ACPI Match module"); 204