ASoC: Intel: Skylake: Fix to fill all sink/source pipe params
Currently params only for first copier widget identified in the source/sink path is queried from NHLT. In the dapm route the playback/capture widget may be connected to more than one copier widget. This patch adds return check to return only for any error case. Signed-off-by: Subhransu S. Prusty <subhransu.s.prusty@intel.com> Signed-off-by: Jeeja KP <jeeja.kp@intel.com> Signed-off-by: Vinod Koul <vinod.koul@intel.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
f0900eb213
commit
4d8adccb22
1 changed files with 22 additions and 10 deletions
|
@ -944,48 +944,60 @@ static int skl_tplg_be_set_src_pipe_params(struct snd_soc_dai *dai,
|
|||
struct skl_pipe_params *params)
|
||||
{
|
||||
struct snd_soc_dapm_path *p;
|
||||
int ret = -EIO;
|
||||
|
||||
snd_soc_dapm_widget_for_each_source_path(w, p) {
|
||||
if (p->connect && is_skl_dsp_widget_type(p->source) &&
|
||||
p->source->priv) {
|
||||
|
||||
if (!p->source->power)
|
||||
return skl_tplg_be_fill_pipe_params(
|
||||
if (!p->source->power) {
|
||||
ret = skl_tplg_be_fill_pipe_params(
|
||||
dai, p->source->priv,
|
||||
params);
|
||||
else
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
} else {
|
||||
return -EBUSY;
|
||||
}
|
||||
} else {
|
||||
return skl_tplg_be_set_src_pipe_params(
|
||||
ret = skl_tplg_be_set_src_pipe_params(
|
||||
dai, p->source, params);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
return -EIO;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int skl_tplg_be_set_sink_pipe_params(struct snd_soc_dai *dai,
|
||||
struct snd_soc_dapm_widget *w, struct skl_pipe_params *params)
|
||||
{
|
||||
struct snd_soc_dapm_path *p = NULL;
|
||||
int ret = -EIO;
|
||||
|
||||
snd_soc_dapm_widget_for_each_sink_path(w, p) {
|
||||
if (p->connect && is_skl_dsp_widget_type(p->sink) &&
|
||||
p->sink->priv) {
|
||||
|
||||
if (!p->sink->power)
|
||||
return skl_tplg_be_fill_pipe_params(
|
||||
if (!p->sink->power) {
|
||||
ret = skl_tplg_be_fill_pipe_params(
|
||||
dai, p->sink->priv, params);
|
||||
else
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
} else {
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
} else {
|
||||
return skl_tplg_be_set_sink_pipe_params(
|
||||
ret = skl_tplg_be_set_sink_pipe_params(
|
||||
dai, p->sink, params);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
return -EIO;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in a new issue