summaryrefslogtreecommitdiffstats
path: root/sound
diff options
context:
space:
mode:
authorSubhransu S. Prusty <subhransu.s.prusty@intel.com>2015-10-22 19:52:37 +0200
committerMark Brown <broonie@kernel.org>2015-10-23 18:31:34 +0200
commit4d8adccb220ca270cfcdd80752618095fdc9990c (patch)
treee803369730c6c57d16d918133017a7c0b55260ef /sound
parentASoC: Intel: Skylake: Fix to use correct macros for the path iteration (diff)
downloadlinux-4d8adccb220ca270cfcdd80752618095fdc9990c.tar.xz
linux-4d8adccb220ca270cfcdd80752618095fdc9990c.zip
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>
Diffstat (limited to 'sound')
-rw-r--r--sound/soc/intel/skylake/skl-topology.c32
1 files changed, 22 insertions, 10 deletions
diff --git a/sound/soc/intel/skylake/skl-topology.c b/sound/soc/intel/skylake/skl-topology.c
index 0fba39dcb2ab..68e1b00ce7ed 100644
--- a/sound/soc/intel/skylake/skl-topology.c
+++ b/sound/soc/intel/skylake/skl-topology.c
@@ -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;
}
/*