Linux Audio

Check our new training course

Loading...
Note: File does not exist in v4.6.
  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
 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 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
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, &adl_n_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_IMPORT_NS(SND_SOC_SOF_INTEL_HDA_COMMON);
321MODULE_IMPORT_NS(SND_SOC_SOF_PCI_DEV);