1 // SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) 2 // 3 // This file is provided under a dual BSD/GPLv2 license. When using or 4 // redistributing this file, you may do so under either license. 5 // 6 // Copyright(c) 2018-2021 Intel Corporation. All rights reserved. 7 // 8 // Author: Liam Girdwood <liam.r.girdwood@linux.intel.com> 9 // 10 11 #include <linux/module.h> 12 #include <linux/pci.h> 13 #include <sound/soc-acpi.h> 14 #include <sound/soc-acpi-intel-match.h> 15 #include <sound/sof.h> 16 #include "../ops.h" 17 #include "../sof-pci-dev.h" 18 19 /* platform specific devices */ 20 #include "hda.h" 21 22 static const struct sof_dev_desc tgl_desc = { 23 .machines = snd_soc_acpi_intel_tgl_machines, 24 .alt_machines = snd_soc_acpi_intel_tgl_sdw_machines, 25 .use_acpi_target_states = true, 26 .resindex_lpe_base = 0, 27 .resindex_pcicfg_base = -1, 28 .resindex_imr_base = -1, 29 .irqindex_host_ipc = -1, 30 .chip_info = &tgl_chip_info, 31 .ipc_supported_mask = BIT(SOF_IPC_TYPE_3) | BIT(SOF_IPC_TYPE_4), 32 .ipc_default = SOF_IPC_TYPE_3, 33 .dspless_mode_supported = true, /* Only supported for HDaudio */ 34 .default_fw_path = { 35 [SOF_IPC_TYPE_3] = "intel/sof", 36 [SOF_IPC_TYPE_4] = "intel/sof-ipc4/tgl", 37 }, 38 .default_lib_path = { 39 [SOF_IPC_TYPE_4] = "intel/sof-ipc4-lib/tgl", 40 }, 41 .default_tplg_path = { 42 [SOF_IPC_TYPE_3] = "intel/sof-tplg", 43 [SOF_IPC_TYPE_4] = "intel/sof-ipc4-tplg", 44 }, 45 .default_fw_filename = { 46 [SOF_IPC_TYPE_3] = "sof-tgl.ri", 47 [SOF_IPC_TYPE_4] = "sof-tgl.ri", 48 }, 49 .nocodec_tplg_filename = "sof-tgl-nocodec.tplg", 50 .ops = &sof_tgl_ops, 51 .ops_init = sof_tgl_ops_init, 52 .ops_free = hda_ops_free, 53 }; 54 55 static const struct sof_dev_desc tglh_desc = { 56 .machines = snd_soc_acpi_intel_tgl_machines, 57 .alt_machines = snd_soc_acpi_intel_tgl_sdw_machines, 58 .use_acpi_target_states = true, 59 .resindex_lpe_base = 0, 60 .resindex_pcicfg_base = -1, 61 .resindex_imr_base = -1, 62 .irqindex_host_ipc = -1, 63 .chip_info = &tglh_chip_info, 64 .ipc_supported_mask = BIT(SOF_IPC_TYPE_3) | BIT(SOF_IPC_TYPE_4), 65 .ipc_default = SOF_IPC_TYPE_3, 66 .dspless_mode_supported = true, /* Only supported for HDaudio */ 67 .default_fw_path = { 68 [SOF_IPC_TYPE_3] = "intel/sof", 69 [SOF_IPC_TYPE_4] = "intel/sof-ipc4/tgl-h", 70 }, 71 .default_lib_path = { 72 [SOF_IPC_TYPE_4] = "intel/sof-ipc4-lib/tgl-h", 73 }, 74 .default_tplg_path = { 75 [SOF_IPC_TYPE_3] = "intel/sof-tplg", 76 [SOF_IPC_TYPE_4] = "intel/sof-ipc4-tplg", 77 }, 78 .default_fw_filename = { 79 [SOF_IPC_TYPE_3] = "sof-tgl-h.ri", 80 [SOF_IPC_TYPE_4] = "sof-tgl-h.ri", 81 }, 82 .nocodec_tplg_filename = "sof-tgl-nocodec.tplg", 83 .ops = &sof_tgl_ops, 84 .ops_init = sof_tgl_ops_init, 85 .ops_free = hda_ops_free, 86 }; 87 88 static const struct sof_dev_desc ehl_desc = { 89 .machines = snd_soc_acpi_intel_ehl_machines, 90 .use_acpi_target_states = true, 91 .resindex_lpe_base = 0, 92 .resindex_pcicfg_base = -1, 93 .resindex_imr_base = -1, 94 .irqindex_host_ipc = -1, 95 .chip_info = &ehl_chip_info, 96 .ipc_supported_mask = BIT(SOF_IPC_TYPE_3) | BIT(SOF_IPC_TYPE_4), 97 .ipc_default = SOF_IPC_TYPE_3, 98 .dspless_mode_supported = true, /* Only supported for HDaudio */ 99 .default_fw_path = { 100 [SOF_IPC_TYPE_3] = "intel/sof", 101 [SOF_IPC_TYPE_4] = "intel/sof-ipc4/ehl", 102 }, 103 .default_lib_path = { 104 [SOF_IPC_TYPE_4] = "intel/sof-ipc4-lib/ehl", 105 }, 106 .default_tplg_path = { 107 [SOF_IPC_TYPE_3] = "intel/sof-tplg", 108 [SOF_IPC_TYPE_4] = "intel/sof-ipc4-tplg", 109 }, 110 .default_fw_filename = { 111 [SOF_IPC_TYPE_3] = "sof-ehl.ri", 112 [SOF_IPC_TYPE_4] = "sof-ehl.ri", 113 }, 114 .nocodec_tplg_filename = "sof-ehl-nocodec.tplg", 115 .ops = &sof_tgl_ops, 116 .ops_init = sof_tgl_ops_init, 117 .ops_free = hda_ops_free, 118 }; 119 120 static const struct sof_dev_desc adls_desc = { 121 .machines = snd_soc_acpi_intel_adl_machines, 122 .alt_machines = snd_soc_acpi_intel_adl_sdw_machines, 123 .use_acpi_target_states = true, 124 .resindex_lpe_base = 0, 125 .resindex_pcicfg_base = -1, 126 .resindex_imr_base = -1, 127 .irqindex_host_ipc = -1, 128 .chip_info = &adls_chip_info, 129 .ipc_supported_mask = BIT(SOF_IPC_TYPE_3) | BIT(SOF_IPC_TYPE_4), 130 .ipc_default = SOF_IPC_TYPE_3, 131 .dspless_mode_supported = true, /* Only supported for HDaudio */ 132 .default_fw_path = { 133 [SOF_IPC_TYPE_3] = "intel/sof", 134 [SOF_IPC_TYPE_4] = "intel/sof-ipc4/adl-s", 135 }, 136 .default_lib_path = { 137 [SOF_IPC_TYPE_4] = "intel/sof-ipc4-lib/adl-s", 138 }, 139 .default_tplg_path = { 140 [SOF_IPC_TYPE_3] = "intel/sof-tplg", 141 [SOF_IPC_TYPE_4] = "intel/sof-ipc4-tplg", 142 }, 143 .default_fw_filename = { 144 [SOF_IPC_TYPE_3] = "sof-adl-s.ri", 145 [SOF_IPC_TYPE_4] = "sof-adl-s.ri", 146 }, 147 .nocodec_tplg_filename = "sof-adl-nocodec.tplg", 148 .ops = &sof_tgl_ops, 149 .ops_init = sof_tgl_ops_init, 150 .ops_free = hda_ops_free, 151 }; 152 153 static const struct sof_dev_desc adl_desc = { 154 .machines = snd_soc_acpi_intel_adl_machines, 155 .alt_machines = snd_soc_acpi_intel_adl_sdw_machines, 156 .use_acpi_target_states = true, 157 .resindex_lpe_base = 0, 158 .resindex_pcicfg_base = -1, 159 .resindex_imr_base = -1, 160 .irqindex_host_ipc = -1, 161 .chip_info = &tgl_chip_info, 162 .ipc_supported_mask = BIT(SOF_IPC_TYPE_3) | BIT(SOF_IPC_TYPE_4), 163 .ipc_default = SOF_IPC_TYPE_3, 164 .dspless_mode_supported = true, /* Only supported for HDaudio */ 165 .default_fw_path = { 166 [SOF_IPC_TYPE_3] = "intel/sof", 167 [SOF_IPC_TYPE_4] = "intel/sof-ipc4/adl", 168 }, 169 .default_lib_path = { 170 [SOF_IPC_TYPE_4] = "intel/sof-ipc4-lib/adl", 171 }, 172 .default_tplg_path = { 173 [SOF_IPC_TYPE_3] = "intel/sof-tplg", 174 [SOF_IPC_TYPE_4] = "intel/sof-ipc4-tplg", 175 }, 176 .default_fw_filename = { 177 [SOF_IPC_TYPE_3] = "sof-adl.ri", 178 [SOF_IPC_TYPE_4] = "sof-adl.ri", 179 }, 180 .nocodec_tplg_filename = "sof-adl-nocodec.tplg", 181 .ops = &sof_tgl_ops, 182 .ops_init = sof_tgl_ops_init, 183 .ops_free = hda_ops_free, 184 }; 185 186 static const struct sof_dev_desc adl_n_desc = { 187 .machines = snd_soc_acpi_intel_adl_machines, 188 .alt_machines = snd_soc_acpi_intel_adl_sdw_machines, 189 .use_acpi_target_states = true, 190 .resindex_lpe_base = 0, 191 .resindex_pcicfg_base = -1, 192 .resindex_imr_base = -1, 193 .irqindex_host_ipc = -1, 194 .chip_info = &tgl_chip_info, 195 .ipc_supported_mask = BIT(SOF_IPC_TYPE_3) | BIT(SOF_IPC_TYPE_4), 196 .ipc_default = SOF_IPC_TYPE_3, 197 .dspless_mode_supported = true, /* Only supported for HDaudio */ 198 .default_fw_path = { 199 [SOF_IPC_TYPE_3] = "intel/sof", 200 [SOF_IPC_TYPE_4] = "intel/sof-ipc4/adl-n", 201 }, 202 .default_lib_path = { 203 [SOF_IPC_TYPE_4] = "intel/sof-ipc4-lib/adl-n", 204 }, 205 .default_tplg_path = { 206 [SOF_IPC_TYPE_3] = "intel/sof-tplg", 207 [SOF_IPC_TYPE_4] = "intel/sof-ipc4-tplg", 208 }, 209 .default_fw_filename = { 210 [SOF_IPC_TYPE_3] = "sof-adl-n.ri", 211 [SOF_IPC_TYPE_4] = "sof-adl-n.ri", 212 }, 213 .nocodec_tplg_filename = "sof-adl-nocodec.tplg", 214 .ops = &sof_tgl_ops, 215 .ops_init = sof_tgl_ops_init, 216 .ops_free = hda_ops_free, 217 }; 218 219 static const struct sof_dev_desc rpls_desc = { 220 .machines = snd_soc_acpi_intel_rpl_machines, 221 .alt_machines = snd_soc_acpi_intel_rpl_sdw_machines, 222 .use_acpi_target_states = true, 223 .resindex_lpe_base = 0, 224 .resindex_pcicfg_base = -1, 225 .resindex_imr_base = -1, 226 .irqindex_host_ipc = -1, 227 .chip_info = &adls_chip_info, 228 .ipc_supported_mask = BIT(SOF_IPC_TYPE_3) | BIT(SOF_IPC_TYPE_4), 229 .ipc_default = SOF_IPC_TYPE_3, 230 .dspless_mode_supported = true, /* Only supported for HDaudio */ 231 .default_fw_path = { 232 [SOF_IPC_TYPE_3] = "intel/sof", 233 [SOF_IPC_TYPE_4] = "intel/sof-ipc4/rpl-s", 234 }, 235 .default_lib_path = { 236 [SOF_IPC_TYPE_4] = "intel/sof-ipc4-lib/rpl-s", 237 }, 238 .default_tplg_path = { 239 [SOF_IPC_TYPE_3] = "intel/sof-tplg", 240 [SOF_IPC_TYPE_4] = "intel/sof-ipc4-tplg", 241 }, 242 .default_fw_filename = { 243 [SOF_IPC_TYPE_3] = "sof-rpl-s.ri", 244 [SOF_IPC_TYPE_4] = "sof-rpl-s.ri", 245 }, 246 .nocodec_tplg_filename = "sof-rpl-nocodec.tplg", 247 .ops = &sof_tgl_ops, 248 .ops_init = sof_tgl_ops_init, 249 .ops_free = hda_ops_free, 250 }; 251 252 static const struct sof_dev_desc rpl_desc = { 253 .machines = snd_soc_acpi_intel_rpl_machines, 254 .alt_machines = snd_soc_acpi_intel_rpl_sdw_machines, 255 .use_acpi_target_states = true, 256 .resindex_lpe_base = 0, 257 .resindex_pcicfg_base = -1, 258 .resindex_imr_base = -1, 259 .irqindex_host_ipc = -1, 260 .chip_info = &tgl_chip_info, 261 .ipc_supported_mask = BIT(SOF_IPC_TYPE_3) | BIT(SOF_IPC_TYPE_4), 262 .ipc_default = SOF_IPC_TYPE_3, 263 .dspless_mode_supported = true, /* Only supported for HDaudio */ 264 .default_fw_path = { 265 [SOF_IPC_TYPE_3] = "intel/sof", 266 [SOF_IPC_TYPE_4] = "intel/sof-ipc4/rpl", 267 }, 268 .default_lib_path = { 269 [SOF_IPC_TYPE_4] = "intel/sof-ipc4-lib/rpl", 270 }, 271 .default_tplg_path = { 272 [SOF_IPC_TYPE_3] = "intel/sof-tplg", 273 [SOF_IPC_TYPE_4] = "intel/sof-ipc4-tplg", 274 }, 275 .default_fw_filename = { 276 [SOF_IPC_TYPE_3] = "sof-rpl.ri", 277 [SOF_IPC_TYPE_4] = "sof-rpl.ri", 278 }, 279 .nocodec_tplg_filename = "sof-rpl-nocodec.tplg", 280 .ops = &sof_tgl_ops, 281 .ops_init = sof_tgl_ops_init, 282 .ops_free = hda_ops_free, 283 }; 284 285 /* PCI IDs */ 286 static const struct pci_device_id sof_pci_ids[] = { 287 { PCI_DEVICE_DATA(INTEL, HDA_TGL_LP, &tgl_desc) }, 288 { PCI_DEVICE_DATA(INTEL, HDA_TGL_H, &tglh_desc) }, 289 { PCI_DEVICE_DATA(INTEL, HDA_EHL_0, &ehl_desc) }, 290 { PCI_DEVICE_DATA(INTEL, HDA_EHL_3, &ehl_desc) }, 291 { PCI_DEVICE_DATA(INTEL, HDA_ADL_S, &adls_desc) }, 292 { PCI_DEVICE_DATA(INTEL, HDA_RPL_S, &rpls_desc) }, 293 { PCI_DEVICE_DATA(INTEL, HDA_ADL_P, &adl_desc) }, 294 { PCI_DEVICE_DATA(INTEL, HDA_ADL_PS, &adl_desc) }, 295 { PCI_DEVICE_DATA(INTEL, HDA_RPL_P_0, &rpl_desc) }, 296 { PCI_DEVICE_DATA(INTEL, HDA_RPL_P_1, &rpl_desc) }, 297 { PCI_DEVICE_DATA(INTEL, HDA_ADL_M, &adl_desc) }, 298 { PCI_DEVICE_DATA(INTEL, HDA_ADL_PX, &adl_desc) }, 299 { PCI_DEVICE_DATA(INTEL, HDA_RPL_M, &rpl_desc) }, 300 { PCI_DEVICE_DATA(INTEL, HDA_RPL_PX, &rpl_desc) }, 301 { PCI_DEVICE_DATA(INTEL, HDA_ADL_N, &adl_n_desc) }, 302 { 0, } 303 }; 304 MODULE_DEVICE_TABLE(pci, sof_pci_ids); 305 306 /* pci_driver definition */ 307 static struct pci_driver snd_sof_pci_intel_tgl_driver = { 308 .name = "sof-audio-pci-intel-tgl", 309 .id_table = sof_pci_ids, 310 .probe = hda_pci_intel_probe, 311 .remove = sof_pci_remove, 312 .shutdown = sof_pci_shutdown, 313 .driver = { 314 .pm = &sof_pci_pm, 315 }, 316 }; 317 module_pci_driver(snd_sof_pci_intel_tgl_driver); 318 319 MODULE_LICENSE("Dual BSD/GPL"); 320 MODULE_IMPORT_NS(SND_SOC_SOF_INTEL_HDA_COMMON); 321 MODULE_IMPORT_NS(SND_SOC_SOF_PCI_DEV); 322