Lines Matching refs:sdev

26 static u32 snd_sof_dsp_power_target(struct snd_sof_dev *sdev)
30 switch (sdev->system_suspend_target) {
45 if (snd_sof_stream_suspend_ignored(sdev))
60 static void sof_cache_debugfs(struct snd_sof_dev *sdev)
64 list_for_each_entry(dfse, &sdev->dfsentry_list, list) {
78 int snd_sof_boot_dsp_firmware(struct snd_sof_dev *sdev)
80 const struct sof_ipc_pm_ops *pm_ops = sof_ipc_get_ops(sdev, pm);
81 const struct sof_ipc_tplg_ops *tplg_ops = sof_ipc_get_ops(sdev, tplg);
84 guard(mutex)(&sdev->dsp_fw_boot_mutex);
86 if (sdev->fw_state == SOF_FW_BOOT_COMPLETE) {
91 dev_dbg(sdev->dev, "Booting DSP firmware\n");
93 sof_set_fw_state(sdev, SOF_FW_BOOT_PREPARE);
96 ret = snd_sof_load_firmware(sdev);
98 dev_err(sdev->dev, "%s: failed to load DSP firmware: %d\n",
100 sof_set_fw_state(sdev, SOF_FW_BOOT_FAILED);
104 sof_set_fw_state(sdev, SOF_FW_BOOT_IN_PROGRESS);
110 ret = snd_sof_run_firmware(sdev);
112 dev_err(sdev->dev, "%s: failed to boot DSP firmware: %d\n",
114 sof_set_fw_state(sdev, SOF_FW_BOOT_FAILED);
119 ret = sof_fw_trace_resume(sdev);
122 dev_warn(sdev->dev, "%s: failed to resume trace: %d\n",
128 ret = tplg_ops->set_up_all_pipelines(sdev, false);
130 dev_err(sdev->dev, "%s: failed to restore pipeline: %d\n",
137 sof_resume_clients(sdev);
141 ret = pm_ops->ctx_restore(sdev);
143 dev_err(sdev->dev, "%s: ctx_restore IPC failed: %d\n",
155 sof_cache_debugfs(sdev);
165 struct snd_sof_dev *sdev = dev_get_drvdata(dev);
166 u32 old_state = sdev->dsp_power_state.state;
171 if (!runtime_resume && !sof_ops(sdev)->resume)
174 if (runtime_resume && !sof_ops(sdev)->runtime_resume)
178 if (sdev->first_boot)
186 ret = snd_sof_dsp_runtime_resume(sdev);
188 ret = snd_sof_dsp_resume(sdev);
190 dev_err(sdev->dev,
195 if (sdev->dspless_mode_selected) {
196 sof_set_fw_state(sdev, SOF_DSPLESS_MODE);
205 if (!runtime_resume && sof_ops(sdev)->set_power_state &&
207 ret = sof_fw_trace_resume(sdev);
210 dev_warn(sdev->dev,
218 on_demand_boot = sdev->pdata->desc->on_demand_dsp_boot;
222 sof_set_fw_state(sdev, SOF_FW_BOOT_PREPARE);
226 return snd_sof_boot_dsp_firmware(sdev);
231 struct snd_sof_dev *sdev = dev_get_drvdata(dev);
232 const struct sof_ipc_pm_ops *pm_ops = sof_ipc_get_ops(sdev, pm);
233 const struct sof_ipc_tplg_ops *tplg_ops = sof_ipc_get_ops(sdev, tplg);
235 u32 target_state = snd_sof_dsp_power_target(sdev);
236 u32 old_state = sdev->dsp_power_state.state;
240 if (!runtime_suspend && !sof_ops(sdev)->suspend)
243 if (runtime_suspend && !sof_ops(sdev)->runtime_suspend)
252 tplg_ops->tear_down_all_pipelines(sdev, false);
254 if (sdev->fw_state != SOF_FW_BOOT_COMPLETE)
259 ret = snd_sof_dsp_hw_params_upon_resume(sdev);
261 dev_err(sdev->dev,
271 sof_fw_trace_suspend(sdev, pm_state);
274 sof_suspend_clients(sdev, pm_state);
283 sof_cache_debugfs(sdev);
287 ret = pm_ops->ctx_save(sdev);
293 dev_err(sdev->dev, "ctx_save IPC error during suspend: %d\n", ret);
297 dev_warn(sdev->dev, "ctx_save IPC error: %d, proceeding with suspend\n",
305 if (sdev->fw_state == SOF_FW_BOOT_NOT_STARTED)
310 ret = snd_sof_dsp_runtime_suspend(sdev);
312 ret = snd_sof_dsp_suspend(sdev, target_state);
314 dev_err(sdev->dev,
323 sof_set_fw_state(sdev, SOF_FW_BOOT_NOT_STARTED);
324 sdev->enabled_cores_mask = 0;
329 int snd_sof_dsp_power_down_notify(struct snd_sof_dev *sdev)
331 const struct sof_ipc_pm_ops *pm_ops = sof_ipc_get_ops(sdev, pm);
337 if (sdev->fw_state == SOF_FW_BOOT_COMPLETE && sof_ops(sdev)->remove &&
339 return pm_ops->ctx_save(sdev);
352 struct snd_sof_dev *sdev = dev_get_drvdata(dev);
354 return snd_sof_dsp_runtime_idle(sdev);
378 struct snd_sof_dev *sdev = dev_get_drvdata(dev);
379 const struct sof_dev_desc *desc = sdev->pdata->desc;
382 sdev->system_suspend_target = SOF_SUSPEND_S3;
388 if (sdev->fw_state == SOF_FW_CRASHED ||
389 sdev->fw_state == SOF_FW_BOOT_FAILED)
398 sdev->system_suspend_target = SOF_SUSPEND_S0IX;
403 sdev->system_suspend_target = SOF_SUSPEND_S3;
406 sdev->system_suspend_target = SOF_SUSPEND_S4;
409 sdev->system_suspend_target = SOF_SUSPEND_S5;
422 struct snd_sof_dev *sdev = dev_get_drvdata(dev);
424 sdev->system_suspend_target = SOF_SUSPEND_NONE;