Commit 4d8adccb authored by Subhransu S. Prusty's avatar Subhransu S. Prusty Committed by Mark Brown

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: default avatarSubhransu S. Prusty <subhransu.s.prusty@intel.com>
Signed-off-by: default avatarJeeja KP <jeeja.kp@intel.com>
Signed-off-by: default avatarVinod Koul <vinod.koul@intel.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent f0900eb2
...@@ -944,48 +944,60 @@ static int skl_tplg_be_set_src_pipe_params(struct snd_soc_dai *dai, ...@@ -944,48 +944,60 @@ static int skl_tplg_be_set_src_pipe_params(struct snd_soc_dai *dai,
struct skl_pipe_params *params) struct skl_pipe_params *params)
{ {
struct snd_soc_dapm_path *p; struct snd_soc_dapm_path *p;
int ret = -EIO;
snd_soc_dapm_widget_for_each_source_path(w, p) { snd_soc_dapm_widget_for_each_source_path(w, p) {
if (p->connect && is_skl_dsp_widget_type(p->source) && if (p->connect && is_skl_dsp_widget_type(p->source) &&
p->source->priv) { p->source->priv) {
if (!p->source->power) if (!p->source->power) {
return skl_tplg_be_fill_pipe_params( ret = skl_tplg_be_fill_pipe_params(
dai, p->source->priv, dai, p->source->priv,
params); params);
else if (ret < 0)
return ret;
} else {
return -EBUSY; return -EBUSY;
}
} else { } else {
return skl_tplg_be_set_src_pipe_params( ret = skl_tplg_be_set_src_pipe_params(
dai, p->source, 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, 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_widget *w, struct skl_pipe_params *params)
{ {
struct snd_soc_dapm_path *p = NULL; struct snd_soc_dapm_path *p = NULL;
int ret = -EIO;
snd_soc_dapm_widget_for_each_sink_path(w, p) { snd_soc_dapm_widget_for_each_sink_path(w, p) {
if (p->connect && is_skl_dsp_widget_type(p->sink) && if (p->connect && is_skl_dsp_widget_type(p->sink) &&
p->sink->priv) { p->sink->priv) {
if (!p->sink->power) if (!p->sink->power) {
return skl_tplg_be_fill_pipe_params( ret = skl_tplg_be_fill_pipe_params(
dai, p->sink->priv, params); dai, p->sink->priv, params);
else if (ret < 0)
return ret;
} else {
return -EBUSY; return -EBUSY;
}
} else { } else {
return skl_tplg_be_set_sink_pipe_params( ret = skl_tplg_be_set_sink_pipe_params(
dai, p->sink, params); dai, p->sink, params);
if (ret < 0)
return ret;
} }
} }
return -EIO; return ret;
} }
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment