diff mbox

[RESEND,alsa-lib,v2] topology: Fix parsing config with multiple hw_configs

Message ID 20180321190804.6168-1-k.marinushkin@gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Kirill Marinushkin March 21, 2018, 7:08 p.m. UTC
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(-)

Comments

Jaroslav Kysela March 21, 2018, 7:11 p.m. UTC | #1
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;
>
diff mbox

Patch

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;