325 lines · c
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 or4// redistributing this file, you may do so under either license.5//6// Copyright(c) 2018-2021 Intel Corporation7//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 22static 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 55static 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 88static 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 120static 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 153static 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 186static const struct sof_dev_desc adln_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 219static 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 252static 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 */286static 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, &adln_desc) },302 { 0, }303};304MODULE_DEVICE_TABLE(pci, sof_pci_ids);305 306/* pci_driver definition */307static 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};317module_pci_driver(snd_sof_pci_intel_tgl_driver);318 319MODULE_LICENSE("Dual BSD/GPL");320MODULE_DESCRIPTION("SOF support for TigerLake platforms");321MODULE_IMPORT_NS(SND_SOC_SOF_INTEL_HDA_GENERIC);322MODULE_IMPORT_NS(SND_SOC_SOF_INTEL_HDA_COMMON);323MODULE_IMPORT_NS(SND_SOC_SOF_INTEL_CNL);324MODULE_IMPORT_NS(SND_SOC_SOF_PCI_DEV);325