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 1460046406SPierre-Louis Bossart #define BYT_THINKPAD_10 1 15d3dcc588SHans de Goede #define BYT_POV_P1006W 2 163e951e79SKovács Tamás #define BYT_AEGEX_10 3 1760046406SPierre-Louis Bossart 1860046406SPierre-Louis Bossart static int byt_thinkpad10_quirk_cb(const struct dmi_system_id *id) 1960046406SPierre-Louis Bossart { 2060046406SPierre-Louis Bossart byt_machine_id = BYT_THINKPAD_10; 2160046406SPierre-Louis Bossart return 1; 2260046406SPierre-Louis Bossart } 2360046406SPierre-Louis Bossart 24d3dcc588SHans de Goede static int byt_pov_p1006w_quirk_cb(const struct dmi_system_id *id) 25d3dcc588SHans de Goede { 26d3dcc588SHans de Goede byt_machine_id = BYT_POV_P1006W; 27d3dcc588SHans de Goede return 1; 28d3dcc588SHans de Goede } 2960046406SPierre-Louis Bossart 303e951e79SKovács Tamás static int byt_aegex10_quirk_cb(const struct dmi_system_id *id) 313e951e79SKovács Tamás { 323e951e79SKovács Tamás byt_machine_id = BYT_AEGEX_10; 333e951e79SKovács Tamás return 1; 343e951e79SKovács Tamás } 353e951e79SKovács Tamás 3660046406SPierre-Louis Bossart static const struct dmi_system_id byt_table[] = { 3760046406SPierre-Louis Bossart { 3860046406SPierre-Louis Bossart .callback = byt_thinkpad10_quirk_cb, 3960046406SPierre-Louis Bossart .matches = { 4060046406SPierre-Louis Bossart DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), 412ca426a2SHans de Goede DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad 8"), 422ca426a2SHans de Goede }, 432ca426a2SHans de Goede }, 442ca426a2SHans de Goede { 452ca426a2SHans de Goede .callback = byt_thinkpad10_quirk_cb, 462ca426a2SHans de Goede .matches = { 472ca426a2SHans de Goede DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), 4860046406SPierre-Louis Bossart DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad 10"), 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, "ThinkPad Tablet B"), 5660046406SPierre-Louis Bossart }, 5760046406SPierre-Louis Bossart }, 5860046406SPierre-Louis Bossart { 5960046406SPierre-Louis Bossart .callback = byt_thinkpad10_quirk_cb, 6060046406SPierre-Louis Bossart .matches = { 6160046406SPierre-Louis Bossart DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), 6260046406SPierre-Louis Bossart DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Miix 2 10"), 6360046406SPierre-Louis Bossart }, 6460046406SPierre-Louis Bossart }, 65d3dcc588SHans de Goede { 66d3dcc588SHans de Goede /* Point of View mobii wintab p1006w (v1.0) */ 67d3dcc588SHans de Goede .callback = byt_pov_p1006w_quirk_cb, 68d3dcc588SHans de Goede .matches = { 69d3dcc588SHans de Goede DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Insyde"), 70d3dcc588SHans de Goede DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "BayTrail"), 71d3dcc588SHans de Goede /* Note 105b is Foxcon's USB/PCI vendor id */ 72d3dcc588SHans de Goede DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "105B"), 73d3dcc588SHans de Goede DMI_EXACT_MATCH(DMI_BOARD_NAME, "0E57"), 74d3dcc588SHans de Goede }, 75d3dcc588SHans de Goede }, 763e951e79SKovács Tamás { 773e951e79SKovács Tamás /* Aegex 10 tablet (RU2) */ 783e951e79SKovács Tamás .callback = byt_aegex10_quirk_cb, 793e951e79SKovács Tamás .matches = { 803e951e79SKovács Tamás DMI_MATCH(DMI_SYS_VENDOR, "AEGEX"), 813e951e79SKovács Tamás DMI_MATCH(DMI_PRODUCT_VERSION, "RU2"), 823e951e79SKovács Tamás }, 833e951e79SKovács Tamás }, 8460046406SPierre-Louis Bossart { } 8560046406SPierre-Louis Bossart }; 8660046406SPierre-Louis Bossart 873e951e79SKovács Tamás /* The Thinkapd 10 and Aegex 10 tablets have the same ID problem */ 8860046406SPierre-Louis Bossart static struct snd_soc_acpi_mach byt_thinkpad_10 = { 8960046406SPierre-Louis Bossart .id = "10EC5640", 9060046406SPierre-Louis Bossart .drv_name = "cht-bsw-rt5672", 9160046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 9260046406SPierre-Louis Bossart .board = "cht-bsw", 93528f0715SPierre-Louis Bossart .sof_fw_filename = "sof-byt.ri", 94528f0715SPierre-Louis Bossart .sof_tplg_filename = "sof-byt-rt5670.tplg", 9560046406SPierre-Louis Bossart }; 9660046406SPierre-Louis Bossart 97d3dcc588SHans de Goede static struct snd_soc_acpi_mach byt_pov_p1006w = { 98d3dcc588SHans de Goede .id = "10EC5640", 99d3dcc588SHans de Goede .drv_name = "bytcr_rt5651", 100d3dcc588SHans de Goede .fw_filename = "intel/fw_sst_0f28.bin", 101d3dcc588SHans de Goede .board = "bytcr_rt5651", 102528f0715SPierre-Louis Bossart .sof_fw_filename = "sof-byt.ri", 103528f0715SPierre-Louis Bossart .sof_tplg_filename = "sof-byt-rt5651.tplg", 104d3dcc588SHans de Goede }; 105d3dcc588SHans de Goede 10660046406SPierre-Louis Bossart static struct snd_soc_acpi_mach *byt_quirk(void *arg) 10760046406SPierre-Louis Bossart { 10860046406SPierre-Louis Bossart struct snd_soc_acpi_mach *mach = arg; 10960046406SPierre-Louis Bossart 11060046406SPierre-Louis Bossart dmi_check_system(byt_table); 11160046406SPierre-Louis Bossart 112d3dcc588SHans de Goede switch (byt_machine_id) { 113d3dcc588SHans de Goede case BYT_THINKPAD_10: 1143e951e79SKovács Tamás case BYT_AEGEX_10: 11560046406SPierre-Louis Bossart return &byt_thinkpad_10; 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 12360046406SPierre-Louis Bossart struct snd_soc_acpi_mach snd_soc_acpi_intel_baytrail_machines[] = { 12460046406SPierre-Louis Bossart { 12560046406SPierre-Louis Bossart .id = "10EC5640", 12660046406SPierre-Louis Bossart .drv_name = "bytcr_rt5640", 12760046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 12860046406SPierre-Louis Bossart .board = "bytcr_rt5640", 12960046406SPierre-Louis Bossart .machine_quirk = byt_quirk, 130528f0715SPierre-Louis Bossart .sof_fw_filename = "sof-byt.ri", 131528f0715SPierre-Louis Bossart .sof_tplg_filename = "sof-byt-rt5640.tplg", 13260046406SPierre-Louis Bossart }, 13360046406SPierre-Louis Bossart { 13460046406SPierre-Louis Bossart .id = "10EC5642", 13560046406SPierre-Louis Bossart .drv_name = "bytcr_rt5640", 13660046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 13760046406SPierre-Louis Bossart .board = "bytcr_rt5640", 138528f0715SPierre-Louis Bossart .sof_fw_filename = "sof-byt.ri", 139528f0715SPierre-Louis Bossart .sof_tplg_filename = "sof-byt-rt5640.tplg", 14060046406SPierre-Louis Bossart }, 14160046406SPierre-Louis Bossart { 14260046406SPierre-Louis Bossart .id = "INTCCFFD", 14360046406SPierre-Louis Bossart .drv_name = "bytcr_rt5640", 14460046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 14560046406SPierre-Louis Bossart .board = "bytcr_rt5640", 146528f0715SPierre-Louis Bossart .sof_fw_filename = "sof-byt.ri", 147528f0715SPierre-Louis Bossart .sof_tplg_filename = "sof-byt-rt5640.tplg", 14860046406SPierre-Louis Bossart }, 14960046406SPierre-Louis Bossart { 15060046406SPierre-Louis Bossart .id = "10EC5651", 15160046406SPierre-Louis Bossart .drv_name = "bytcr_rt5651", 15260046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 15360046406SPierre-Louis Bossart .board = "bytcr_rt5651", 154528f0715SPierre-Louis Bossart .sof_fw_filename = "sof-byt.ri", 155528f0715SPierre-Louis Bossart .sof_tplg_filename = "sof-byt-rt5651.tplg", 15660046406SPierre-Louis Bossart }, 15760046406SPierre-Louis Bossart { 158*9a87fc1eSPierre-Louis Bossart .id = "WM510204", 159*9a87fc1eSPierre-Louis Bossart .drv_name = "bytcr_wm5102", 160*9a87fc1eSPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 161*9a87fc1eSPierre-Louis Bossart .board = "bytcr_wm5102", 162*9a87fc1eSPierre-Louis Bossart .sof_fw_filename = "sof-byt.ri", 163*9a87fc1eSPierre-Louis Bossart .sof_tplg_filename = "sof-byt-wm5102.tplg", 164*9a87fc1eSPierre-Louis Bossart }, 165*9a87fc1eSPierre-Louis Bossart { 166*9a87fc1eSPierre-Louis Bossart .id = "WM510205", 167*9a87fc1eSPierre-Louis Bossart .drv_name = "bytcr_wm5102", 168*9a87fc1eSPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 169*9a87fc1eSPierre-Louis Bossart .board = "bytcr_wm5102", 170*9a87fc1eSPierre-Louis Bossart .sof_fw_filename = "sof-byt.ri", 171*9a87fc1eSPierre-Louis Bossart .sof_tplg_filename = "sof-byt-wm5102.tplg", 172*9a87fc1eSPierre-Louis Bossart }, 173*9a87fc1eSPierre-Louis Bossart { 17460046406SPierre-Louis Bossart .id = "DLGS7212", 17560046406SPierre-Louis Bossart .drv_name = "bytcht_da7213", 17660046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 17760046406SPierre-Louis Bossart .board = "bytcht_da7213", 178528f0715SPierre-Louis Bossart .sof_fw_filename = "sof-byt.ri", 179528f0715SPierre-Louis Bossart .sof_tplg_filename = "sof-byt-da7213.tplg", 18060046406SPierre-Louis Bossart }, 18160046406SPierre-Louis Bossart { 18260046406SPierre-Louis Bossart .id = "DLGS7213", 18360046406SPierre-Louis Bossart .drv_name = "bytcht_da7213", 18460046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 18560046406SPierre-Louis Bossart .board = "bytcht_da7213", 186528f0715SPierre-Louis Bossart .sof_fw_filename = "sof-byt.ri", 187528f0715SPierre-Louis Bossart .sof_tplg_filename = "sof-byt-da7213.tplg", 18860046406SPierre-Louis Bossart }, 1895198baf8SHans de Goede { 1905198baf8SHans de Goede .id = "ESSX8316", 1915198baf8SHans de Goede .drv_name = "bytcht_es8316", 1925198baf8SHans de Goede .fw_filename = "intel/fw_sst_0f28.bin", 1935198baf8SHans de Goede .board = "bytcht_es8316", 194528f0715SPierre-Louis Bossart .sof_fw_filename = "sof-byt.ri", 195528f0715SPierre-Louis Bossart .sof_tplg_filename = "sof-byt-es8316.tplg", 1965198baf8SHans de Goede }, 197f70abd75SBard liao { 198f70abd75SBard liao .id = "10EC5682", 199f70abd75SBard liao .drv_name = "sof_rt5682", 200f70abd75SBard liao .sof_fw_filename = "sof-byt.ri", 201f70abd75SBard liao .sof_tplg_filename = "sof-byt-rt5682.tplg", 202f70abd75SBard liao }, 20360046406SPierre-Louis Bossart /* some Baytrail platforms rely on RT5645, use CHT machine driver */ 20460046406SPierre-Louis Bossart { 20560046406SPierre-Louis Bossart .id = "10EC5645", 20660046406SPierre-Louis Bossart .drv_name = "cht-bsw-rt5645", 20760046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 20860046406SPierre-Louis Bossart .board = "cht-bsw", 209528f0715SPierre-Louis Bossart .sof_fw_filename = "sof-byt.ri", 210528f0715SPierre-Louis Bossart .sof_tplg_filename = "sof-byt-rt5645.tplg", 21160046406SPierre-Louis Bossart }, 21260046406SPierre-Louis Bossart { 21360046406SPierre-Louis Bossart .id = "10EC5648", 21460046406SPierre-Louis Bossart .drv_name = "cht-bsw-rt5645", 21560046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 21660046406SPierre-Louis Bossart .board = "cht-bsw", 217528f0715SPierre-Louis Bossart .sof_fw_filename = "sof-byt.ri", 218528f0715SPierre-Louis Bossart .sof_tplg_filename = "sof-byt-rt5645.tplg", 21960046406SPierre-Louis Bossart }, 22060046406SPierre-Louis Bossart /* use CHT driver to Baytrail Chromebooks */ 22160046406SPierre-Louis Bossart { 22260046406SPierre-Louis Bossart .id = "193C9890", 22360046406SPierre-Louis Bossart .drv_name = "cht-bsw-max98090", 22460046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 22560046406SPierre-Louis Bossart .board = "cht-bsw", 226528f0715SPierre-Louis Bossart .sof_fw_filename = "sof-byt.ri", 227528f0715SPierre-Louis Bossart .sof_tplg_filename = "sof-byt-max98090.tplg", 22860046406SPierre-Louis Bossart }, 2293917da94STakashi Iwai { 2303917da94STakashi Iwai .id = "14F10720", 2313917da94STakashi Iwai .drv_name = "bytcht_cx2072x", 2323917da94STakashi Iwai .fw_filename = "intel/fw_sst_0f28.bin", 2333917da94STakashi Iwai .board = "bytcht_cx2072x", 2343917da94STakashi Iwai .sof_fw_filename = "sof-byt.ri", 2353917da94STakashi Iwai .sof_tplg_filename = "sof-byt-cx2072x.tplg", 2363917da94STakashi Iwai }, 23760046406SPierre-Louis Bossart #if IS_ENABLED(CONFIG_SND_SOC_INTEL_BYT_CHT_NOCODEC_MACH) 23860046406SPierre-Louis Bossart /* 23960046406SPierre-Louis Bossart * This is always last in the table so that it is selected only when 24060046406SPierre-Louis Bossart * enabled explicitly and there is no codec-related information in SSDT 24160046406SPierre-Louis Bossart */ 24260046406SPierre-Louis Bossart { 24360046406SPierre-Louis Bossart .id = "80860F28", 24460046406SPierre-Louis Bossart .drv_name = "bytcht_nocodec", 24560046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin", 24660046406SPierre-Louis Bossart .board = "bytcht_nocodec", 24760046406SPierre-Louis Bossart }, 24860046406SPierre-Louis Bossart #endif 24960046406SPierre-Louis Bossart {}, 25060046406SPierre-Louis Bossart }; 25160046406SPierre-Louis Bossart EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_baytrail_machines); 252