Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/sound/soc/intel/common/soc-acpi-intel-byt-match.c
26493 views
1
// SPDX-License-Identifier: GPL-2.0-only
2
/*
3
* soc-acpi-intel-byt-match.c - tables and support for BYT ACPI enumeration.
4
*
5
* Copyright (c) 2017, Intel Corporation.
6
*/
7
8
#include <linux/dmi.h>
9
#include <sound/soc-acpi.h>
10
#include <sound/soc-acpi-intel-match.h>
11
12
static unsigned long byt_machine_id;
13
14
#define BYT_RT5672 1
15
#define BYT_POV_P1006W 2
16
17
static int byt_rt5672_quirk_cb(const struct dmi_system_id *id)
18
{
19
byt_machine_id = BYT_RT5672;
20
return 1;
21
}
22
23
static int byt_pov_p1006w_quirk_cb(const struct dmi_system_id *id)
24
{
25
byt_machine_id = BYT_POV_P1006W;
26
return 1;
27
}
28
29
static const struct dmi_system_id byt_table[] = {
30
{
31
.callback = byt_rt5672_quirk_cb,
32
.matches = {
33
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
34
DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad 8"),
35
},
36
},
37
{
38
.callback = byt_rt5672_quirk_cb,
39
.matches = {
40
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
41
DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad 10"),
42
},
43
},
44
{
45
.callback = byt_rt5672_quirk_cb,
46
.matches = {
47
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
48
DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad Tablet B"),
49
},
50
},
51
{
52
.callback = byt_rt5672_quirk_cb,
53
.matches = {
54
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
55
DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Miix 2 10"),
56
},
57
},
58
{
59
/* Point of View mobii wintab p1006w (v1.0) */
60
.callback = byt_pov_p1006w_quirk_cb,
61
.matches = {
62
DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Insyde"),
63
DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "BayTrail"),
64
/* Note 105b is Foxcon's USB/PCI vendor id */
65
DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "105B"),
66
DMI_EXACT_MATCH(DMI_BOARD_NAME, "0E57"),
67
},
68
},
69
{
70
/* Aegex 10 tablet (RU2) */
71
.callback = byt_rt5672_quirk_cb,
72
.matches = {
73
DMI_MATCH(DMI_SYS_VENDOR, "AEGEX"),
74
DMI_MATCH(DMI_PRODUCT_VERSION, "RU2"),
75
},
76
},
77
{
78
/* Dell Venue 10 Pro 5055 */
79
.callback = byt_rt5672_quirk_cb,
80
.matches = {
81
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
82
DMI_MATCH(DMI_PRODUCT_NAME, "Venue 10 Pro 5055"),
83
},
84
},
85
{ }
86
};
87
88
/* Various devices use an ACPI id of 10EC5640 while using a rt5672 codec */
89
static struct snd_soc_acpi_mach byt_rt5672 = {
90
.id = "10EC5640",
91
.drv_name = "cht-bsw-rt5672",
92
.fw_filename = "intel/fw_sst_0f28.bin",
93
.board = "cht-bsw",
94
.sof_tplg_filename = "sof-byt-rt5670.tplg",
95
};
96
97
static struct snd_soc_acpi_mach byt_pov_p1006w = {
98
.id = "10EC5640",
99
.drv_name = "bytcr_rt5651",
100
.fw_filename = "intel/fw_sst_0f28.bin",
101
.board = "bytcr_rt5651",
102
.sof_tplg_filename = "sof-byt-rt5651.tplg",
103
};
104
105
static struct snd_soc_acpi_mach *byt_quirk(void *arg)
106
{
107
struct snd_soc_acpi_mach *mach = arg;
108
109
dmi_check_system(byt_table);
110
111
switch (byt_machine_id) {
112
case BYT_RT5672:
113
return &byt_rt5672;
114
case BYT_POV_P1006W:
115
return &byt_pov_p1006w;
116
default:
117
return mach;
118
}
119
}
120
121
static const struct snd_soc_acpi_codecs rt5640_comp_ids = {
122
.num_codecs = 3,
123
.codecs = { "10EC5640", "10EC5642", "INTCCFFD"},
124
};
125
126
static const struct snd_soc_acpi_codecs wm5102_comp_ids = {
127
.num_codecs = 3,
128
.codecs = { "10WM5102", "WM510204", "WM510205"},
129
};
130
131
static const struct snd_soc_acpi_codecs da7213_comp_ids = {
132
.num_codecs = 2,
133
.codecs = { "DGLS7212", "DGLS7213"},
134
};
135
136
static const struct snd_soc_acpi_codecs rt5645_comp_ids = {
137
.num_codecs = 2,
138
.codecs = { "10EC5645", "10EC5648"},
139
};
140
141
struct snd_soc_acpi_mach snd_soc_acpi_intel_baytrail_machines[] = {
142
{
143
.comp_ids = &rt5640_comp_ids,
144
.drv_name = "bytcr_rt5640",
145
.fw_filename = "intel/fw_sst_0f28.bin",
146
.board = "bytcr_rt5640",
147
.machine_quirk = byt_quirk,
148
.sof_tplg_filename = "sof-byt-rt5640.tplg",
149
},
150
{
151
.id = "10EC5651",
152
.drv_name = "bytcr_rt5651",
153
.fw_filename = "intel/fw_sst_0f28.bin",
154
.board = "bytcr_rt5651",
155
.sof_tplg_filename = "sof-byt-rt5651.tplg",
156
},
157
{
158
.comp_ids = &wm5102_comp_ids,
159
.drv_name = "bytcr_wm5102",
160
.fw_filename = "intel/fw_sst_0f28.bin",
161
.board = "bytcr_wm5102",
162
.sof_tplg_filename = "sof-byt-wm5102.tplg",
163
},
164
{
165
.comp_ids = &da7213_comp_ids,
166
.drv_name = "bytcht_da7213",
167
.fw_filename = "intel/fw_sst_0f28.bin",
168
.board = "bytcht_da7213",
169
.sof_tplg_filename = "sof-byt-da7213.tplg",
170
},
171
{
172
.id = "ESSX8316",
173
.drv_name = "bytcht_es8316",
174
.fw_filename = "intel/fw_sst_0f28.bin",
175
.board = "bytcht_es8316",
176
.sof_tplg_filename = "sof-byt-es8316.tplg",
177
},
178
{
179
.id = "10EC5682",
180
.drv_name = "sof_rt5682",
181
.sof_tplg_filename = "sof-byt-rt5682.tplg",
182
},
183
/* some Baytrail platforms rely on RT5645, use CHT machine driver */
184
{
185
.comp_ids = &rt5645_comp_ids,
186
.drv_name = "cht-bsw-rt5645",
187
.fw_filename = "intel/fw_sst_0f28.bin",
188
.board = "cht-bsw",
189
.sof_tplg_filename = "sof-byt-rt5645.tplg",
190
},
191
/* use CHT driver to Baytrail Chromebooks */
192
{
193
.id = "193C9890",
194
.drv_name = "cht-bsw-max98090",
195
.fw_filename = "intel/fw_sst_0f28.bin",
196
.board = "cht-bsw",
197
.sof_tplg_filename = "sof-byt-max98090.tplg",
198
},
199
{
200
.id = "14F10720",
201
.drv_name = "bytcht_cx2072x",
202
.fw_filename = "intel/fw_sst_0f28.bin",
203
.board = "bytcht_cx2072x",
204
.sof_tplg_filename = "sof-byt-cx2072x.tplg",
205
},
206
#if IS_ENABLED(CONFIG_SND_SOC_INTEL_BYT_CHT_NOCODEC_MACH)
207
/*
208
* This is always last in the table so that it is selected only when
209
* enabled explicitly and there is no codec-related information in SSDT
210
*/
211
{
212
.id = "80860F28",
213
.drv_name = "bytcht_nocodec",
214
.fw_filename = "intel/fw_sst_0f28.bin",
215
.board = "bytcht_nocodec",
216
},
217
#endif
218
{},
219
};
220
EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_baytrail_machines);
221
222