xref: /linux/sound/soc/sof/intel/pci-apl.c (revision 3de9c42d02a79a5e09bbee7a4421ddc00cfd5c6d)
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
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 bxt_desc = {
23  	.machines		= snd_soc_acpi_intel_bxt_machines,
24  	.use_acpi_target_states	= true,
25  	.resindex_lpe_base	= 0,
26  	.resindex_pcicfg_base	= -1,
27  	.resindex_imr_base	= -1,
28  	.irqindex_host_ipc	= -1,
29  	.chip_info = &apl_chip_info,
30  	.ipc_supported_mask	= BIT(SOF_IPC_TYPE_3) | BIT(SOF_IPC_TYPE_4),
31  	.ipc_default		= SOF_IPC_TYPE_3,
32  	.dspless_mode_supported	= true,		/* Only supported for HDaudio */
33  	.default_fw_path = {
34  		[SOF_IPC_TYPE_3] = "intel/sof",
35  		[SOF_IPC_TYPE_4] = "intel/avs/apl",
36  	},
37  	.default_lib_path = {
38  		[SOF_IPC_TYPE_4] = "intel/avs-lib/apl",
39  	},
40  	.default_tplg_path = {
41  		[SOF_IPC_TYPE_3] = "intel/sof-tplg",
42  		[SOF_IPC_TYPE_4] = "intel/avs-tplg",
43  	},
44  	.default_fw_filename = {
45  		[SOF_IPC_TYPE_3] = "sof-apl.ri",
46  		[SOF_IPC_TYPE_4] = "dsp_basefw.bin",
47  	},
48  	.nocodec_tplg_filename = "sof-apl-nocodec.tplg",
49  	.ops = &sof_apl_ops,
50  	.ops_init = sof_apl_ops_init,
51  	.ops_free = hda_ops_free,
52  };
53  
54  static const struct sof_dev_desc glk_desc = {
55  	.machines		= snd_soc_acpi_intel_glk_machines,
56  	.use_acpi_target_states	= true,
57  	.resindex_lpe_base	= 0,
58  	.resindex_pcicfg_base	= -1,
59  	.resindex_imr_base	= -1,
60  	.irqindex_host_ipc	= -1,
61  	.chip_info = &apl_chip_info,
62  	.ipc_supported_mask	= BIT(SOF_IPC_TYPE_3) | BIT(SOF_IPC_TYPE_4),
63  	.ipc_default		= SOF_IPC_TYPE_3,
64  	.dspless_mode_supported	= true,		/* Only supported for HDaudio */
65  	.default_fw_path = {
66  		[SOF_IPC_TYPE_3] = "intel/sof",
67  		[SOF_IPC_TYPE_4] = "intel/avs/glk",
68  	},
69  	.default_lib_path = {
70  		[SOF_IPC_TYPE_4] = "intel/avs-lib/glk",
71  	},
72  	.default_tplg_path = {
73  		[SOF_IPC_TYPE_3] = "intel/sof-tplg",
74  		[SOF_IPC_TYPE_4] = "intel/avs-tplg",
75  	},
76  	.default_fw_filename = {
77  		[SOF_IPC_TYPE_3] = "sof-glk.ri",
78  		[SOF_IPC_TYPE_4] = "dsp_basefw.bin",
79  	},
80  	.nocodec_tplg_filename = "sof-glk-nocodec.tplg",
81  	.ops = &sof_apl_ops,
82  	.ops_init = sof_apl_ops_init,
83  	.ops_free = hda_ops_free,
84  };
85  
86  /* PCI IDs */
87  static const struct pci_device_id sof_pci_ids[] = {
88  	{ PCI_DEVICE_DATA(INTEL, HDA_APL, &bxt_desc) },
89  	{ PCI_DEVICE_DATA(INTEL, HDA_GML, &glk_desc) },
90  	{ 0, }
91  };
92  MODULE_DEVICE_TABLE(pci, sof_pci_ids);
93  
94  /* pci_driver definition */
95  static struct pci_driver snd_sof_pci_intel_apl_driver = {
96  	.name = "sof-audio-pci-intel-apl",
97  	.id_table = sof_pci_ids,
98  	.probe = hda_pci_intel_probe,
99  	.remove = sof_pci_remove,
100  	.shutdown = sof_pci_shutdown,
101  	.driver = {
102  		.pm = &sof_pci_pm,
103  	},
104  };
105  module_pci_driver(snd_sof_pci_intel_apl_driver);
106  
107  MODULE_LICENSE("Dual BSD/GPL");
108  MODULE_DESCRIPTION("SOF support for ApolloLake platforms");
109  MODULE_IMPORT_NS(SND_SOC_SOF_INTEL_HDA_GENERIC);
110  MODULE_IMPORT_NS(SND_SOC_SOF_INTEL_HDA_COMMON);
111  MODULE_IMPORT_NS(SND_SOC_SOF_PCI_DEV);
112