12025cf9eSThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only 260046406SPierre-Louis Bossart /* 3e51b6980SChristophe JAILLET * soc-acpi-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 14ebbb165dSHans de Goede #define BYT_RT5672 1 15d3dcc588SHans de Goede #define BYT_POV_P1006W 2 1660046406SPierre-Louis Bossart 17ebbb165dSHans de Goede static int byt_rt5672_quirk_cb(const struct dmi_system_id *id) 1860046406SPierre-Louis Bossart { 19ebbb165dSHans de Goede byt_machine_id = BYT_RT5672; 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 { 31ebbb165dSHans de Goede .callback = byt_rt5672_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 { 38ebbb165dSHans de Goede .callback = byt_rt5672_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 { 45ebbb165dSHans de Goede .callback = byt_rt5672_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 { 52ebbb165dSHans de Goede .callback = byt_rt5672_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 }, 693e951e79SKovács Tamás { 703e951e79SKovács Tamás /* Aegex 10 tablet (RU2) */ 71ebbb165dSHans de Goede .callback = byt_rt5672_quirk_cb, 723e951e79SKovács Tamás .matches = { 733e951e79SKovács Tamás DMI_MATCH(DMI_SYS_VENDOR, "AEGEX"), 743e951e79SKovács Tamás DMI_MATCH(DMI_PRODUCT_VERSION, "RU2"), 753e951e79SKovács Tamás }, 763e951e79SKovács Tamás }, 7717d49b07SHans de Goede { 7817d49b07SHans de Goede /* Dell Venue 10 Pro 5055 */ 7917d49b07SHans de Goede .callback = byt_rt5672_quirk_cb, 8017d49b07SHans de Goede .matches = { 8117d49b07SHans de Goede DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), 8217d49b07SHans de Goede DMI_MATCH(DMI_PRODUCT_NAME, "Venue 10 Pro 5055"), 8317d49b07SHans de Goede }, 8417d49b07SHans de Goede }, 8560046406SPierre-Louis Bossart { } 8660046406SPierre-Louis Bossart }; 8760046406SPierre-Louis Bossart 88ebbb165dSHans de Goede /* Various devices use an ACPI id of 10EC5640 while using a rt5672 codec */ 89ebbb165dSHans de Goede static struct snd_soc_acpi_mach byt_rt5672 = { 9060046406SPierre-Louis Bossart .id = "10EC5640", 9160046406SPierre-Louis Bossart .drv_name = "cht-bsw-rt5672", 9260046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 9360046406SPierre-Louis Bossart .board = "cht-bsw", 94528f0715SPierre-Louis Bossart .sof_fw_filename = "sof-byt.ri", 95528f0715SPierre-Louis Bossart .sof_tplg_filename = "sof-byt-rt5670.tplg", 9660046406SPierre-Louis Bossart }; 9760046406SPierre-Louis Bossart 98d3dcc588SHans de Goede static struct snd_soc_acpi_mach byt_pov_p1006w = { 99d3dcc588SHans de Goede .id = "10EC5640", 100d3dcc588SHans de Goede .drv_name = "bytcr_rt5651", 101d3dcc588SHans de Goede .fw_filename = "intel/fw_sst_0f28.bin", 102d3dcc588SHans de Goede .board = "bytcr_rt5651", 103528f0715SPierre-Louis Bossart .sof_fw_filename = "sof-byt.ri", 104528f0715SPierre-Louis Bossart .sof_tplg_filename = "sof-byt-rt5651.tplg", 105d3dcc588SHans de Goede }; 106d3dcc588SHans de Goede 10760046406SPierre-Louis Bossart static struct snd_soc_acpi_mach *byt_quirk(void *arg) 10860046406SPierre-Louis Bossart { 10960046406SPierre-Louis Bossart struct snd_soc_acpi_mach *mach = arg; 11060046406SPierre-Louis Bossart 11160046406SPierre-Louis Bossart dmi_check_system(byt_table); 11260046406SPierre-Louis Bossart 113d3dcc588SHans de Goede switch (byt_machine_id) { 114ebbb165dSHans de Goede case BYT_RT5672: 115ebbb165dSHans de Goede return &byt_rt5672; 116d3dcc588SHans de Goede case BYT_POV_P1006W: 117d3dcc588SHans de Goede return &byt_pov_p1006w; 118d3dcc588SHans de Goede default: 11960046406SPierre-Louis Bossart return mach; 12060046406SPierre-Louis Bossart } 121d3dcc588SHans de Goede } 12260046406SPierre-Louis Bossart 123dac7cbd5SPierre-Louis Bossart static const struct snd_soc_acpi_codecs rt5640_comp_ids = { 124dac7cbd5SPierre-Louis Bossart .num_codecs = 3, 125dac7cbd5SPierre-Louis Bossart .codecs = { "10EC5640", "10EC5642", "INTCCFFD"}, 126dac7cbd5SPierre-Louis Bossart }; 127dac7cbd5SPierre-Louis Bossart 128dac7cbd5SPierre-Louis Bossart static const struct snd_soc_acpi_codecs wm5102_comp_ids = { 129dac7cbd5SPierre-Louis Bossart .num_codecs = 2, 130*7e1d728aSHans de Goede .codecs = { "10WM5102", "WM510204", "WM510205"}, 131dac7cbd5SPierre-Louis Bossart }; 132dac7cbd5SPierre-Louis Bossart 133dac7cbd5SPierre-Louis Bossart static const struct snd_soc_acpi_codecs da7213_comp_ids = { 134dac7cbd5SPierre-Louis Bossart .num_codecs = 2, 135dac7cbd5SPierre-Louis Bossart .codecs = { "DGLS7212", "DGLS7213"}, 136dac7cbd5SPierre-Louis Bossart }; 137dac7cbd5SPierre-Louis Bossart 138dac7cbd5SPierre-Louis Bossart static const struct snd_soc_acpi_codecs rt5645_comp_ids = { 139dac7cbd5SPierre-Louis Bossart .num_codecs = 2, 140dac7cbd5SPierre-Louis Bossart .codecs = { "10EC5645", "10EC5648"}, 141dac7cbd5SPierre-Louis Bossart }; 142dac7cbd5SPierre-Louis Bossart 14360046406SPierre-Louis Bossart struct snd_soc_acpi_mach snd_soc_acpi_intel_baytrail_machines[] = { 14460046406SPierre-Louis Bossart { 145dac7cbd5SPierre-Louis Bossart .comp_ids = &rt5640_comp_ids, 14660046406SPierre-Louis Bossart .drv_name = "bytcr_rt5640", 14760046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 14860046406SPierre-Louis Bossart .board = "bytcr_rt5640", 14960046406SPierre-Louis Bossart .machine_quirk = byt_quirk, 150528f0715SPierre-Louis Bossart .sof_fw_filename = "sof-byt.ri", 151528f0715SPierre-Louis Bossart .sof_tplg_filename = "sof-byt-rt5640.tplg", 15260046406SPierre-Louis Bossart }, 15360046406SPierre-Louis Bossart { 15460046406SPierre-Louis Bossart .id = "10EC5651", 15560046406SPierre-Louis Bossart .drv_name = "bytcr_rt5651", 15660046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 15760046406SPierre-Louis Bossart .board = "bytcr_rt5651", 158528f0715SPierre-Louis Bossart .sof_fw_filename = "sof-byt.ri", 159528f0715SPierre-Louis Bossart .sof_tplg_filename = "sof-byt-rt5651.tplg", 16060046406SPierre-Louis Bossart }, 16160046406SPierre-Louis Bossart { 162dac7cbd5SPierre-Louis Bossart .comp_ids = &wm5102_comp_ids, 1639a87fc1eSPierre-Louis Bossart .drv_name = "bytcr_wm5102", 1649a87fc1eSPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 1659a87fc1eSPierre-Louis Bossart .board = "bytcr_wm5102", 1669a87fc1eSPierre-Louis Bossart .sof_fw_filename = "sof-byt.ri", 1679a87fc1eSPierre-Louis Bossart .sof_tplg_filename = "sof-byt-wm5102.tplg", 1689a87fc1eSPierre-Louis Bossart }, 1699a87fc1eSPierre-Louis Bossart { 170dac7cbd5SPierre-Louis Bossart .comp_ids = &da7213_comp_ids, 17160046406SPierre-Louis Bossart .drv_name = "bytcht_da7213", 17260046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 17360046406SPierre-Louis Bossart .board = "bytcht_da7213", 174528f0715SPierre-Louis Bossart .sof_fw_filename = "sof-byt.ri", 175528f0715SPierre-Louis Bossart .sof_tplg_filename = "sof-byt-da7213.tplg", 17660046406SPierre-Louis Bossart }, 1775198baf8SHans de Goede { 1785198baf8SHans de Goede .id = "ESSX8316", 1795198baf8SHans de Goede .drv_name = "bytcht_es8316", 1805198baf8SHans de Goede .fw_filename = "intel/fw_sst_0f28.bin", 1815198baf8SHans de Goede .board = "bytcht_es8316", 182528f0715SPierre-Louis Bossart .sof_fw_filename = "sof-byt.ri", 183528f0715SPierre-Louis Bossart .sof_tplg_filename = "sof-byt-es8316.tplg", 1845198baf8SHans de Goede }, 185f70abd75SBard liao { 186f70abd75SBard liao .id = "10EC5682", 187f70abd75SBard liao .drv_name = "sof_rt5682", 188f70abd75SBard liao .sof_fw_filename = "sof-byt.ri", 189f70abd75SBard liao .sof_tplg_filename = "sof-byt-rt5682.tplg", 190f70abd75SBard liao }, 19160046406SPierre-Louis Bossart /* some Baytrail platforms rely on RT5645, use CHT machine driver */ 19260046406SPierre-Louis Bossart { 193dac7cbd5SPierre-Louis Bossart .comp_ids = &rt5645_comp_ids, 19460046406SPierre-Louis Bossart .drv_name = "cht-bsw-rt5645", 19560046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 19660046406SPierre-Louis Bossart .board = "cht-bsw", 197528f0715SPierre-Louis Bossart .sof_fw_filename = "sof-byt.ri", 198528f0715SPierre-Louis Bossart .sof_tplg_filename = "sof-byt-rt5645.tplg", 19960046406SPierre-Louis Bossart }, 20060046406SPierre-Louis Bossart /* use CHT driver to Baytrail Chromebooks */ 20160046406SPierre-Louis Bossart { 20260046406SPierre-Louis Bossart .id = "193C9890", 20360046406SPierre-Louis Bossart .drv_name = "cht-bsw-max98090", 20460046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 20560046406SPierre-Louis Bossart .board = "cht-bsw", 206528f0715SPierre-Louis Bossart .sof_fw_filename = "sof-byt.ri", 207528f0715SPierre-Louis Bossart .sof_tplg_filename = "sof-byt-max98090.tplg", 20860046406SPierre-Louis Bossart }, 2093917da94STakashi Iwai { 2103917da94STakashi Iwai .id = "14F10720", 2113917da94STakashi Iwai .drv_name = "bytcht_cx2072x", 2123917da94STakashi Iwai .fw_filename = "intel/fw_sst_0f28.bin", 2133917da94STakashi Iwai .board = "bytcht_cx2072x", 2143917da94STakashi Iwai .sof_fw_filename = "sof-byt.ri", 2153917da94STakashi Iwai .sof_tplg_filename = "sof-byt-cx2072x.tplg", 2163917da94STakashi Iwai }, 21760046406SPierre-Louis Bossart #if IS_ENABLED(CONFIG_SND_SOC_INTEL_BYT_CHT_NOCODEC_MACH) 21860046406SPierre-Louis Bossart /* 21960046406SPierre-Louis Bossart * This is always last in the table so that it is selected only when 22060046406SPierre-Louis Bossart * enabled explicitly and there is no codec-related information in SSDT 22160046406SPierre-Louis Bossart */ 22260046406SPierre-Louis Bossart { 22360046406SPierre-Louis Bossart .id = "80860F28", 22460046406SPierre-Louis Bossart .drv_name = "bytcht_nocodec", 22560046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 22660046406SPierre-Louis Bossart .board = "bytcht_nocodec", 22760046406SPierre-Louis Bossart }, 22860046406SPierre-Louis Bossart #endif 22960046406SPierre-Louis Bossart {}, 23060046406SPierre-Louis Bossart }; 23160046406SPierre-Louis Bossart EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_baytrail_machines); 232