[alsa-devel] [PATCH RESEND, alsa-lib, v2] topology: Fix parsing config with multiple hw_configs
Currently, if the config file includes several hw_configs sections, parse_hw_config_refs() returns after parsing only the first section.
For example, the following config, based on alsa-lib/src/conf/topology/broadwell/broadwell.conf, is parsed incorrectly:
~~~~ SectionHWConfig."CodecHWConfig" { id "1" format "I2S" # physical audio format. bclk "master" # Platform is master of bit clock fsync "master" # platform is master of fsync }
SectionHWConfig."CodecHWConfig2" { id "2" format "AC97" }
SectionLink."Codec" {
# used for binding to the physical link id "0"
hw_configs [ "CodecHWConfig" "CodecHWConfig2" ]
default_hw_conf_id "2" } ~~~~
Signed-off-by: Kirill Marinushkin k.marinushkin@gmail.com Cc: Jaroslav Kysela perex@perex.cz Cc: Takashi Iwai tiwai@suse.com Cc: alsa-devel@alsa-project.org --- src/topology/pcm.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/src/topology/pcm.c b/src/topology/pcm.c index 58cee31d..d3836677 100644 --- a/src/topology/pcm.c +++ b/src/topology/pcm.c @@ -882,6 +882,7 @@ static int parse_hw_config_refs(snd_tplg_t *tplg, snd_config_t *cfg, /* refer to a list of HW configs */ snd_config_for_each(i, next, cfg) { const char *val; + int err;
n = snd_config_iterator_entry(i); if (snd_config_get_string(n, &val) < 0) @@ -893,7 +894,9 @@ static int parse_hw_config_refs(snd_tplg_t *tplg, snd_config_t *cfg, }
link->num_hw_configs++; - return tplg_ref_add(elem, SND_TPLG_TYPE_HW_CONFIG, val); + err = tplg_ref_add(elem, SND_TPLG_TYPE_HW_CONFIG, val); + if (err < 0) + return err; }
return 0;
Dne 21.3.2018 v 20:08 Kirill Marinushkin napsal(a):
Currently, if the config file includes several hw_configs sections, parse_hw_config_refs() returns after parsing only the first section.
Applied. Thanks.
Jaroslav
For example, the following config, based on alsa-lib/src/conf/topology/broadwell/broadwell.conf, is parsed incorrectly:
SectionHWConfig."CodecHWConfig" { id "1" format "I2S" # physical audio format. bclk "master" # Platform is master of bit clock fsync "master" # platform is master of fsync } SectionHWConfig."CodecHWConfig2" { id "2" format "AC97" } SectionLink."Codec" { # used for binding to the physical link id "0" hw_configs [ "CodecHWConfig" "CodecHWConfig2" ] default_hw_conf_id "2" }
Signed-off-by: Kirill Marinushkin k.marinushkin@gmail.com Cc: Jaroslav Kysela perex@perex.cz Cc: Takashi Iwai tiwai@suse.com Cc: alsa-devel@alsa-project.org
src/topology/pcm.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/src/topology/pcm.c b/src/topology/pcm.c index 58cee31d..d3836677 100644 --- a/src/topology/pcm.c +++ b/src/topology/pcm.c @@ -882,6 +882,7 @@ static int parse_hw_config_refs(snd_tplg_t *tplg, snd_config_t *cfg, /* refer to a list of HW configs */ snd_config_for_each(i, next, cfg) { const char *val;
int err;
n = snd_config_iterator_entry(i); if (snd_config_get_string(n, &val) < 0)
@@ -893,7 +894,9 @@ static int parse_hw_config_refs(snd_tplg_t *tplg, snd_config_t *cfg, }
link->num_hw_configs++;
return tplg_ref_add(elem, SND_TPLG_TYPE_HW_CONFIG, val);
err = tplg_ref_add(elem, SND_TPLG_TYPE_HW_CONFIG, val);
if (err < 0)
return err;
}
return 0;
participants (2)
-
Jaroslav Kysela
-
Kirill Marinushkin