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(list: 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 | |