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 
14*ebbb165dSHans de Goede #define BYT_RT5672       1
15d3dcc588SHans de Goede #define BYT_POV_P1006W   2
1660046406SPierre-Louis Bossart 
17*ebbb165dSHans de Goede static int byt_rt5672_quirk_cb(const struct dmi_system_id *id)
1860046406SPierre-Louis Bossart {
19*ebbb165dSHans 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 	{
31*ebbb165dSHans 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 	{
38*ebbb165dSHans 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 	{
45*ebbb165dSHans 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 	{
52*ebbb165dSHans 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) */
71*ebbb165dSHans 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 	},
7760046406SPierre-Louis Bossart 	{ }
7860046406SPierre-Louis Bossart };
7960046406SPierre-Louis Bossart 
80*ebbb165dSHans de Goede /* Various devices use an ACPI id of 10EC5640 while using a rt5672 codec */
81*ebbb165dSHans de Goede static struct snd_soc_acpi_mach byt_rt5672 = {
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",
86528f0715SPierre-Louis Bossart 	.sof_fw_filename = "sof-byt.ri",
87528f0715SPierre-Louis Bossart 	.sof_tplg_filename = "sof-byt-rt5670.tplg",
8860046406SPierre-Louis Bossart };
8960046406SPierre-Louis Bossart 
90d3dcc588SHans de Goede static struct snd_soc_acpi_mach byt_pov_p1006w = {
91d3dcc588SHans de Goede 	.id = "10EC5640",
92d3dcc588SHans de Goede 	.drv_name = "bytcr_rt5651",
93d3dcc588SHans de Goede 	.fw_filename = "intel/fw_sst_0f28.bin",
94d3dcc588SHans de Goede 	.board = "bytcr_rt5651",
95528f0715SPierre-Louis Bossart 	.sof_fw_filename = "sof-byt.ri",
96528f0715SPierre-Louis Bossart 	.sof_tplg_filename = "sof-byt-rt5651.tplg",
97d3dcc588SHans de Goede };
98d3dcc588SHans de Goede 
9960046406SPierre-Louis Bossart static struct snd_soc_acpi_mach *byt_quirk(void *arg)
10060046406SPierre-Louis Bossart {
10160046406SPierre-Louis Bossart 	struct snd_soc_acpi_mach *mach = arg;
10260046406SPierre-Louis Bossart 
10360046406SPierre-Louis Bossart 	dmi_check_system(byt_table);
10460046406SPierre-Louis Bossart 
105d3dcc588SHans de Goede 	switch (byt_machine_id) {
106*ebbb165dSHans de Goede 	case BYT_RT5672:
107*ebbb165dSHans de Goede 		return &byt_rt5672;
108d3dcc588SHans de Goede 	case BYT_POV_P1006W:
109d3dcc588SHans de Goede 		return &byt_pov_p1006w;
110d3dcc588SHans de Goede 	default:
11160046406SPierre-Louis Bossart 		return mach;
11260046406SPierre-Louis Bossart 	}
113d3dcc588SHans de Goede }
11460046406SPierre-Louis Bossart 
11560046406SPierre-Louis Bossart struct snd_soc_acpi_mach  snd_soc_acpi_intel_baytrail_machines[] = {
11660046406SPierre-Louis Bossart 	{
11760046406SPierre-Louis Bossart 		.id = "10EC5640",
11860046406SPierre-Louis Bossart 		.drv_name = "bytcr_rt5640",
11960046406SPierre-Louis Bossart 		.fw_filename = "intel/fw_sst_0f28.bin",
12060046406SPierre-Louis Bossart 		.board = "bytcr_rt5640",
12160046406SPierre-Louis Bossart 		.machine_quirk = byt_quirk,
122528f0715SPierre-Louis Bossart 		.sof_fw_filename = "sof-byt.ri",
123528f0715SPierre-Louis Bossart 		.sof_tplg_filename = "sof-byt-rt5640.tplg",
12460046406SPierre-Louis Bossart 	},
12560046406SPierre-Louis Bossart 	{
12660046406SPierre-Louis Bossart 		.id = "10EC5642",
12760046406SPierre-Louis Bossart 		.drv_name = "bytcr_rt5640",
12860046406SPierre-Louis Bossart 		.fw_filename = "intel/fw_sst_0f28.bin",
12960046406SPierre-Louis Bossart 		.board = "bytcr_rt5640",
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 = "INTCCFFD",
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 = "10EC5651",
14360046406SPierre-Louis Bossart 		.drv_name = "bytcr_rt5651",
14460046406SPierre-Louis Bossart 		.fw_filename = "intel/fw_sst_0f28.bin",
14560046406SPierre-Louis Bossart 		.board = "bytcr_rt5651",
146528f0715SPierre-Louis Bossart 		.sof_fw_filename = "sof-byt.ri",
147528f0715SPierre-Louis Bossart 		.sof_tplg_filename = "sof-byt-rt5651.tplg",
14860046406SPierre-Louis Bossart 	},
14960046406SPierre-Louis Bossart 	{
1509a87fc1eSPierre-Louis Bossart 		.id = "WM510204",
1519a87fc1eSPierre-Louis Bossart 		.drv_name = "bytcr_wm5102",
1529a87fc1eSPierre-Louis Bossart 		.fw_filename = "intel/fw_sst_0f28.bin",
1539a87fc1eSPierre-Louis Bossart 		.board = "bytcr_wm5102",
1549a87fc1eSPierre-Louis Bossart 		.sof_fw_filename = "sof-byt.ri",
1559a87fc1eSPierre-Louis Bossart 		.sof_tplg_filename = "sof-byt-wm5102.tplg",
1569a87fc1eSPierre-Louis Bossart 	},
1579a87fc1eSPierre-Louis Bossart 	{
1589a87fc1eSPierre-Louis Bossart 		.id = "WM510205",
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_fw_filename = "sof-byt.ri",
1639a87fc1eSPierre-Louis Bossart 		.sof_tplg_filename = "sof-byt-wm5102.tplg",
1649a87fc1eSPierre-Louis Bossart 	},
1659a87fc1eSPierre-Louis Bossart 	{
16660046406SPierre-Louis Bossart 		.id = "DLGS7212",
16760046406SPierre-Louis Bossart 		.drv_name = "bytcht_da7213",
16860046406SPierre-Louis Bossart 		.fw_filename = "intel/fw_sst_0f28.bin",
16960046406SPierre-Louis Bossart 		.board = "bytcht_da7213",
170528f0715SPierre-Louis Bossart 		.sof_fw_filename = "sof-byt.ri",
171528f0715SPierre-Louis Bossart 		.sof_tplg_filename = "sof-byt-da7213.tplg",
17260046406SPierre-Louis Bossart 	},
17360046406SPierre-Louis Bossart 	{
17460046406SPierre-Louis Bossart 		.id = "DLGS7213",
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 	},
1815198baf8SHans de Goede 	{
1825198baf8SHans de Goede 		.id = "ESSX8316",
1835198baf8SHans de Goede 		.drv_name = "bytcht_es8316",
1845198baf8SHans de Goede 		.fw_filename = "intel/fw_sst_0f28.bin",
1855198baf8SHans de Goede 		.board = "bytcht_es8316",
186528f0715SPierre-Louis Bossart 		.sof_fw_filename = "sof-byt.ri",
187528f0715SPierre-Louis Bossart 		.sof_tplg_filename = "sof-byt-es8316.tplg",
1885198baf8SHans de Goede 	},
189f70abd75SBard liao 	{
190f70abd75SBard liao 		.id = "10EC5682",
191f70abd75SBard liao 		.drv_name = "sof_rt5682",
192f70abd75SBard liao 		.sof_fw_filename = "sof-byt.ri",
193f70abd75SBard liao 		.sof_tplg_filename = "sof-byt-rt5682.tplg",
194f70abd75SBard liao 	},
19560046406SPierre-Louis Bossart 	/* some Baytrail platforms rely on RT5645, use CHT machine driver */
19660046406SPierre-Louis Bossart 	{
19760046406SPierre-Louis Bossart 		.id = "10EC5645",
19860046406SPierre-Louis Bossart 		.drv_name = "cht-bsw-rt5645",
19960046406SPierre-Louis Bossart 		.fw_filename = "intel/fw_sst_0f28.bin",
20060046406SPierre-Louis Bossart 		.board = "cht-bsw",
201528f0715SPierre-Louis Bossart 		.sof_fw_filename = "sof-byt.ri",
202528f0715SPierre-Louis Bossart 		.sof_tplg_filename = "sof-byt-rt5645.tplg",
20360046406SPierre-Louis Bossart 	},
20460046406SPierre-Louis Bossart 	{
20560046406SPierre-Louis Bossart 		.id = "10EC5648",
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 	/* use CHT driver to Baytrail Chromebooks */
21360046406SPierre-Louis Bossart 	{
21460046406SPierre-Louis Bossart 		.id = "193C9890",
21560046406SPierre-Louis Bossart 		.drv_name = "cht-bsw-max98090",
21660046406SPierre-Louis Bossart 		.fw_filename = "intel/fw_sst_0f28.bin",
21760046406SPierre-Louis Bossart 		.board = "cht-bsw",
218528f0715SPierre-Louis Bossart 		.sof_fw_filename = "sof-byt.ri",
219528f0715SPierre-Louis Bossart 		.sof_tplg_filename = "sof-byt-max98090.tplg",
22060046406SPierre-Louis Bossart 	},
2213917da94STakashi Iwai 	{
2223917da94STakashi Iwai 		.id = "14F10720",
2233917da94STakashi Iwai 		.drv_name = "bytcht_cx2072x",
2243917da94STakashi Iwai 		.fw_filename = "intel/fw_sst_0f28.bin",
2253917da94STakashi Iwai 		.board = "bytcht_cx2072x",
2263917da94STakashi Iwai 		.sof_fw_filename = "sof-byt.ri",
2273917da94STakashi Iwai 		.sof_tplg_filename = "sof-byt-cx2072x.tplg",
2283917da94STakashi Iwai 	},
22960046406SPierre-Louis Bossart #if IS_ENABLED(CONFIG_SND_SOC_INTEL_BYT_CHT_NOCODEC_MACH)
23060046406SPierre-Louis Bossart 	/*
23160046406SPierre-Louis Bossart 	 * This is always last in the table so that it is selected only when
23260046406SPierre-Louis Bossart 	 * enabled explicitly and there is no codec-related information in SSDT
23360046406SPierre-Louis Bossart 	 */
23460046406SPierre-Louis Bossart 	{
23560046406SPierre-Louis Bossart 		.id = "80860F28",
23660046406SPierre-Louis Bossart 		.drv_name = "bytcht_nocodec",
23760046406SPierre-Louis Bossart 		.fw_filename = "intel/fw_sst_0f28.bin",
23860046406SPierre-Louis Bossart 		.board = "bytcht_nocodec",
23960046406SPierre-Louis Bossart 	},
24060046406SPierre-Louis Bossart #endif
24160046406SPierre-Louis Bossart 	{},
24260046406SPierre-Louis Bossart };
24360046406SPierre-Louis Bossart EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_baytrail_machines);
244