summaryrefslogtreecommitdiffstats
path: root/sound/soc/sof
diff options
context:
space:
mode:
authorRanjani Sridharan <ranjani.sridharan@linux.intel.com>2022-03-07 10:10:56 -0800
committerMark Brown <broonie@kernel.org>2022-03-08 12:27:41 +0000
commit3a790f3a7c283d94325a85ac6ee4d1458e89b645 (patch)
tree37817096999f82a469307071d60f0603c22e3881 /sound/soc/sof
parent80df2226268f039326f9daebd25047cf15e22497 (diff)
downloadlinux-3a790f3a7c283d94325a85ac6ee4d1458e89b645.tar.bz2
ASoC: SOF: set swidget's core for scheduler widget
Set the swidget's core for scheduler type widgets to match that of the pipeline core. This simplifies the flow for core get/put during widget setup/free. Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com> Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com> Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Link: https://lore.kernel.org/r/20220307181111.49392-4-ranjani.sridharan@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'sound/soc/sof')
-rw-r--r--sound/soc/sof/sof-audio.c23
-rw-r--r--sound/soc/sof/topology.c1
2 files changed, 6 insertions, 18 deletions
diff --git a/sound/soc/sof/sof-audio.c b/sound/soc/sof/sof-audio.c
index ac1edb4a082d..4816473cfd7d 100644
--- a/sound/soc/sof/sof-audio.c
+++ b/sound/soc/sof/sof-audio.c
@@ -103,7 +103,7 @@ int sof_widget_free(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget)
.id = swidget->comp_id,
};
struct sof_ipc_reply reply;
- int ret, ret1, core;
+ int ret, ret1;
if (!swidget->private)
return 0;
@@ -112,14 +112,9 @@ int sof_widget_free(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget)
if (--swidget->use_count)
return 0;
- core = swidget->core;
-
switch (swidget->id) {
case snd_soc_dapm_scheduler:
{
- const struct sof_ipc_pipe_new *pipeline = swidget->private;
-
- core = pipeline->core;
ipc_free.hdr.cmd |= SOF_IPC_TPLG_PIPE_FREE;
break;
}
@@ -149,10 +144,10 @@ int sof_widget_free(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget)
* disable widget core. continue to route setup status and complete flag
* even if this fails and return the appropriate error
*/
- ret1 = snd_sof_dsp_core_put(sdev, core);
+ ret1 = snd_sof_dsp_core_put(sdev, swidget->core);
if (ret1 < 0) {
dev_err(sdev->dev, "error: failed to disable target core: %d for widget %s\n",
- core, swidget->widget->name);
+ swidget->core, swidget->widget->name);
if (!ret)
ret = ret1;
}
@@ -177,7 +172,6 @@ int sof_widget_setup(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget)
struct snd_sof_dai *dai;
size_t ipc_size;
int ret;
- int core;
/* skip if there is no private data */
if (!swidget->private)
@@ -187,15 +181,8 @@ int sof_widget_setup(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget)
if (++swidget->use_count > 1)
return 0;
- /* set core ID */
- core = swidget->core;
- if (swidget->id == snd_soc_dapm_scheduler) {
- pipeline = swidget->private;
- core = pipeline->core;
- }
-
/* enable widget core */
- ret = snd_sof_dsp_core_get(sdev, core);
+ ret = snd_sof_dsp_core_get(sdev, swidget->core);
if (ret < 0) {
dev_err(sdev->dev, "error: failed to enable target core for widget %s\n",
swidget->widget->name);
@@ -275,7 +262,7 @@ int sof_widget_setup(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget)
return 0;
core_put:
- snd_sof_dsp_core_put(sdev, core);
+ snd_sof_dsp_core_put(sdev, swidget->core);
use_count_dec:
swidget->use_count--;
return ret;
diff --git a/sound/soc/sof/topology.c b/sound/soc/sof/topology.c
index 1d119d1dd69d..add0b3009588 100644
--- a/sound/soc/sof/topology.c
+++ b/sound/soc/sof/topology.c
@@ -1707,6 +1707,7 @@ static int sof_widget_load_pipeline(struct snd_soc_component *scomp, int index,
pipeline->period_mips, pipeline->core, pipeline->frames_per_sched,
swidget->dynamic_pipeline_widget);
+ swidget->core = pipeline->core;
swidget->private = pipeline;
return 0;