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 24d3dcc588SHans de Goede #define BYT_POV_P1006W 2 2560046406SPierre-Louis Bossart 2660046406SPierre-Louis Bossart static int byt_thinkpad10_quirk_cb(const struct dmi_system_id *id) 2760046406SPierre-Louis Bossart { 2860046406SPierre-Louis Bossart byt_machine_id = BYT_THINKPAD_10; 2960046406SPierre-Louis Bossart return 1; 3060046406SPierre-Louis Bossart } 3160046406SPierre-Louis Bossart 32d3dcc588SHans de Goede static int byt_pov_p1006w_quirk_cb(const struct dmi_system_id *id) 33d3dcc588SHans de Goede { 34d3dcc588SHans de Goede byt_machine_id = BYT_POV_P1006W; 35d3dcc588SHans de Goede return 1; 36d3dcc588SHans de Goede } 3760046406SPierre-Louis Bossart 3860046406SPierre-Louis Bossart static const struct dmi_system_id byt_table[] = { 3960046406SPierre-Louis Bossart { 4060046406SPierre-Louis Bossart .callback = byt_thinkpad10_quirk_cb, 4160046406SPierre-Louis Bossart .matches = { 4260046406SPierre-Louis Bossart DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), 432ca426a2SHans de Goede DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad 8"), 442ca426a2SHans de Goede }, 452ca426a2SHans de Goede }, 462ca426a2SHans de Goede { 472ca426a2SHans de Goede .callback = byt_thinkpad10_quirk_cb, 482ca426a2SHans de Goede .matches = { 492ca426a2SHans de Goede DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), 5060046406SPierre-Louis Bossart DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad 10"), 5160046406SPierre-Louis Bossart }, 5260046406SPierre-Louis Bossart }, 5360046406SPierre-Louis Bossart { 5460046406SPierre-Louis Bossart .callback = byt_thinkpad10_quirk_cb, 5560046406SPierre-Louis Bossart .matches = { 5660046406SPierre-Louis Bossart DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), 5760046406SPierre-Louis Bossart DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad Tablet B"), 5860046406SPierre-Louis Bossart }, 5960046406SPierre-Louis Bossart }, 6060046406SPierre-Louis Bossart { 6160046406SPierre-Louis Bossart .callback = byt_thinkpad10_quirk_cb, 6260046406SPierre-Louis Bossart .matches = { 6360046406SPierre-Louis Bossart DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), 6460046406SPierre-Louis Bossart DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Miix 2 10"), 6560046406SPierre-Louis Bossart }, 6660046406SPierre-Louis Bossart }, 67d3dcc588SHans de Goede { 68d3dcc588SHans de Goede /* Point of View mobii wintab p1006w (v1.0) */ 69d3dcc588SHans de Goede .callback = byt_pov_p1006w_quirk_cb, 70d3dcc588SHans de Goede .matches = { 71d3dcc588SHans de Goede DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Insyde"), 72d3dcc588SHans de Goede DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "BayTrail"), 73d3dcc588SHans de Goede /* Note 105b is Foxcon's USB/PCI vendor id */ 74d3dcc588SHans de Goede DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "105B"), 75d3dcc588SHans de Goede DMI_EXACT_MATCH(DMI_BOARD_NAME, "0E57"), 76d3dcc588SHans de Goede }, 77d3dcc588SHans de Goede }, 7860046406SPierre-Louis Bossart { } 7960046406SPierre-Louis Bossart }; 8060046406SPierre-Louis Bossart 8160046406SPierre-Louis Bossart static struct snd_soc_acpi_mach byt_thinkpad_10 = { 8260046406SPierre-Louis Bossart .id = "10EC5640", 8360046406SPierre-Louis Bossart .drv_name = "cht-bsw-rt5672", 8460046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 8560046406SPierre-Louis Bossart .board = "cht-bsw", 864f722a6aSPierre-Louis Bossart .sof_fw_filename = "intel/sof-byt.ri", 874f722a6aSPierre-Louis Bossart .sof_tplg_filename = "intel/sof-byt-rt5670.tplg", 88c1a8ed69SPierre-Louis Bossart .asoc_plat_name = "sst-mfld-platform", 8960046406SPierre-Louis Bossart }; 9060046406SPierre-Louis Bossart 91d3dcc588SHans de Goede static struct snd_soc_acpi_mach byt_pov_p1006w = { 92d3dcc588SHans de Goede .id = "10EC5640", 93d3dcc588SHans de Goede .drv_name = "bytcr_rt5651", 94d3dcc588SHans de Goede .fw_filename = "intel/fw_sst_0f28.bin", 95d3dcc588SHans de Goede .board = "bytcr_rt5651", 96d3dcc588SHans de Goede .sof_fw_filename = "intel/sof-byt.ri", 97d3dcc588SHans de Goede .sof_tplg_filename = "intel/sof-byt-rt5651.tplg", 98d3dcc588SHans de Goede .asoc_plat_name = "sst-mfld-platform", 99d3dcc588SHans de Goede }; 100d3dcc588SHans de Goede 10160046406SPierre-Louis Bossart static struct snd_soc_acpi_mach *byt_quirk(void *arg) 10260046406SPierre-Louis Bossart { 10360046406SPierre-Louis Bossart struct snd_soc_acpi_mach *mach = arg; 10460046406SPierre-Louis Bossart 10560046406SPierre-Louis Bossart dmi_check_system(byt_table); 10660046406SPierre-Louis Bossart 107d3dcc588SHans de Goede switch (byt_machine_id) { 108d3dcc588SHans de Goede case BYT_THINKPAD_10: 10960046406SPierre-Louis Bossart return &byt_thinkpad_10; 110d3dcc588SHans de Goede case BYT_POV_P1006W: 111d3dcc588SHans de Goede return &byt_pov_p1006w; 112d3dcc588SHans de Goede default: 11360046406SPierre-Louis Bossart return mach; 11460046406SPierre-Louis Bossart } 115d3dcc588SHans de Goede } 11660046406SPierre-Louis Bossart 11760046406SPierre-Louis Bossart struct snd_soc_acpi_mach snd_soc_acpi_intel_baytrail_legacy_machines[] = { 11860046406SPierre-Louis Bossart { 11960046406SPierre-Louis Bossart .id = "10EC5640", 12060046406SPierre-Louis Bossart .drv_name = "byt-rt5640", 12160046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin-48kHz_i2s_master", 12260046406SPierre-Louis Bossart }, 12360046406SPierre-Louis Bossart { 12460046406SPierre-Louis Bossart .id = "193C9890", 12560046406SPierre-Louis Bossart .drv_name = "byt-max98090", 12660046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin-48kHz_i2s_master", 12760046406SPierre-Louis Bossart }, 12860046406SPierre-Louis Bossart {} 12960046406SPierre-Louis Bossart }; 13060046406SPierre-Louis Bossart EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_baytrail_legacy_machines); 13160046406SPierre-Louis Bossart 13260046406SPierre-Louis Bossart struct snd_soc_acpi_mach snd_soc_acpi_intel_baytrail_machines[] = { 13360046406SPierre-Louis Bossart { 13460046406SPierre-Louis Bossart .id = "10EC5640", 13560046406SPierre-Louis Bossart .drv_name = "bytcr_rt5640", 13660046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 13760046406SPierre-Louis Bossart .board = "bytcr_rt5640", 13860046406SPierre-Louis Bossart .machine_quirk = byt_quirk, 1394f722a6aSPierre-Louis Bossart .sof_fw_filename = "intel/sof-byt.ri", 1404f722a6aSPierre-Louis Bossart .sof_tplg_filename = "intel/sof-byt-rt5640.tplg", 141c1a8ed69SPierre-Louis Bossart .asoc_plat_name = "sst-mfld-platform", 14260046406SPierre-Louis Bossart }, 14360046406SPierre-Louis Bossart { 14460046406SPierre-Louis Bossart .id = "10EC5642", 14560046406SPierre-Louis Bossart .drv_name = "bytcr_rt5640", 14660046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 14760046406SPierre-Louis Bossart .board = "bytcr_rt5640", 1484f722a6aSPierre-Louis Bossart .sof_fw_filename = "intel/sof-byt.ri", 1494f722a6aSPierre-Louis Bossart .sof_tplg_filename = "intel/sof-byt-rt5640.tplg", 150c1a8ed69SPierre-Louis Bossart .asoc_plat_name = "sst-mfld-platform", 15160046406SPierre-Louis Bossart }, 15260046406SPierre-Louis Bossart { 15360046406SPierre-Louis Bossart .id = "INTCCFFD", 15460046406SPierre-Louis Bossart .drv_name = "bytcr_rt5640", 15560046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 15660046406SPierre-Louis Bossart .board = "bytcr_rt5640", 1574f722a6aSPierre-Louis Bossart .sof_fw_filename = "intel/sof-byt.ri", 1584f722a6aSPierre-Louis Bossart .sof_tplg_filename = "intel/sof-byt-rt5640.tplg", 159c1a8ed69SPierre-Louis Bossart .asoc_plat_name = "sst-mfld-platform", 16060046406SPierre-Louis Bossart }, 16160046406SPierre-Louis Bossart { 16260046406SPierre-Louis Bossart .id = "10EC5651", 16360046406SPierre-Louis Bossart .drv_name = "bytcr_rt5651", 16460046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 16560046406SPierre-Louis Bossart .board = "bytcr_rt5651", 1664f722a6aSPierre-Louis Bossart .sof_fw_filename = "intel/sof-byt.ri", 1674f722a6aSPierre-Louis Bossart .sof_tplg_filename = "intel/sof-byt-rt5651.tplg", 168c1a8ed69SPierre-Louis Bossart .asoc_plat_name = "sst-mfld-platform", 16960046406SPierre-Louis Bossart }, 17060046406SPierre-Louis Bossart { 17160046406SPierre-Louis Bossart .id = "DLGS7212", 17260046406SPierre-Louis Bossart .drv_name = "bytcht_da7213", 17360046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 17460046406SPierre-Louis Bossart .board = "bytcht_da7213", 1754f722a6aSPierre-Louis Bossart .sof_fw_filename = "intel/sof-byt.ri", 1764f722a6aSPierre-Louis Bossart .sof_tplg_filename = "intel/sof-byt-da7213.tplg", 177c1a8ed69SPierre-Louis Bossart .asoc_plat_name = "sst-mfld-platform", 17860046406SPierre-Louis Bossart }, 17960046406SPierre-Louis Bossart { 18060046406SPierre-Louis Bossart .id = "DLGS7213", 18160046406SPierre-Louis Bossart .drv_name = "bytcht_da7213", 18260046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 18360046406SPierre-Louis Bossart .board = "bytcht_da7213", 1844f722a6aSPierre-Louis Bossart .sof_fw_filename = "intel/sof-byt.ri", 1854f722a6aSPierre-Louis Bossart .sof_tplg_filename = "intel/sof-byt-da7213.tplg", 186c1a8ed69SPierre-Louis Bossart .asoc_plat_name = "sst-mfld-platform", 18760046406SPierre-Louis Bossart }, 1885198baf8SHans de Goede { 1895198baf8SHans de Goede .id = "ESSX8316", 1905198baf8SHans de Goede .drv_name = "bytcht_es8316", 1915198baf8SHans de Goede .fw_filename = "intel/fw_sst_0f28.bin", 1925198baf8SHans de Goede .board = "bytcht_es8316", 1935198baf8SHans de Goede .sof_fw_filename = "intel/sof-byt.ri", 1945198baf8SHans de Goede .sof_tplg_filename = "intel/sof-byt-es8316.tplg", 1955198baf8SHans de Goede .asoc_plat_name = "sst-mfld-platform", 1965198baf8SHans de Goede }, 19760046406SPierre-Louis Bossart /* some Baytrail platforms rely on RT5645, use CHT machine driver */ 19860046406SPierre-Louis Bossart { 19960046406SPierre-Louis Bossart .id = "10EC5645", 20060046406SPierre-Louis Bossart .drv_name = "cht-bsw-rt5645", 20160046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 20260046406SPierre-Louis Bossart .board = "cht-bsw", 2034f722a6aSPierre-Louis Bossart .sof_fw_filename = "intel/sof-byt.ri", 2044f722a6aSPierre-Louis Bossart .sof_tplg_filename = "intel/sof-byt-rt5645.tplg", 205c1a8ed69SPierre-Louis Bossart .asoc_plat_name = "sst-mfld-platform", 20660046406SPierre-Louis Bossart }, 20760046406SPierre-Louis Bossart { 20860046406SPierre-Louis Bossart .id = "10EC5648", 20960046406SPierre-Louis Bossart .drv_name = "cht-bsw-rt5645", 21060046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 21160046406SPierre-Louis Bossart .board = "cht-bsw", 2124f722a6aSPierre-Louis Bossart .sof_fw_filename = "intel/sof-byt.ri", 2134f722a6aSPierre-Louis Bossart .sof_tplg_filename = "intel/sof-byt-rt5645.tplg", 214c1a8ed69SPierre-Louis Bossart .asoc_plat_name = "sst-mfld-platform", 21560046406SPierre-Louis Bossart }, 21660046406SPierre-Louis Bossart /* use CHT driver to Baytrail Chromebooks */ 21760046406SPierre-Louis Bossart { 21860046406SPierre-Louis Bossart .id = "193C9890", 21960046406SPierre-Louis Bossart .drv_name = "cht-bsw-max98090", 22060046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 22160046406SPierre-Louis Bossart .board = "cht-bsw", 2224f722a6aSPierre-Louis Bossart .sof_fw_filename = "intel/sof-byt.ri", 2234f722a6aSPierre-Louis Bossart .sof_tplg_filename = "intel/sof-byt-max98090.tplg", 224c1a8ed69SPierre-Louis Bossart .asoc_plat_name = "sst-mfld-platform", 22560046406SPierre-Louis Bossart }, 22660046406SPierre-Louis Bossart #if IS_ENABLED(CONFIG_SND_SOC_INTEL_BYT_CHT_NOCODEC_MACH) 22760046406SPierre-Louis Bossart /* 22860046406SPierre-Louis Bossart * This is always last in the table so that it is selected only when 22960046406SPierre-Louis Bossart * enabled explicitly and there is no codec-related information in SSDT 23060046406SPierre-Louis Bossart */ 23160046406SPierre-Louis Bossart { 23260046406SPierre-Louis Bossart .id = "80860F28", 23360046406SPierre-Louis Bossart .drv_name = "bytcht_nocodec", 23460046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 23560046406SPierre-Louis Bossart .board = "bytcht_nocodec", 23660046406SPierre-Louis Bossart }, 23760046406SPierre-Louis Bossart #endif 23860046406SPierre-Louis Bossart {}, 23960046406SPierre-Louis Bossart }; 24060046406SPierre-Louis Bossart EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_baytrail_machines); 24160046406SPierre-Louis Bossart 24260046406SPierre-Louis Bossart MODULE_LICENSE("GPL v2"); 24360046406SPierre-Louis Bossart MODULE_DESCRIPTION("Intel Common ACPI Match module"); 244