|
20 | 20 | #include "lnl.h" |
21 | 21 | #include <sound/hda-mlink.h> |
22 | 22 |
|
23 | | -/* LunarLake ops */ |
24 | | -struct snd_sof_dsp_ops sof_lnl_ops; |
25 | | -EXPORT_SYMBOL_NS(sof_lnl_ops, "SND_SOC_SOF_INTEL_LNL"); |
26 | | - |
27 | | -static const struct snd_sof_debugfs_map lnl_dsp_debugfs[] = { |
28 | | - {"hda", HDA_DSP_HDA_BAR, 0, 0x4000, SOF_DEBUGFS_ACCESS_ALWAYS}, |
29 | | - {"pp", HDA_DSP_PP_BAR, 0, 0x1000, SOF_DEBUGFS_ACCESS_ALWAYS}, |
30 | | - {"dsp", HDA_DSP_BAR, 0, 0x10000, SOF_DEBUGFS_ACCESS_ALWAYS}, |
31 | | - {"fw_regs", HDA_DSP_BAR, MTL_SRAM_WINDOW_OFFSET(0), 0x1000, SOF_DEBUGFS_ACCESS_D0_ONLY}, |
32 | | -}; |
33 | | - |
34 | 23 | /* this helps allows the DSP to setup DMIC/SSP */ |
35 | 24 | static int hdac_bus_offload_dmic_ssp(struct hdac_bus *bus, bool enable) |
36 | 25 | { |
@@ -111,78 +100,32 @@ static int lnl_dsp_post_fw_run(struct snd_sof_dev *sdev) |
111 | 100 | return 0; |
112 | 101 | } |
113 | 102 |
|
114 | | -int sof_lnl_ops_init(struct snd_sof_dev *sdev) |
| 103 | +int sof_lnl_set_ops(struct snd_sof_dev *sdev, struct snd_sof_dsp_ops *dsp_ops) |
115 | 104 | { |
116 | | - struct sof_ipc4_fw_data *ipc4_data; |
| 105 | + int ret; |
117 | 106 |
|
118 | | - /* common defaults */ |
119 | | - memcpy(&sof_lnl_ops, &sof_hda_common_ops, sizeof(struct snd_sof_dsp_ops)); |
| 107 | + ret = sof_mtl_set_ops(sdev, dsp_ops); |
| 108 | + if (ret) |
| 109 | + return ret; |
120 | 110 |
|
121 | 111 | /* probe/remove */ |
122 | 112 | if (!sdev->dspless_mode_selected) { |
123 | | - sof_lnl_ops.probe = lnl_hda_dsp_probe; |
124 | | - sof_lnl_ops.remove = lnl_hda_dsp_remove; |
| 113 | + dsp_ops->probe = lnl_hda_dsp_probe; |
| 114 | + dsp_ops->remove = lnl_hda_dsp_remove; |
125 | 115 | } |
126 | 116 |
|
127 | | - /* shutdown */ |
128 | | - sof_lnl_ops.shutdown = hda_dsp_shutdown; |
129 | | - |
130 | | - /* doorbell */ |
131 | | - sof_lnl_ops.irq_thread = mtl_ipc_irq_thread; |
132 | | - |
133 | | - /* ipc */ |
134 | | - sof_lnl_ops.send_msg = mtl_ipc_send_msg; |
135 | | - sof_lnl_ops.get_mailbox_offset = mtl_dsp_ipc_get_mailbox_offset; |
136 | | - sof_lnl_ops.get_window_offset = mtl_dsp_ipc_get_window_offset; |
137 | | - |
138 | | - /* debug */ |
139 | | - sof_lnl_ops.debug_map = lnl_dsp_debugfs; |
140 | | - sof_lnl_ops.debug_map_count = ARRAY_SIZE(lnl_dsp_debugfs); |
141 | | - sof_lnl_ops.dbg_dump = mtl_dsp_dump; |
142 | | - sof_lnl_ops.ipc_dump = mtl_ipc_dump; |
143 | | - |
144 | | - /* pre/post fw run */ |
145 | | - sof_lnl_ops.pre_fw_run = mtl_dsp_pre_fw_run; |
146 | | - sof_lnl_ops.post_fw_run = lnl_dsp_post_fw_run; |
147 | | - |
148 | | - /* parse platform specific extended manifest */ |
149 | | - sof_lnl_ops.parse_platform_ext_manifest = NULL; |
150 | | - |
151 | | - /* dsp core get/put */ |
152 | | - /* TODO: add core_get and core_put */ |
| 117 | + /* post fw run */ |
| 118 | + dsp_ops->post_fw_run = lnl_dsp_post_fw_run; |
153 | 119 |
|
154 | 120 | /* PM */ |
155 | 121 | if (!sdev->dspless_mode_selected) { |
156 | | - sof_lnl_ops.resume = lnl_hda_dsp_resume; |
157 | | - sof_lnl_ops.runtime_resume = lnl_hda_dsp_runtime_resume; |
| 122 | + dsp_ops->resume = lnl_hda_dsp_resume; |
| 123 | + dsp_ops->runtime_resume = lnl_hda_dsp_runtime_resume; |
158 | 124 | } |
159 | 125 |
|
160 | | - /* dsp core get/put */ |
161 | | - sof_lnl_ops.core_get = mtl_dsp_core_get; |
162 | | - sof_lnl_ops.core_put = mtl_dsp_core_put; |
163 | | - |
164 | | - sdev->private = kzalloc(sizeof(struct sof_ipc4_fw_data), GFP_KERNEL); |
165 | | - if (!sdev->private) |
166 | | - return -ENOMEM; |
167 | | - |
168 | | - ipc4_data = sdev->private; |
169 | | - ipc4_data->manifest_fw_hdr_offset = SOF_MAN4_FW_HDR_OFFSET; |
170 | | - |
171 | | - ipc4_data->mtrace_type = SOF_IPC4_MTRACE_INTEL_CAVS_2; |
172 | | - |
173 | | - ipc4_data->fw_context_save = true; |
174 | | - |
175 | | - /* External library loading support */ |
176 | | - ipc4_data->load_library = hda_dsp_ipc4_load_library; |
177 | | - |
178 | | - /* set DAI ops */ |
179 | | - hda_set_dai_drv_ops(sdev, &sof_lnl_ops); |
180 | | - |
181 | | - sof_lnl_ops.set_power_state = hda_dsp_set_power_state_ipc4; |
182 | | - |
183 | 126 | return 0; |
184 | | -}; |
185 | | -EXPORT_SYMBOL_NS(sof_lnl_ops_init, "SND_SOC_SOF_INTEL_LNL"); |
| 127 | +} |
| 128 | +EXPORT_SYMBOL_NS(sof_lnl_set_ops, "SND_SOC_SOF_INTEL_LNL"); |
186 | 129 |
|
187 | 130 | /* Check if an SDW IRQ occurred */ |
188 | 131 | static bool lnl_dsp_check_sdw_irq(struct snd_sof_dev *sdev) |
@@ -262,3 +205,6 @@ const struct sof_intel_dsp_desc ptl_chip_info = { |
262 | 205 | .hw_ip_version = SOF_INTEL_ACE_3_0, |
263 | 206 | }; |
264 | 207 | EXPORT_SYMBOL_NS(ptl_chip_info, "SND_SOC_SOF_INTEL_LNL"); |
| 208 | + |
| 209 | +MODULE_IMPORT_NS("SND_SOC_SOF_INTEL_MTL"); |
| 210 | +MODULE_IMPORT_NS("SND_SOC_SOF_HDA_MLINK"); |
0 commit comments