Merge remote-tracking branch 'asoc/topic/intel' into asoc-next
[sfrench/cifs-2.6.git] / sound / soc / intel / common / soc-acpi-intel-byt-match.c
1 /*
2  * soc-apci-intel-byt-match.c - tables and support for BYT ACPI enumeration.
3  *
4  * Copyright (c) 2017, Intel Corporation.
5  *
6  *
7  * This program is free software; you can redistribute it and/or modify it
8  * under the terms and conditions of the GNU General Public License,
9  * version 2, as published by the Free Software Foundation.
10  *
11  * This program is distributed in the hope it will be useful, but WITHOUT
12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
14  * more details.
15  */
16
17 #include <linux/dmi.h>
18 #include <sound/soc-acpi.h>
19 #include <sound/soc-acpi-intel-match.h>
20
21 static unsigned long byt_machine_id;
22
23 #define BYT_THINKPAD_10  1
24
25 static int byt_thinkpad10_quirk_cb(const struct dmi_system_id *id)
26 {
27         byt_machine_id = BYT_THINKPAD_10;
28         return 1;
29 }
30
31
32 static const struct dmi_system_id byt_table[] = {
33         {
34                 .callback = byt_thinkpad10_quirk_cb,
35                 .matches = {
36                         DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
37                         DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad 10"),
38                 },
39         },
40         {
41                 .callback = byt_thinkpad10_quirk_cb,
42                 .matches = {
43                         DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
44                         DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad Tablet B"),
45                 },
46         },
47         {
48                 .callback = byt_thinkpad10_quirk_cb,
49                 .matches = {
50                         DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
51                         DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo Miix 2 10"),
52                 },
53         },
54         { }
55 };
56
57 static struct snd_soc_acpi_mach byt_thinkpad_10 = {
58         .id = "10EC5640",
59         .drv_name = "cht-bsw-rt5672",
60         .fw_filename = "intel/fw_sst_0f28.bin",
61         .board = "cht-bsw",
62         .sof_fw_filename = "intel/reef-byt.ri",
63         .sof_tplg_filename = "intel/reef-byt-rt5670.tplg",
64         .asoc_plat_name = "sst-mfld-platform",
65 };
66
67 static struct snd_soc_acpi_mach *byt_quirk(void *arg)
68 {
69         struct snd_soc_acpi_mach *mach = arg;
70
71         dmi_check_system(byt_table);
72
73         if (byt_machine_id == BYT_THINKPAD_10)
74                 return &byt_thinkpad_10;
75         else
76                 return mach;
77 }
78
79 struct snd_soc_acpi_mach snd_soc_acpi_intel_baytrail_legacy_machines[] = {
80         {
81                 .id = "10EC5640",
82                 .drv_name = "byt-rt5640",
83                 .fw_filename = "intel/fw_sst_0f28.bin-48kHz_i2s_master",
84         },
85         {
86                 .id = "193C9890",
87                 .drv_name = "byt-max98090",
88                 .fw_filename = "intel/fw_sst_0f28.bin-48kHz_i2s_master",
89         },
90         {}
91 };
92 EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_baytrail_legacy_machines);
93
94 struct snd_soc_acpi_mach  snd_soc_acpi_intel_baytrail_machines[] = {
95         {
96                 .id = "10EC5640",
97                 .drv_name = "bytcr_rt5640",
98                 .fw_filename = "intel/fw_sst_0f28.bin",
99                 .board = "bytcr_rt5640",
100                 .machine_quirk = byt_quirk,
101                 .sof_fw_filename = "intel/reef-byt.ri",
102                 .sof_tplg_filename = "intel/reef-byt-rt5640.tplg",
103                 .asoc_plat_name = "sst-mfld-platform",
104         },
105         {
106                 .id = "10EC5642",
107                 .drv_name = "bytcr_rt5640",
108                 .fw_filename = "intel/fw_sst_0f28.bin",
109                 .board = "bytcr_rt5640",
110                 .sof_fw_filename = "intel/reef-byt.ri",
111                 .sof_tplg_filename = "intel/reef-byt-rt5640.tplg",
112                 .asoc_plat_name = "sst-mfld-platform",
113         },
114         {
115                 .id = "INTCCFFD",
116                 .drv_name = "bytcr_rt5640",
117                 .fw_filename = "intel/fw_sst_0f28.bin",
118                 .board = "bytcr_rt5640",
119                 .sof_fw_filename = "intel/reef-byt.ri",
120                 .sof_tplg_filename = "intel/reef-byt-rt5640.tplg",
121                 .asoc_plat_name = "sst-mfld-platform",
122         },
123         {
124                 .id = "10EC5651",
125                 .drv_name = "bytcr_rt5651",
126                 .fw_filename = "intel/fw_sst_0f28.bin",
127                 .board = "bytcr_rt5651",
128                 .sof_fw_filename = "intel/reef-byt.ri",
129                 .sof_tplg_filename = "intel/reef-byt-rt5651.tplg",
130                 .asoc_plat_name = "sst-mfld-platform",
131         },
132         {
133                 .id = "DLGS7212",
134                 .drv_name = "bytcht_da7213",
135                 .fw_filename = "intel/fw_sst_0f28.bin",
136                 .board = "bytcht_da7213",
137                 .sof_fw_filename = "intel/reef-byt.ri",
138                 .sof_tplg_filename = "intel/reef-byt-da7213.tplg",
139                 .asoc_plat_name = "sst-mfld-platform",
140         },
141         {
142                 .id = "DLGS7213",
143                 .drv_name = "bytcht_da7213",
144                 .fw_filename = "intel/fw_sst_0f28.bin",
145                 .board = "bytcht_da7213",
146                 .sof_fw_filename = "intel/reef-byt.ri",
147                 .sof_tplg_filename = "intel/reef-byt-da7213.tplg",
148                 .asoc_plat_name = "sst-mfld-platform",
149         },
150         /* some Baytrail platforms rely on RT5645, use CHT machine driver */
151         {
152                 .id = "10EC5645",
153                 .drv_name = "cht-bsw-rt5645",
154                 .fw_filename = "intel/fw_sst_0f28.bin",
155                 .board = "cht-bsw",
156                 .sof_fw_filename = "intel/reef-byt.ri",
157                 .sof_tplg_filename = "intel/reef-byt-rt5645.tplg",
158                 .asoc_plat_name = "sst-mfld-platform",
159         },
160         {
161                 .id = "10EC5648",
162                 .drv_name = "cht-bsw-rt5645",
163                 .fw_filename = "intel/fw_sst_0f28.bin",
164                 .board = "cht-bsw",
165                 .sof_fw_filename = "intel/reef-byt.ri",
166                 .sof_tplg_filename = "intel/reef-byt-rt5645.tplg",
167                 .asoc_plat_name = "sst-mfld-platform",
168         },
169         /* use CHT driver to Baytrail Chromebooks */
170         {
171                 .id = "193C9890",
172                 .drv_name = "cht-bsw-max98090",
173                 .fw_filename = "intel/fw_sst_0f28.bin",
174                 .board = "cht-bsw",
175                 .sof_fw_filename = "intel/reef-byt.ri",
176                 .sof_tplg_filename = "intel/reef-byt-max98090.tplg",
177                 .asoc_plat_name = "sst-mfld-platform",
178         },
179 #if IS_ENABLED(CONFIG_SND_SOC_INTEL_BYT_CHT_NOCODEC_MACH)
180         /*
181          * This is always last in the table so that it is selected only when
182          * enabled explicitly and there is no codec-related information in SSDT
183          */
184         {
185                 .id = "80860F28",
186                 .drv_name = "bytcht_nocodec",
187                 .fw_filename = "intel/fw_sst_0f28.bin",
188                 .board = "bytcht_nocodec",
189         },
190 #endif
191         {},
192 };
193 EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_baytrail_machines);
194
195 MODULE_LICENSE("GPL v2");
196 MODULE_DESCRIPTION("Intel Common ACPI Match module");