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_legacy_machines[] = {
12460046406SPierre-Louis Bossart 	{
12560046406SPierre-Louis Bossart 		.id = "10EC5640",
12660046406SPierre-Louis Bossart 		.drv_name = "byt-rt5640",
12760046406SPierre-Louis Bossart 		.fw_filename = "intel/fw_sst_0f28.bin-48kHz_i2s_master",
12860046406SPierre-Louis Bossart 	},
12960046406SPierre-Louis Bossart 	{
13060046406SPierre-Louis Bossart 		.id = "193C9890",
13160046406SPierre-Louis Bossart 		.drv_name = "byt-max98090",
13260046406SPierre-Louis Bossart 		.fw_filename = "intel/fw_sst_0f28.bin-48kHz_i2s_master",
13360046406SPierre-Louis Bossart 	},
13460046406SPierre-Louis Bossart 	{}
13560046406SPierre-Louis Bossart };
13660046406SPierre-Louis Bossart EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_baytrail_legacy_machines);
13760046406SPierre-Louis Bossart 
13860046406SPierre-Louis Bossart struct snd_soc_acpi_mach  snd_soc_acpi_intel_baytrail_machines[] = {
13960046406SPierre-Louis Bossart 	{
14060046406SPierre-Louis Bossart 		.id = "10EC5640",
14160046406SPierre-Louis Bossart 		.drv_name = "bytcr_rt5640",
14260046406SPierre-Louis Bossart 		.fw_filename = "intel/fw_sst_0f28.bin",
14360046406SPierre-Louis Bossart 		.board = "bytcr_rt5640",
14460046406SPierre-Louis Bossart 		.machine_quirk = byt_quirk,
145528f0715SPierre-Louis Bossart 		.sof_fw_filename = "sof-byt.ri",
146528f0715SPierre-Louis Bossart 		.sof_tplg_filename = "sof-byt-rt5640.tplg",
14760046406SPierre-Louis Bossart 	},
14860046406SPierre-Louis Bossart 	{
14960046406SPierre-Louis Bossart 		.id = "10EC5642",
15060046406SPierre-Louis Bossart 		.drv_name = "bytcr_rt5640",
15160046406SPierre-Louis Bossart 		.fw_filename = "intel/fw_sst_0f28.bin",
15260046406SPierre-Louis Bossart 		.board = "bytcr_rt5640",
153528f0715SPierre-Louis Bossart 		.sof_fw_filename = "sof-byt.ri",
154528f0715SPierre-Louis Bossart 		.sof_tplg_filename = "sof-byt-rt5640.tplg",
15560046406SPierre-Louis Bossart 	},
15660046406SPierre-Louis Bossart 	{
15760046406SPierre-Louis Bossart 		.id = "INTCCFFD",
15860046406SPierre-Louis Bossart 		.drv_name = "bytcr_rt5640",
15960046406SPierre-Louis Bossart 		.fw_filename = "intel/fw_sst_0f28.bin",
16060046406SPierre-Louis Bossart 		.board = "bytcr_rt5640",
161528f0715SPierre-Louis Bossart 		.sof_fw_filename = "sof-byt.ri",
162528f0715SPierre-Louis Bossart 		.sof_tplg_filename = "sof-byt-rt5640.tplg",
16360046406SPierre-Louis Bossart 	},
16460046406SPierre-Louis Bossart 	{
16560046406SPierre-Louis Bossart 		.id = "10EC5651",
16660046406SPierre-Louis Bossart 		.drv_name = "bytcr_rt5651",
16760046406SPierre-Louis Bossart 		.fw_filename = "intel/fw_sst_0f28.bin",
16860046406SPierre-Louis Bossart 		.board = "bytcr_rt5651",
169528f0715SPierre-Louis Bossart 		.sof_fw_filename = "sof-byt.ri",
170528f0715SPierre-Louis Bossart 		.sof_tplg_filename = "sof-byt-rt5651.tplg",
17160046406SPierre-Louis Bossart 	},
17260046406SPierre-Louis Bossart 	{
17360046406SPierre-Louis Bossart 		.id = "DLGS7212",
17460046406SPierre-Louis Bossart 		.drv_name = "bytcht_da7213",
17560046406SPierre-Louis Bossart 		.fw_filename = "intel/fw_sst_0f28.bin",
17660046406SPierre-Louis Bossart 		.board = "bytcht_da7213",
177528f0715SPierre-Louis Bossart 		.sof_fw_filename = "sof-byt.ri",
178528f0715SPierre-Louis Bossart 		.sof_tplg_filename = "sof-byt-da7213.tplg",
17960046406SPierre-Louis Bossart 	},
18060046406SPierre-Louis Bossart 	{
18160046406SPierre-Louis Bossart 		.id = "DLGS7213",
18260046406SPierre-Louis Bossart 		.drv_name = "bytcht_da7213",
18360046406SPierre-Louis Bossart 		.fw_filename = "intel/fw_sst_0f28.bin",
18460046406SPierre-Louis Bossart 		.board = "bytcht_da7213",
185528f0715SPierre-Louis Bossart 		.sof_fw_filename = "sof-byt.ri",
186528f0715SPierre-Louis Bossart 		.sof_tplg_filename = "sof-byt-da7213.tplg",
18760046406SPierre-Louis Bossart 	},
1885198baf8SHans de Goede 	{
1895198baf8SHans de Goede 		.id = "ESSX8316",
1905198baf8SHans de Goede 		.drv_name = "bytcht_es8316",
1915198baf8SHans de Goede 		.fw_filename = "intel/fw_sst_0f28.bin",
1925198baf8SHans de Goede 		.board = "bytcht_es8316",
193528f0715SPierre-Louis Bossart 		.sof_fw_filename = "sof-byt.ri",
194528f0715SPierre-Louis Bossart 		.sof_tplg_filename = "sof-byt-es8316.tplg",
1955198baf8SHans de Goede 	},
196f70abd75SBard liao 	{
197f70abd75SBard liao 		.id = "10EC5682",
198f70abd75SBard liao 		.drv_name = "sof_rt5682",
199f70abd75SBard liao 		.sof_fw_filename = "sof-byt.ri",
200f70abd75SBard liao 		.sof_tplg_filename = "sof-byt-rt5682.tplg",
201f70abd75SBard liao 	},
20260046406SPierre-Louis Bossart 	/* some Baytrail platforms rely on RT5645, use CHT machine driver */
20360046406SPierre-Louis Bossart 	{
20460046406SPierre-Louis Bossart 		.id = "10EC5645",
20560046406SPierre-Louis Bossart 		.drv_name = "cht-bsw-rt5645",
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-rt5645.tplg",
21060046406SPierre-Louis Bossart 	},
21160046406SPierre-Louis Bossart 	{
21260046406SPierre-Louis Bossart 		.id = "10EC5648",
21360046406SPierre-Louis Bossart 		.drv_name = "cht-bsw-rt5645",
21460046406SPierre-Louis Bossart 		.fw_filename = "intel/fw_sst_0f28.bin",
21560046406SPierre-Louis Bossart 		.board = "cht-bsw",
216528f0715SPierre-Louis Bossart 		.sof_fw_filename = "sof-byt.ri",
217528f0715SPierre-Louis Bossart 		.sof_tplg_filename = "sof-byt-rt5645.tplg",
21860046406SPierre-Louis Bossart 	},
21960046406SPierre-Louis Bossart 	/* use CHT driver to Baytrail Chromebooks */
22060046406SPierre-Louis Bossart 	{
22160046406SPierre-Louis Bossart 		.id = "193C9890",
22260046406SPierre-Louis Bossart 		.drv_name = "cht-bsw-max98090",
22360046406SPierre-Louis Bossart 		.fw_filename = "intel/fw_sst_0f28.bin",
22460046406SPierre-Louis Bossart 		.board = "cht-bsw",
225528f0715SPierre-Louis Bossart 		.sof_fw_filename = "sof-byt.ri",
226528f0715SPierre-Louis Bossart 		.sof_tplg_filename = "sof-byt-max98090.tplg",
22760046406SPierre-Louis Bossart 	},
2283917da94STakashi Iwai 	{
2293917da94STakashi Iwai 		.id = "14F10720",
2303917da94STakashi Iwai 		.drv_name = "bytcht_cx2072x",
2313917da94STakashi Iwai 		.fw_filename = "intel/fw_sst_0f28.bin",
2323917da94STakashi Iwai 		.board = "bytcht_cx2072x",
2333917da94STakashi Iwai 		.sof_fw_filename = "sof-byt.ri",
2343917da94STakashi Iwai 		.sof_tplg_filename = "sof-byt-cx2072x.tplg",
2353917da94STakashi Iwai 	},
23660046406SPierre-Louis Bossart #if IS_ENABLED(CONFIG_SND_SOC_INTEL_BYT_CHT_NOCODEC_MACH)
23760046406SPierre-Louis Bossart 	/*
23860046406SPierre-Louis Bossart 	 * This is always last in the table so that it is selected only when
23960046406SPierre-Louis Bossart 	 * enabled explicitly and there is no codec-related information in SSDT
24060046406SPierre-Louis Bossart 	 */
24160046406SPierre-Louis Bossart 	{
24260046406SPierre-Louis Bossart 		.id = "80860F28",
24360046406SPierre-Louis Bossart 		.drv_name = "bytcht_nocodec",
24460046406SPierre-Louis Bossart 		.fw_filename = "intel/fw_sst_0f28.bin",
24560046406SPierre-Louis Bossart 		.board = "bytcht_nocodec",
24660046406SPierre-Louis Bossart 	},
24760046406SPierre-Louis Bossart #endif
24860046406SPierre-Louis Bossart 	{},
24960046406SPierre-Louis Bossart };
25060046406SPierre-Louis Bossart EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_baytrail_machines);
25160046406SPierre-Louis Bossart 
25260046406SPierre-Louis Bossart MODULE_LICENSE("GPL v2");
25360046406SPierre-Louis Bossart MODULE_DESCRIPTION("Intel Common ACPI Match module");
254