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"); 197