aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSubhransu S. Prusty <subhransu.s.prusty@intel.com>2015-10-22 13:52:37 -0400
committerMark Brown <broonie@kernel.org>2015-10-23 12:31:34 -0400
commit4d8adccb220ca270cfcdd80752618095fdc9990c (patch)
treee803369730c6c57d16d918133017a7c0b55260ef
parentf0900eb213e0f6f37e1567531f9604b9bed6771d (diff)
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>
-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,
944 struct skl_pipe_params *params) 944 struct skl_pipe_params *params)
945{ 945{
946 struct snd_soc_dapm_path *p; 946 struct snd_soc_dapm_path *p;
947 int ret = -EIO;
947 948
948 snd_soc_dapm_widget_for_each_source_path(w, p) { 949 snd_soc_dapm_widget_for_each_source_path(w, p) {
949 if (p->connect && is_skl_dsp_widget_type(p->source) && 950 if (p->connect && is_skl_dsp_widget_type(p->source) &&
950 p->source->priv) { 951 p->source->priv) {
951 952
952 if (!p->source->power) 953 if (!p->source->power) {
953 return skl_tplg_be_fill_pipe_params( 954 ret = skl_tplg_be_fill_pipe_params(
954 dai, p->source->priv, 955 dai, p->source->priv,
955 params); 956 params);
956 else 957 if (ret < 0)
958 return ret;
959 } else {
957 return -EBUSY; 960 return -EBUSY;
961 }
958 } else { 962 } else {
959 return skl_tplg_be_set_src_pipe_params( 963 ret = skl_tplg_be_set_src_pipe_params(
960 dai, p->source, params); 964 dai, p->source, params);
965 if (ret < 0)
966 return ret;
961 } 967 }
962 } 968 }
963 969
964 return -EIO; 970 return ret;
965} 971}
966 972
967static int skl_tplg_be_set_sink_pipe_params(struct snd_soc_dai *dai, 973static int skl_tplg_be_set_sink_pipe_params(struct snd_soc_dai *dai,
968 struct snd_soc_dapm_widget *w, struct skl_pipe_params *params) 974 struct snd_soc_dapm_widget *w, struct skl_pipe_params *params)
969{ 975{
970 struct snd_soc_dapm_path *p = NULL; 976 struct snd_soc_dapm_path *p = NULL;
977 int ret = -EIO;
971 978
972 snd_soc_dapm_widget_for_each_sink_path(w, p) { 979 snd_soc_dapm_widget_for_each_sink_path(w, p) {
973 if (p->connect && is_skl_dsp_widget_type(p->sink) && 980 if (p->connect && is_skl_dsp_widget_type(p->sink) &&
974 p->sink->priv) { 981 p->sink->priv) {
975 982
976 if (!p->sink->power) 983 if (!p->sink->power) {
977 return skl_tplg_be_fill_pipe_params( 984 ret = skl_tplg_be_fill_pipe_params(
978 dai, p->sink->priv, params); 985 dai, p->sink->priv, params);
979 else 986 if (ret < 0)
987 return ret;
988 } else {
980 return -EBUSY; 989 return -EBUSY;
990 }
981 991
982 } else { 992 } else {
983 return skl_tplg_be_set_sink_pipe_params( 993 ret = skl_tplg_be_set_sink_pipe_params(
984 dai, p->sink, params); 994 dai, p->sink, params);
995 if (ret < 0)
996 return ret;
985 } 997 }
986 } 998 }
987 999
988 return -EIO; 1000 return ret;
989} 1001}
990 1002
991/* 1003/*