1 /* 2 * soc-apci-intel-cht-match.c - tables and support for CHT 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 cht_machine_id; 22 23 #define CHT_SURFACE_MACH 1 24 25 static int cht_surface_quirk_cb(const struct dmi_system_id *id) 26 { 27 cht_machine_id = CHT_SURFACE_MACH; 28 return 1; 29 } 30 31 static const struct dmi_system_id cht_table[] = { 32 { 33 .callback = cht_surface_quirk_cb, 34 .matches = { 35 DMI_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"), 36 DMI_MATCH(DMI_PRODUCT_NAME, "Surface 3"), 37 }, 38 }, 39 { } 40 }; 41 42 static struct snd_soc_acpi_mach cht_surface_mach = { 43 .id = "10EC5640", 44 .drv_name = "cht-bsw-rt5645", 45 .fw_filename = "intel/fw_sst_22a8.bin", 46 .board = "cht-bsw", 47 .sof_fw_filename = "sof-cht.ri", 48 .sof_tplg_filename = "sof-cht-rt5645.tplg", 49 }; 50 51 static struct snd_soc_acpi_mach *cht_quirk(void *arg) 52 { 53 struct snd_soc_acpi_mach *mach = arg; 54 55 dmi_check_system(cht_table); 56 57 if (cht_machine_id == CHT_SURFACE_MACH) 58 return &cht_surface_mach; 59 else 60 return mach; 61 } 62 63 /* Cherryview-based platforms: CherryTrail and Braswell */ 64 struct snd_soc_acpi_mach snd_soc_acpi_intel_cherrytrail_machines[] = { 65 { 66 .id = "10EC5670", 67 .drv_name = "cht-bsw-rt5672", 68 .fw_filename = "intel/fw_sst_22a8.bin", 69 .board = "cht-bsw", 70 .sof_fw_filename = "sof-cht.ri", 71 .sof_tplg_filename = "sof-cht-rt5670.tplg", 72 }, 73 { 74 .id = "10EC5672", 75 .drv_name = "cht-bsw-rt5672", 76 .fw_filename = "intel/fw_sst_22a8.bin", 77 .board = "cht-bsw", 78 .sof_fw_filename = "sof-cht.ri", 79 .sof_tplg_filename = "sof-cht-rt5670.tplg", 80 }, 81 { 82 .id = "10EC5645", 83 .drv_name = "cht-bsw-rt5645", 84 .fw_filename = "intel/fw_sst_22a8.bin", 85 .board = "cht-bsw", 86 .sof_fw_filename = "sof-cht.ri", 87 .sof_tplg_filename = "sof-cht-rt5645.tplg", 88 }, 89 { 90 .id = "10EC5650", 91 .drv_name = "cht-bsw-rt5645", 92 .fw_filename = "intel/fw_sst_22a8.bin", 93 .board = "cht-bsw", 94 .sof_fw_filename = "sof-cht.ri", 95 .sof_tplg_filename = "sof-cht-rt5645.tplg", 96 }, 97 { 98 .id = "10EC3270", 99 .drv_name = "cht-bsw-rt5645", 100 .fw_filename = "intel/fw_sst_22a8.bin", 101 .board = "cht-bsw", 102 .sof_fw_filename = "sof-cht.ri", 103 .sof_tplg_filename = "sof-cht-rt5645.tplg", 104 }, 105 { 106 .id = "193C9890", 107 .drv_name = "cht-bsw-max98090", 108 .fw_filename = "intel/fw_sst_22a8.bin", 109 .board = "cht-bsw", 110 .sof_fw_filename = "sof-cht.ri", 111 .sof_tplg_filename = "sof-cht-max98090.tplg", 112 }, 113 { 114 .id = "10508824", 115 .drv_name = "cht-bsw-nau8824", 116 .fw_filename = "intel/fw_sst_22a8.bin", 117 .board = "cht-bsw", 118 .sof_fw_filename = "sof-cht.ri", 119 .sof_tplg_filename = "sof-cht-nau8824.tplg", 120 }, 121 { 122 .id = "DLGS7212", 123 .drv_name = "bytcht_da7213", 124 .fw_filename = "intel/fw_sst_22a8.bin", 125 .board = "bytcht_da7213", 126 .sof_fw_filename = "sof-cht.ri", 127 .sof_tplg_filename = "sof-cht-da7213.tplg", 128 }, 129 { 130 .id = "DLGS7213", 131 .drv_name = "bytcht_da7213", 132 .fw_filename = "intel/fw_sst_22a8.bin", 133 .board = "bytcht_da7213", 134 .sof_fw_filename = "sof-cht.ri", 135 .sof_tplg_filename = "sof-cht-da7213.tplg", 136 }, 137 { 138 .id = "ESSX8316", 139 .drv_name = "bytcht_es8316", 140 .fw_filename = "intel/fw_sst_22a8.bin", 141 .board = "bytcht_es8316", 142 .sof_fw_filename = "sof-cht.ri", 143 .sof_tplg_filename = "sof-cht-es8316.tplg", 144 }, 145 /* some CHT-T platforms rely on RT5640, use Baytrail machine driver */ 146 { 147 .id = "10EC5640", 148 .drv_name = "bytcr_rt5640", 149 .fw_filename = "intel/fw_sst_22a8.bin", 150 .board = "bytcr_rt5640", 151 .machine_quirk = cht_quirk, 152 .sof_fw_filename = "sof-cht.ri", 153 .sof_tplg_filename = "sof-cht-rt5640.tplg", 154 }, 155 { 156 .id = "10EC3276", 157 .drv_name = "bytcr_rt5640", 158 .fw_filename = "intel/fw_sst_22a8.bin", 159 .board = "bytcr_rt5640", 160 .sof_fw_filename = "sof-cht.ri", 161 .sof_tplg_filename = "sof-cht-rt5640.tplg", 162 }, 163 /* some CHT-T platforms rely on RT5651, use Baytrail machine driver */ 164 { 165 .id = "10EC5651", 166 .drv_name = "bytcr_rt5651", 167 .fw_filename = "intel/fw_sst_22a8.bin", 168 .board = "bytcr_rt5651", 169 .sof_fw_filename = "sof-cht.ri", 170 .sof_tplg_filename = "sof-cht-rt5651.tplg", 171 }, 172 #if IS_ENABLED(CONFIG_SND_SOC_INTEL_BYT_CHT_NOCODEC_MACH) 173 /* 174 * This is always last in the table so that it is selected only when 175 * enabled explicitly and there is no codec-related information in SSDT 176 */ 177 { 178 .id = "808622A8", 179 .drv_name = "bytcht_nocodec", 180 .fw_filename = "intel/fw_sst_22a8.bin", 181 .board = "bytcht_nocodec", 182 }, 183 #endif 184 {}, 185 }; 186 EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_cherrytrail_machines); 187 188 MODULE_LICENSE("GPL v2"); 189 MODULE_DESCRIPTION("Intel Common ACPI Match module"); 190