12025cf9eSThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only 260046406SPierre-Louis Bossart /* 360046406SPierre-Louis Bossart * soc-apci-intel-byt-match.c - tables and support for BYT ACPI enumeration. 460046406SPierre-Louis Bossart * 560046406SPierre-Louis Bossart * Copyright (c) 2017, Intel Corporation. 660046406SPierre-Louis Bossart */ 760046406SPierre-Louis Bossart 860046406SPierre-Louis Bossart #include <linux/dmi.h> 960046406SPierre-Louis Bossart #include <sound/soc-acpi.h> 1060046406SPierre-Louis Bossart #include <sound/soc-acpi-intel-match.h> 1160046406SPierre-Louis Bossart 1260046406SPierre-Louis Bossart static unsigned long byt_machine_id; 1360046406SPierre-Louis Bossart 1460046406SPierre-Louis Bossart #define BYT_THINKPAD_10 1 15d3dcc588SHans de Goede #define BYT_POV_P1006W 2 1660046406SPierre-Louis Bossart 1760046406SPierre-Louis Bossart static int byt_thinkpad10_quirk_cb(const struct dmi_system_id *id) 1860046406SPierre-Louis Bossart { 1960046406SPierre-Louis Bossart byt_machine_id = BYT_THINKPAD_10; 2060046406SPierre-Louis Bossart return 1; 2160046406SPierre-Louis Bossart } 2260046406SPierre-Louis Bossart 23d3dcc588SHans de Goede static int byt_pov_p1006w_quirk_cb(const struct dmi_system_id *id) 24d3dcc588SHans de Goede { 25d3dcc588SHans de Goede byt_machine_id = BYT_POV_P1006W; 26d3dcc588SHans de Goede return 1; 27d3dcc588SHans de Goede } 2860046406SPierre-Louis Bossart 2960046406SPierre-Louis Bossart static const struct dmi_system_id byt_table[] = { 3060046406SPierre-Louis Bossart { 3160046406SPierre-Louis Bossart .callback = byt_thinkpad10_quirk_cb, 3260046406SPierre-Louis Bossart .matches = { 3360046406SPierre-Louis Bossart DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), 342ca426a2SHans de Goede DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad 8"), 352ca426a2SHans de Goede }, 362ca426a2SHans de Goede }, 372ca426a2SHans de Goede { 382ca426a2SHans de Goede .callback = byt_thinkpad10_quirk_cb, 392ca426a2SHans de Goede .matches = { 402ca426a2SHans de Goede DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), 4160046406SPierre-Louis Bossart DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad 10"), 4260046406SPierre-Louis Bossart }, 4360046406SPierre-Louis Bossart }, 4460046406SPierre-Louis Bossart { 4560046406SPierre-Louis Bossart .callback = byt_thinkpad10_quirk_cb, 4660046406SPierre-Louis Bossart .matches = { 4760046406SPierre-Louis Bossart DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), 4860046406SPierre-Louis Bossart DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad Tablet B"), 4960046406SPierre-Louis Bossart }, 5060046406SPierre-Louis Bossart }, 5160046406SPierre-Louis Bossart { 5260046406SPierre-Louis Bossart .callback = byt_thinkpad10_quirk_cb, 5360046406SPierre-Louis Bossart .matches = { 5460046406SPierre-Louis Bossart DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), 5560046406SPierre-Louis Bossart DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Miix 2 10"), 5660046406SPierre-Louis Bossart }, 5760046406SPierre-Louis Bossart }, 58d3dcc588SHans de Goede { 59d3dcc588SHans de Goede /* Point of View mobii wintab p1006w (v1.0) */ 60d3dcc588SHans de Goede .callback = byt_pov_p1006w_quirk_cb, 61d3dcc588SHans de Goede .matches = { 62d3dcc588SHans de Goede DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Insyde"), 63d3dcc588SHans de Goede DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "BayTrail"), 64d3dcc588SHans de Goede /* Note 105b is Foxcon's USB/PCI vendor id */ 65d3dcc588SHans de Goede DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "105B"), 66d3dcc588SHans de Goede DMI_EXACT_MATCH(DMI_BOARD_NAME, "0E57"), 67d3dcc588SHans de Goede }, 68d3dcc588SHans de Goede }, 6960046406SPierre-Louis Bossart { } 7060046406SPierre-Louis Bossart }; 7160046406SPierre-Louis Bossart 7260046406SPierre-Louis Bossart static struct snd_soc_acpi_mach byt_thinkpad_10 = { 7360046406SPierre-Louis Bossart .id = "10EC5640", 7460046406SPierre-Louis Bossart .drv_name = "cht-bsw-rt5672", 7560046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 7660046406SPierre-Louis Bossart .board = "cht-bsw", 77528f0715SPierre-Louis Bossart .sof_fw_filename = "sof-byt.ri", 78528f0715SPierre-Louis Bossart .sof_tplg_filename = "sof-byt-rt5670.tplg", 7960046406SPierre-Louis Bossart }; 8060046406SPierre-Louis Bossart 81d3dcc588SHans de Goede static struct snd_soc_acpi_mach byt_pov_p1006w = { 82d3dcc588SHans de Goede .id = "10EC5640", 83d3dcc588SHans de Goede .drv_name = "bytcr_rt5651", 84d3dcc588SHans de Goede .fw_filename = "intel/fw_sst_0f28.bin", 85d3dcc588SHans de Goede .board = "bytcr_rt5651", 86528f0715SPierre-Louis Bossart .sof_fw_filename = "sof-byt.ri", 87528f0715SPierre-Louis Bossart .sof_tplg_filename = "sof-byt-rt5651.tplg", 88d3dcc588SHans de Goede }; 89d3dcc588SHans de Goede 9060046406SPierre-Louis Bossart static struct snd_soc_acpi_mach *byt_quirk(void *arg) 9160046406SPierre-Louis Bossart { 9260046406SPierre-Louis Bossart struct snd_soc_acpi_mach *mach = arg; 9360046406SPierre-Louis Bossart 9460046406SPierre-Louis Bossart dmi_check_system(byt_table); 9560046406SPierre-Louis Bossart 96d3dcc588SHans de Goede switch (byt_machine_id) { 97d3dcc588SHans de Goede case BYT_THINKPAD_10: 9860046406SPierre-Louis Bossart return &byt_thinkpad_10; 99d3dcc588SHans de Goede case BYT_POV_P1006W: 100d3dcc588SHans de Goede return &byt_pov_p1006w; 101d3dcc588SHans de Goede default: 10260046406SPierre-Louis Bossart return mach; 10360046406SPierre-Louis Bossart } 104d3dcc588SHans de Goede } 10560046406SPierre-Louis Bossart 10660046406SPierre-Louis Bossart struct snd_soc_acpi_mach snd_soc_acpi_intel_baytrail_legacy_machines[] = { 10760046406SPierre-Louis Bossart { 10860046406SPierre-Louis Bossart .id = "10EC5640", 10960046406SPierre-Louis Bossart .drv_name = "byt-rt5640", 11060046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin-48kHz_i2s_master", 11160046406SPierre-Louis Bossart }, 11260046406SPierre-Louis Bossart { 11360046406SPierre-Louis Bossart .id = "193C9890", 11460046406SPierre-Louis Bossart .drv_name = "byt-max98090", 11560046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin-48kHz_i2s_master", 11660046406SPierre-Louis Bossart }, 11760046406SPierre-Louis Bossart {} 11860046406SPierre-Louis Bossart }; 11960046406SPierre-Louis Bossart EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_baytrail_legacy_machines); 12060046406SPierre-Louis Bossart 12160046406SPierre-Louis Bossart struct snd_soc_acpi_mach snd_soc_acpi_intel_baytrail_machines[] = { 12260046406SPierre-Louis Bossart { 12360046406SPierre-Louis Bossart .id = "10EC5640", 12460046406SPierre-Louis Bossart .drv_name = "bytcr_rt5640", 12560046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 12660046406SPierre-Louis Bossart .board = "bytcr_rt5640", 12760046406SPierre-Louis Bossart .machine_quirk = byt_quirk, 128528f0715SPierre-Louis Bossart .sof_fw_filename = "sof-byt.ri", 129528f0715SPierre-Louis Bossart .sof_tplg_filename = "sof-byt-rt5640.tplg", 13060046406SPierre-Louis Bossart }, 13160046406SPierre-Louis Bossart { 13260046406SPierre-Louis Bossart .id = "10EC5642", 13360046406SPierre-Louis Bossart .drv_name = "bytcr_rt5640", 13460046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 13560046406SPierre-Louis Bossart .board = "bytcr_rt5640", 136528f0715SPierre-Louis Bossart .sof_fw_filename = "sof-byt.ri", 137528f0715SPierre-Louis Bossart .sof_tplg_filename = "sof-byt-rt5640.tplg", 13860046406SPierre-Louis Bossart }, 13960046406SPierre-Louis Bossart { 14060046406SPierre-Louis Bossart .id = "INTCCFFD", 14160046406SPierre-Louis Bossart .drv_name = "bytcr_rt5640", 14260046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 14360046406SPierre-Louis Bossart .board = "bytcr_rt5640", 144528f0715SPierre-Louis Bossart .sof_fw_filename = "sof-byt.ri", 145528f0715SPierre-Louis Bossart .sof_tplg_filename = "sof-byt-rt5640.tplg", 14660046406SPierre-Louis Bossart }, 14760046406SPierre-Louis Bossart { 14860046406SPierre-Louis Bossart .id = "10EC5651", 14960046406SPierre-Louis Bossart .drv_name = "bytcr_rt5651", 15060046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 15160046406SPierre-Louis Bossart .board = "bytcr_rt5651", 152528f0715SPierre-Louis Bossart .sof_fw_filename = "sof-byt.ri", 153528f0715SPierre-Louis Bossart .sof_tplg_filename = "sof-byt-rt5651.tplg", 15460046406SPierre-Louis Bossart }, 15560046406SPierre-Louis Bossart { 15660046406SPierre-Louis Bossart .id = "DLGS7212", 15760046406SPierre-Louis Bossart .drv_name = "bytcht_da7213", 15860046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 15960046406SPierre-Louis Bossart .board = "bytcht_da7213", 160528f0715SPierre-Louis Bossart .sof_fw_filename = "sof-byt.ri", 161528f0715SPierre-Louis Bossart .sof_tplg_filename = "sof-byt-da7213.tplg", 16260046406SPierre-Louis Bossart }, 16360046406SPierre-Louis Bossart { 16460046406SPierre-Louis Bossart .id = "DLGS7213", 16560046406SPierre-Louis Bossart .drv_name = "bytcht_da7213", 16660046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 16760046406SPierre-Louis Bossart .board = "bytcht_da7213", 168528f0715SPierre-Louis Bossart .sof_fw_filename = "sof-byt.ri", 169528f0715SPierre-Louis Bossart .sof_tplg_filename = "sof-byt-da7213.tplg", 17060046406SPierre-Louis Bossart }, 1715198baf8SHans de Goede { 1725198baf8SHans de Goede .id = "ESSX8316", 1735198baf8SHans de Goede .drv_name = "bytcht_es8316", 1745198baf8SHans de Goede .fw_filename = "intel/fw_sst_0f28.bin", 1755198baf8SHans de Goede .board = "bytcht_es8316", 176528f0715SPierre-Louis Bossart .sof_fw_filename = "sof-byt.ri", 177528f0715SPierre-Louis Bossart .sof_tplg_filename = "sof-byt-es8316.tplg", 1785198baf8SHans de Goede }, 179f70abd75SBard liao { 180f70abd75SBard liao .id = "10EC5682", 181f70abd75SBard liao .drv_name = "sof_rt5682", 182f70abd75SBard liao .sof_fw_filename = "sof-byt.ri", 183f70abd75SBard liao .sof_tplg_filename = "sof-byt-rt5682.tplg", 184f70abd75SBard liao }, 18560046406SPierre-Louis Bossart /* some Baytrail platforms rely on RT5645, use CHT machine driver */ 18660046406SPierre-Louis Bossart { 18760046406SPierre-Louis Bossart .id = "10EC5645", 18860046406SPierre-Louis Bossart .drv_name = "cht-bsw-rt5645", 18960046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 19060046406SPierre-Louis Bossart .board = "cht-bsw", 191528f0715SPierre-Louis Bossart .sof_fw_filename = "sof-byt.ri", 192528f0715SPierre-Louis Bossart .sof_tplg_filename = "sof-byt-rt5645.tplg", 19360046406SPierre-Louis Bossart }, 19460046406SPierre-Louis Bossart { 19560046406SPierre-Louis Bossart .id = "10EC5648", 19660046406SPierre-Louis Bossart .drv_name = "cht-bsw-rt5645", 19760046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 19860046406SPierre-Louis Bossart .board = "cht-bsw", 199528f0715SPierre-Louis Bossart .sof_fw_filename = "sof-byt.ri", 200528f0715SPierre-Louis Bossart .sof_tplg_filename = "sof-byt-rt5645.tplg", 20160046406SPierre-Louis Bossart }, 20260046406SPierre-Louis Bossart /* use CHT driver to Baytrail Chromebooks */ 20360046406SPierre-Louis Bossart { 20460046406SPierre-Louis Bossart .id = "193C9890", 20560046406SPierre-Louis Bossart .drv_name = "cht-bsw-max98090", 20660046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 20760046406SPierre-Louis Bossart .board = "cht-bsw", 208528f0715SPierre-Louis Bossart .sof_fw_filename = "sof-byt.ri", 209528f0715SPierre-Louis Bossart .sof_tplg_filename = "sof-byt-max98090.tplg", 21060046406SPierre-Louis Bossart }, 21160046406SPierre-Louis Bossart #if IS_ENABLED(CONFIG_SND_SOC_INTEL_BYT_CHT_NOCODEC_MACH) 21260046406SPierre-Louis Bossart /* 21360046406SPierre-Louis Bossart * This is always last in the table so that it is selected only when 21460046406SPierre-Louis Bossart * enabled explicitly and there is no codec-related information in SSDT 21560046406SPierre-Louis Bossart */ 21660046406SPierre-Louis Bossart { 21760046406SPierre-Louis Bossart .id = "80860F28", 21860046406SPierre-Louis Bossart .drv_name = "bytcht_nocodec", 21960046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 22060046406SPierre-Louis Bossart .board = "bytcht_nocodec", 22160046406SPierre-Louis Bossart }, 22260046406SPierre-Louis Bossart #endif 22360046406SPierre-Louis Bossart {}, 22460046406SPierre-Louis Bossart }; 22560046406SPierre-Louis Bossart EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_baytrail_machines); 22660046406SPierre-Louis Bossart 22760046406SPierre-Louis Bossart MODULE_LICENSE("GPL v2"); 22860046406SPierre-Louis Bossart MODULE_DESCRIPTION("Intel Common ACPI Match module"); 229