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
byt_rt5672_quirk_cb(const struct dmi_system_id * id)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
byt_pov_p1006w_quirk_cb(const struct dmi_system_id * id)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_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_tplg_filename = "sof-byt-rt5651.tplg",
103d3dcc588SHans de Goede };
104d3dcc588SHans de Goede
byt_quirk(void * arg)10560046406SPierre-Louis Bossart static struct snd_soc_acpi_mach *byt_quirk(void *arg)
10660046406SPierre-Louis Bossart {
10760046406SPierre-Louis Bossart struct snd_soc_acpi_mach *mach = arg;
10860046406SPierre-Louis Bossart
10960046406SPierre-Louis Bossart dmi_check_system(byt_table);
11060046406SPierre-Louis Bossart
111d3dcc588SHans de Goede switch (byt_machine_id) {
112ebbb165dSHans de Goede case BYT_RT5672:
113ebbb165dSHans de Goede return &byt_rt5672;
114d3dcc588SHans de Goede case BYT_POV_P1006W:
115d3dcc588SHans de Goede return &byt_pov_p1006w;
116d3dcc588SHans de Goede default:
11760046406SPierre-Louis Bossart return mach;
11860046406SPierre-Louis Bossart }
119d3dcc588SHans de Goede }
12060046406SPierre-Louis Bossart
121dac7cbd5SPierre-Louis Bossart static const struct snd_soc_acpi_codecs rt5640_comp_ids = {
122dac7cbd5SPierre-Louis Bossart .num_codecs = 3,
123dac7cbd5SPierre-Louis Bossart .codecs = { "10EC5640", "10EC5642", "INTCCFFD"},
124dac7cbd5SPierre-Louis Bossart };
125dac7cbd5SPierre-Louis Bossart
126dac7cbd5SPierre-Louis Bossart static const struct snd_soc_acpi_codecs wm5102_comp_ids = {
127*c963e2ecSHans de Goede .num_codecs = 3,
1287e1d728aSHans de Goede .codecs = { "10WM5102", "WM510204", "WM510205"},
129dac7cbd5SPierre-Louis Bossart };
130dac7cbd5SPierre-Louis Bossart
131dac7cbd5SPierre-Louis Bossart static const struct snd_soc_acpi_codecs da7213_comp_ids = {
132dac7cbd5SPierre-Louis Bossart .num_codecs = 2,
133dac7cbd5SPierre-Louis Bossart .codecs = { "DGLS7212", "DGLS7213"},
134dac7cbd5SPierre-Louis Bossart };
135dac7cbd5SPierre-Louis Bossart
136dac7cbd5SPierre-Louis Bossart static const struct snd_soc_acpi_codecs rt5645_comp_ids = {
137dac7cbd5SPierre-Louis Bossart .num_codecs = 2,
138dac7cbd5SPierre-Louis Bossart .codecs = { "10EC5645", "10EC5648"},
139dac7cbd5SPierre-Louis Bossart };
140dac7cbd5SPierre-Louis Bossart
14160046406SPierre-Louis Bossart struct snd_soc_acpi_mach snd_soc_acpi_intel_baytrail_machines[] = {
14260046406SPierre-Louis Bossart {
143dac7cbd5SPierre-Louis Bossart .comp_ids = &rt5640_comp_ids,
14460046406SPierre-Louis Bossart .drv_name = "bytcr_rt5640",
14560046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin",
14660046406SPierre-Louis Bossart .board = "bytcr_rt5640",
14760046406SPierre-Louis Bossart .machine_quirk = byt_quirk,
148528f0715SPierre-Louis Bossart .sof_tplg_filename = "sof-byt-rt5640.tplg",
14960046406SPierre-Louis Bossart },
15060046406SPierre-Louis Bossart {
15160046406SPierre-Louis Bossart .id = "10EC5651",
15260046406SPierre-Louis Bossart .drv_name = "bytcr_rt5651",
15360046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin",
15460046406SPierre-Louis Bossart .board = "bytcr_rt5651",
155528f0715SPierre-Louis Bossart .sof_tplg_filename = "sof-byt-rt5651.tplg",
15660046406SPierre-Louis Bossart },
15760046406SPierre-Louis Bossart {
158dac7cbd5SPierre-Louis Bossart .comp_ids = &wm5102_comp_ids,
1599a87fc1eSPierre-Louis Bossart .drv_name = "bytcr_wm5102",
1609a87fc1eSPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin",
1619a87fc1eSPierre-Louis Bossart .board = "bytcr_wm5102",
1629a87fc1eSPierre-Louis Bossart .sof_tplg_filename = "sof-byt-wm5102.tplg",
1639a87fc1eSPierre-Louis Bossart },
1649a87fc1eSPierre-Louis Bossart {
165dac7cbd5SPierre-Louis Bossart .comp_ids = &da7213_comp_ids,
16660046406SPierre-Louis Bossart .drv_name = "bytcht_da7213",
16760046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin",
16860046406SPierre-Louis Bossart .board = "bytcht_da7213",
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_tplg_filename = "sof-byt-es8316.tplg",
1775198baf8SHans de Goede },
178f70abd75SBard liao {
179f70abd75SBard liao .id = "10EC5682",
180f70abd75SBard liao .drv_name = "sof_rt5682",
181f70abd75SBard liao .sof_tplg_filename = "sof-byt-rt5682.tplg",
182f70abd75SBard liao },
18360046406SPierre-Louis Bossart /* some Baytrail platforms rely on RT5645, use CHT machine driver */
18460046406SPierre-Louis Bossart {
185dac7cbd5SPierre-Louis Bossart .comp_ids = &rt5645_comp_ids,
18660046406SPierre-Louis Bossart .drv_name = "cht-bsw-rt5645",
18760046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin",
18860046406SPierre-Louis Bossart .board = "cht-bsw",
189528f0715SPierre-Louis Bossart .sof_tplg_filename = "sof-byt-rt5645.tplg",
19060046406SPierre-Louis Bossart },
19160046406SPierre-Louis Bossart /* use CHT driver to Baytrail Chromebooks */
19260046406SPierre-Louis Bossart {
19360046406SPierre-Louis Bossart .id = "193C9890",
19460046406SPierre-Louis Bossart .drv_name = "cht-bsw-max98090",
19560046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin",
19660046406SPierre-Louis Bossart .board = "cht-bsw",
197528f0715SPierre-Louis Bossart .sof_tplg_filename = "sof-byt-max98090.tplg",
19860046406SPierre-Louis Bossart },
1993917da94STakashi Iwai {
2003917da94STakashi Iwai .id = "14F10720",
2013917da94STakashi Iwai .drv_name = "bytcht_cx2072x",
2023917da94STakashi Iwai .fw_filename = "intel/fw_sst_0f28.bin",
2033917da94STakashi Iwai .board = "bytcht_cx2072x",
2043917da94STakashi Iwai .sof_tplg_filename = "sof-byt-cx2072x.tplg",
2053917da94STakashi Iwai },
20660046406SPierre-Louis Bossart #if IS_ENABLED(CONFIG_SND_SOC_INTEL_BYT_CHT_NOCODEC_MACH)
20760046406SPierre-Louis Bossart /*
20860046406SPierre-Louis Bossart * This is always last in the table so that it is selected only when
20960046406SPierre-Louis Bossart * enabled explicitly and there is no codec-related information in SSDT
21060046406SPierre-Louis Bossart */
21160046406SPierre-Louis Bossart {
21260046406SPierre-Louis Bossart .id = "80860F28",
21360046406SPierre-Louis Bossart .drv_name = "bytcht_nocodec",
21460046406SPierre-Louis Bossart .fw_filename = "intel/fw_sst_0f28.bin",
21560046406SPierre-Louis Bossart .board = "bytcht_nocodec",
21660046406SPierre-Louis Bossart },
21760046406SPierre-Louis Bossart #endif
21860046406SPierre-Louis Bossart {},
21960046406SPierre-Louis Bossart };
22060046406SPierre-Louis Bossart EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_baytrail_machines);
221