xref: /openbmc/linux/sound/soc/sof/intel/pci-mtl.c (revision b181f7029bd71238ac2754ce7052dffd69432085)
1064520e8SBard Liao // SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause)
2064520e8SBard Liao //
3064520e8SBard Liao // This file is provided under a dual BSD/GPLv2 license.  When using or
4064520e8SBard Liao // redistributing this file, you may do so under either license.
5064520e8SBard Liao //
6064520e8SBard Liao // Copyright(c) 2018-2022 Intel Corporation. All rights reserved.
7064520e8SBard Liao //
8064520e8SBard Liao // Author: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
9064520e8SBard Liao //
10064520e8SBard Liao 
11064520e8SBard Liao #include <linux/module.h>
12064520e8SBard Liao #include <linux/pci.h>
13064520e8SBard Liao #include <sound/soc-acpi.h>
14064520e8SBard Liao #include <sound/soc-acpi-intel-match.h>
15064520e8SBard Liao #include <sound/sof.h>
16064520e8SBard Liao #include "../ops.h"
17064520e8SBard Liao #include "../sof-pci-dev.h"
18064520e8SBard Liao 
19064520e8SBard Liao /* platform specific devices */
20064520e8SBard Liao #include "hda.h"
21064520e8SBard Liao #include "mtl.h"
22064520e8SBard Liao 
23064520e8SBard Liao static const struct sof_dev_desc mtl_desc = {
24064520e8SBard Liao 	.use_acpi_target_states	= true,
25064520e8SBard Liao 	.machines               = snd_soc_acpi_intel_mtl_machines,
26064520e8SBard Liao 	.alt_machines		= snd_soc_acpi_intel_mtl_sdw_machines,
27064520e8SBard Liao 	.resindex_lpe_base      = 0,
28064520e8SBard Liao 	.resindex_pcicfg_base   = -1,
29064520e8SBard Liao 	.resindex_imr_base      = -1,
30064520e8SBard Liao 	.irqindex_host_ipc      = -1,
31064520e8SBard Liao 	.chip_info = &mtl_chip_info,
32064520e8SBard Liao 	.ipc_supported_mask	= BIT(SOF_INTEL_IPC4),
33064520e8SBard Liao 	.ipc_default		= SOF_INTEL_IPC4,
34b58bbd06SPeter Ujfalusi 	.dspless_mode_supported	= true,		/* Only supported for HDaudio */
35064520e8SBard Liao 	.default_fw_path = {
36064520e8SBard Liao 		[SOF_INTEL_IPC4] = "intel/sof-ipc4/mtl",
37064520e8SBard Liao 	},
38cd6f2a2eSPeter Ujfalusi 	.default_lib_path = {
39cd6f2a2eSPeter Ujfalusi 		[SOF_INTEL_IPC4] = "intel/sof-ipc4-lib/mtl",
40cd6f2a2eSPeter Ujfalusi 	},
41064520e8SBard Liao 	.default_tplg_path = {
42064520e8SBard Liao 		[SOF_INTEL_IPC4] = "intel/sof-ace-tplg",
43064520e8SBard Liao 	},
44064520e8SBard Liao 	.default_fw_filename = {
4573189c06SPierre-Louis Bossart 		[SOF_INTEL_IPC4] = "sof-mtl.ri",
46064520e8SBard Liao 	},
47064520e8SBard Liao 	.nocodec_tplg_filename = "sof-mtl-nocodec.tplg",
48064520e8SBard Liao 	.ops = &sof_mtl_ops,
49064520e8SBard Liao 	.ops_init = sof_mtl_ops_init,
50a659e35cSRanjani Sridharan 	.ops_free = hda_ops_free,
51064520e8SBard Liao };
52064520e8SBard Liao 
53*368017b1SPierre-Louis Bossart static const struct sof_dev_desc arl_s_desc = {
541ef8f0b4SArun T 	.use_acpi_target_states = true,
551ef8f0b4SArun T 	.machines               = snd_soc_acpi_intel_arl_machines,
561ef8f0b4SArun T 	.alt_machines           = snd_soc_acpi_intel_arl_sdw_machines,
571ef8f0b4SArun T 	.resindex_lpe_base      = 0,
581ef8f0b4SArun T 	.resindex_pcicfg_base   = -1,
591ef8f0b4SArun T 	.resindex_imr_base      = -1,
601ef8f0b4SArun T 	.irqindex_host_ipc      = -1,
61*368017b1SPierre-Louis Bossart 	.chip_info = &arl_s_chip_info,
621ef8f0b4SArun T 	.ipc_supported_mask     = BIT(SOF_IPC_TYPE_4),
631ef8f0b4SArun T 	.ipc_default            = SOF_IPC_TYPE_4,
641ef8f0b4SArun T 	.dspless_mode_supported = true,         /* Only supported for HDaudio */
651ef8f0b4SArun T 	.default_fw_path = {
66*368017b1SPierre-Louis Bossart 		[SOF_IPC_TYPE_4] = "intel/sof-ipc4/arl-s",
671ef8f0b4SArun T 	},
681ef8f0b4SArun T 	.default_lib_path = {
69*368017b1SPierre-Louis Bossart 		[SOF_IPC_TYPE_4] = "intel/sof-ipc4-lib/arl-s",
701ef8f0b4SArun T 	},
711ef8f0b4SArun T 	.default_tplg_path = {
721ef8f0b4SArun T 		[SOF_IPC_TYPE_4] = "intel/sof-ace-tplg",
731ef8f0b4SArun T 	},
741ef8f0b4SArun T 	.default_fw_filename = {
75*368017b1SPierre-Louis Bossart 		[SOF_IPC_TYPE_4] = "sof-arl-s.ri",
761ef8f0b4SArun T 	},
771ef8f0b4SArun T 	.nocodec_tplg_filename = "sof-arl-nocodec.tplg",
781ef8f0b4SArun T 	.ops = &sof_mtl_ops,
791ef8f0b4SArun T 	.ops_init = sof_mtl_ops_init,
801ef8f0b4SArun T 	.ops_free = hda_ops_free,
811ef8f0b4SArun T };
821ef8f0b4SArun T 
83064520e8SBard Liao /* PCI IDs */
84064520e8SBard Liao static const struct pci_device_id sof_pci_ids[] = {
85a9022f4bSAmadeusz Sławiński 	{ PCI_DEVICE_DATA(INTEL, HDA_MTL, &mtl_desc) },
86*368017b1SPierre-Louis Bossart 	{ PCI_DEVICE_DATA(INTEL, HDA_ARL_S, &arl_s_desc) },
87064520e8SBard Liao 	{ 0, }
88064520e8SBard Liao };
89064520e8SBard Liao MODULE_DEVICE_TABLE(pci, sof_pci_ids);
90064520e8SBard Liao 
91064520e8SBard Liao /* pci_driver definition */
92064520e8SBard Liao static struct pci_driver snd_sof_pci_intel_mtl_driver = {
93064520e8SBard Liao 	.name = "sof-audio-pci-intel-mtl",
94064520e8SBard Liao 	.id_table = sof_pci_ids,
95064520e8SBard Liao 	.probe = hda_pci_intel_probe,
96064520e8SBard Liao 	.remove = sof_pci_remove,
97064520e8SBard Liao 	.shutdown = sof_pci_shutdown,
98064520e8SBard Liao 	.driver = {
99064520e8SBard Liao 		.pm = &sof_pci_pm,
100064520e8SBard Liao 	},
101064520e8SBard Liao };
102064520e8SBard Liao module_pci_driver(snd_sof_pci_intel_mtl_driver);
103064520e8SBard Liao 
104064520e8SBard Liao MODULE_LICENSE("Dual BSD/GPL");
105064520e8SBard Liao MODULE_IMPORT_NS(SND_SOC_SOF_INTEL_HDA_COMMON);
106064520e8SBard Liao MODULE_IMPORT_NS(SND_SOC_SOF_PCI_DEV);
107