From 27c7927842a691ef13724cd16fb26264680c6aa2 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Sat, 29 Feb 2020 10:30:37 +0100 Subject: [PATCH 01/14] conf: change the order of PCM devices in alsa.conf Appearently, some applications use the first device for probe or so. Fixes: https://github.com/alsa-project/alsa-lib/issues/27 Signed-off-by: Jaroslav Kysela --- src/conf/alsa.conf | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/src/conf/alsa.conf b/src/conf/alsa.conf index 09980586..a091b810 100644 --- a/src/conf/alsa.conf +++ b/src/conf/alsa.conf @@ -119,29 +119,6 @@ defaults.timer.subdevice 0 # PCM interface # -# redirect to load-on-demand extended pcm definitions -pcm.cards cards.pcm - -pcm.default cards.pcm.default -pcm.sysdefault cards.pcm.default -pcm.front cards.pcm.front -pcm.rear cards.pcm.rear -pcm.center_lfe cards.pcm.center_lfe -pcm.side cards.pcm.side -pcm.surround21 cards.pcm.surround21 -pcm.surround40 cards.pcm.surround40 -pcm.surround41 cards.pcm.surround41 -pcm.surround50 cards.pcm.surround50 -pcm.surround51 cards.pcm.surround51 -pcm.surround71 cards.pcm.surround71 -pcm.iec958 cards.pcm.iec958 -pcm.spdif iec958 -pcm.hdmi cards.pcm.hdmi -pcm.dmix cards.pcm.dmix -pcm.dsnoop cards.pcm.dsnoop -pcm.modem cards.pcm.modem -pcm.phoneline cards.pcm.phoneline - pcm.hw { @args [ CARD DEV SUBDEV ] @args.CARD { @@ -323,6 +300,29 @@ pcm.null { } } +# redirect to load-on-demand extended pcm definitions +pcm.cards cards.pcm + +pcm.default cards.pcm.default +pcm.sysdefault cards.pcm.default +pcm.front cards.pcm.front +pcm.rear cards.pcm.rear +pcm.center_lfe cards.pcm.center_lfe +pcm.side cards.pcm.side +pcm.surround21 cards.pcm.surround21 +pcm.surround40 cards.pcm.surround40 +pcm.surround41 cards.pcm.surround41 +pcm.surround50 cards.pcm.surround50 +pcm.surround51 cards.pcm.surround51 +pcm.surround71 cards.pcm.surround71 +pcm.iec958 cards.pcm.iec958 +pcm.spdif iec958 +pcm.hdmi cards.pcm.hdmi +pcm.dmix cards.pcm.dmix +pcm.dsnoop cards.pcm.dsnoop +pcm.modem cards.pcm.modem +pcm.phoneline cards.pcm.phoneline + # # Control interface # -- 2.25.1 From 09e78da4cade7b8fecb8f36717b85c456f2e5487 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Sun, 1 Mar 2020 19:57:06 +0100 Subject: [PATCH 02/14] conf: namehint - add omit_noargs to the hint section Do not list simple surround devices in the namehint function by default. Fixes: https://github.com/alsa-project/alsa-lib/issues/27 Signed-off-by: Jaroslav Kysela --- src/conf/pcm/surround21.conf | 1 + src/conf/pcm/surround40.conf | 1 + src/conf/pcm/surround41.conf | 1 + src/conf/pcm/surround50.conf | 1 + src/conf/pcm/surround51.conf | 1 + src/conf/pcm/surround71.conf | 1 + src/control/namehint.c | 6 +++++- 7 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/conf/pcm/surround21.conf b/src/conf/pcm/surround21.conf index 1cf1b7af..ad19507b 100644 --- a/src/conf/pcm/surround21.conf +++ b/src/conf/pcm/surround21.conf @@ -57,5 +57,6 @@ pcm.!surround21 { hint { description "2.1 Surround output to Front and Subwoofer speakers" device_output $DEV + omit_noargs true } } diff --git a/src/conf/pcm/surround40.conf b/src/conf/pcm/surround40.conf index 9788ad48..7c615022 100644 --- a/src/conf/pcm/surround40.conf +++ b/src/conf/pcm/surround40.conf @@ -55,5 +55,6 @@ pcm.!surround40 { hint { description "4.0 Surround output to Front and Rear speakers" device_output $DEV + omit_noargs true } } diff --git a/src/conf/pcm/surround41.conf b/src/conf/pcm/surround41.conf index 7b4ef3be..cb6c0445 100644 --- a/src/conf/pcm/surround41.conf +++ b/src/conf/pcm/surround41.conf @@ -61,5 +61,6 @@ pcm.!surround41 { hint { description "4.1 Surround output to Front, Rear and Subwoofer speakers" device_output $DEV + omit_noargs true } } diff --git a/src/conf/pcm/surround50.conf b/src/conf/pcm/surround50.conf index 7d9a9e79..70d54069 100644 --- a/src/conf/pcm/surround50.conf +++ b/src/conf/pcm/surround50.conf @@ -61,5 +61,6 @@ pcm.!surround50 { hint { description "5.0 Surround output to Front, Center and Rear speakers" device_output $DEV + omit_noargs true } } diff --git a/src/conf/pcm/surround51.conf b/src/conf/pcm/surround51.conf index e67f007e..d0236e42 100644 --- a/src/conf/pcm/surround51.conf +++ b/src/conf/pcm/surround51.conf @@ -57,5 +57,6 @@ pcm.!surround51 { hint { description "5.1 Surround output to Front, Center, Rear and Subwoofer speakers" device_output $DEV + omit_noargs true } } diff --git a/src/conf/pcm/surround71.conf b/src/conf/pcm/surround71.conf index a26c3f36..66792dde 100644 --- a/src/conf/pcm/surround71.conf +++ b/src/conf/pcm/surround71.conf @@ -59,5 +59,6 @@ pcm.!surround71 { hint { description "7.1 Surround output to Front, Center, Side, Rear and Woofer speakers" device_output $DEV + omit_noargs true } } diff --git a/src/control/namehint.c b/src/control/namehint.c index 60c48ae3..169bd421 100644 --- a/src/control/namehint.c +++ b/src/control/namehint.c @@ -287,10 +287,14 @@ static int try_config(snd_config_t *config, err = -EINVAL; goto __cleanup; } + if (list->card < 0 && + snd_config_search(cfg, "omit_noargs", &n) >= 0 && + snd_config_get_bool(n) > 0) + goto __skip_add; if (level == 1 && snd_config_search(cfg, "show", &n) >= 0 && snd_config_get_bool(n) <= 0) - goto __skip_add; + goto __skip_add; if (buf1 == NULL && snd_config_search(cfg, "description", &n) >= 0 && snd_config_get_string(n, &str) >= 0) { -- 2.25.1 From c7efaef195b92e30efb3049a1c03fa1b50310477 Mon Sep 17 00:00:00 2001 From: be-marc Date: Tue, 3 Mar 2020 11:01:09 +0100 Subject: [PATCH 03/14] Change PCM device number of Asus Xonar U5 Signed-off-by: Jaroslav Kysela --- src/conf/cards/USB-Audio.conf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/conf/cards/USB-Audio.conf b/src/conf/cards/USB-Audio.conf index 1c677937..dd99c44d 100644 --- a/src/conf/cards/USB-Audio.conf +++ b/src/conf/cards/USB-Audio.conf @@ -39,7 +39,8 @@ USB-Audio.pcm.iec958_device { # "NoiseBlaster 3000" 42 "USB Sound Blaster HD" 1 "Xonar U7" 1 - + "ASUS XONAR U5" 1 + # The below don't have digital in/out, so prevent them from being opened. "Andrea PureAudio USB-SA Headset" 999 "Blue Snowball" 999 -- 2.25.1 From 1654f38a29e635ce69a30c6c95ec1ca773ecee37 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Wed, 4 Mar 2020 11:27:12 +0100 Subject: [PATCH 04/14] configure: add --embed for python3-config (python 3.8) Fixes: https://github.com/alsa-project/alsa-lib/issues/33 Signed-off-by: Jaroslav Kysela --- configure.ac | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 0f9fb016..4b5ab662 100644 --- a/configure.ac +++ b/configure.ac @@ -423,7 +423,10 @@ if test "$build_python" = "yes" -a "$build_mixer_pymodules" = "yes"; then pythonlibs0= pythoninc0= if test "$build_python2" != "yes"; then - pythonlibs0=$(python3-config --libs) + pythonlibs0=$(python3-config --libs --embed 2> /dev/null) + if test -z "$pythonlibs0"; then + pythonlibs0=$(python3-config --libs) + fi pythoninc0=$(python3-config --includes) fi if test -z "$pythonlibs0"; then -- 2.25.1 From 9ed3c65e1569a0ebbec9af1d04d739db9921e775 Mon Sep 17 00:00:00 2001 From: Tanu Kaskinen Date: Fri, 13 Mar 2020 09:39:17 +0200 Subject: [PATCH 05/14] conf: USB-Audio: Add C-Media USB Headphone Set to the IEC958 blacklist Fixes: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/issues/317 Signed-off-by: Tanu Kaskinen Signed-off-by: Jaroslav Kysela --- src/conf/cards/USB-Audio.conf | 1 + 1 file changed, 1 insertion(+) diff --git a/src/conf/cards/USB-Audio.conf b/src/conf/cards/USB-Audio.conf index dd99c44d..89811086 100644 --- a/src/conf/cards/USB-Audio.conf +++ b/src/conf/cards/USB-Audio.conf @@ -44,6 +44,7 @@ USB-Audio.pcm.iec958_device { # The below don't have digital in/out, so prevent them from being opened. "Andrea PureAudio USB-SA Headset" 999 "Blue Snowball" 999 + "C-Media USB Headphone Set" 999 "HP Digital Stereo Headset" 999 "GN 9330" 999 "Logitech Speaker Lapdesk N700" 999 -- 2.25.1 From caf77a93cef5bda729bc33e0100cc0e769767389 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Fri, 13 Mar 2020 17:05:14 +0100 Subject: [PATCH 06/14] topology: add back asrc to widget_map in dapm.c Fixes: aa1bac2d04bd ("topology: add snd_tplg_save()") BugLink: https://github.com/thesofproject/sof/issues/2543 Signed-off-by: Jaroslav Kysela --- src/topology/dapm.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/topology/dapm.c b/src/topology/dapm.c index cb85e667..70645126 100644 --- a/src/topology/dapm.c +++ b/src/topology/dapm.c @@ -43,6 +43,7 @@ static const struct map_elem widget_map[] = { {"effect", SND_SOC_TPLG_DAPM_EFFECT}, {"siggen", SND_SOC_TPLG_DAPM_SIGGEN}, {"src", SND_SOC_TPLG_DAPM_SRC}, + {"asrc", SND_SOC_TPLG_DAPM_ASRC}, {"encoder", SND_SOC_TPLG_DAPM_ENCODER}, {"decoder", SND_SOC_TPLG_DAPM_DECODER}, }; -- 2.25.1 From 79102bf264f8651692fe9435a4d1bb06aa022d55 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Tue, 17 Mar 2020 10:21:10 +0100 Subject: [PATCH 07/14] ucm: clarify the index syntax for the device names Signed-off-by: Jaroslav Kysela --- include/use-case.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/include/use-case.h b/include/use-case.h index 134303af..27cb3fe1 100644 --- a/include/use-case.h +++ b/include/use-case.h @@ -117,7 +117,10 @@ extern "C" { * * If multiple devices with the same name exists, the number suffixes should * be added to these names like HDMI1,HDMI2,HDMI3 etc. No number gaps are - * allowed. The names with numbers must be continuous. + * allowed. The names with numbers must be continuous. It is allowed to put + * a whitespace between name and index (like 'Line 1') for the better + * readability. The device names 'Line 1' and 'Line1' are equal for + * thus purpose. * * If EnableSequence/DisableSequence controls independent paths in the hardware * it is also recommended to split playback and capture UCM devices and use -- 2.25.1 From 6137d263f3805c72781ea74b813b0e3754f5fc34 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Tue, 17 Mar 2020 16:20:52 +0100 Subject: [PATCH 08/14] ucm: fix uc_mgr_scan_master_configs() Skip the lookup, if the top level filename does not exist. Fixes: https://github.com/alsa-project/alsa-ucm-conf/issues/16 Signed-off-by: Jaroslav Kysela --- src/ucm/parser.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/ucm/parser.c b/src/ucm/parser.c index 8d6eea31..0001e595 100644 --- a/src/ucm/parser.c +++ b/src/ucm/parser.c @@ -1969,6 +1969,9 @@ int uc_mgr_scan_master_configs(const char **_list[]) configuration_filename2(filename, sizeof(filename), 2, d_name, d_name, ".conf"); + if (eaccess(filename, R_OK)) + continue; + err = uc_mgr_config_load(2, filename, &cfg); if (err < 0) goto __err; -- 2.25.1 From d434638a683c01bd6decf8f41863044055237a50 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Fri, 27 Mar 2020 11:59:53 +0100 Subject: [PATCH 09/14] namehint: remember the direction from the upper levels The current code resets the direction info for each level. Simply remove this code. Fixes: https://github.com/alsa-project/alsa-lib/issues/39 Signed-off-by: Jaroslav Kysela --- src/control/namehint.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/control/namehint.c b/src/control/namehint.c index 169bd421..ecd470f3 100644 --- a/src/control/namehint.c +++ b/src/control/namehint.c @@ -270,8 +270,6 @@ static int try_config(snd_config_t *config, if (snd_config_search(cfg1, "type", &cfg) >= 0 && snd_config_get_string(cfg, &str) >= 0 && strcmp(str, "hw") == 0) { - list->device_input = -1; - list->device_output = -1; if (snd_config_search(cfg1, "device", &cfg) >= 0) { if (snd_config_get_integer(cfg, &dev) < 0) { SNDERR("(%s) device must be an integer", buf); -- 2.25.1 From bca39e99d0c2a270a71dad640983fb739dac8bdd Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Fri, 27 Mar 2020 18:14:02 +0100 Subject: [PATCH 10/14] conf: fix namehint for pcm.front and pcm.iec958 As suggested in: Fixes: https://github.com/alsa-project/alsa-lib/issues/39 Signed-off-by: Jaroslav Kysela --- src/conf/pcm/front.conf | 3 ++- src/conf/pcm/iec958.conf | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/conf/pcm/front.conf b/src/conf/pcm/front.conf index 7aff0cbf..0edf6a69 100644 --- a/src/conf/pcm/front.conf +++ b/src/conf/pcm/front.conf @@ -53,6 +53,7 @@ pcm.!front { name defaults.namehint.basic } description "Front speakers" - device $DEV + device_output $DEV + omit_noargs true } } diff --git a/src/conf/pcm/iec958.conf b/src/conf/pcm/iec958.conf index ac139b5e..2b084d6f 100644 --- a/src/conf/pcm/iec958.conf +++ b/src/conf/pcm/iec958.conf @@ -78,6 +78,6 @@ pcm.!iec958 { name defaults.namehint.basic } description "IEC958 (S/PDIF) Digital Audio Output" - device $DEV + device_output $DEV } } -- 2.25.1 From 3b46b03f099da2f39c205a25b3cc62ec688fe6b3 Mon Sep 17 00:00:00 2001 From: Jonas Holmberg Date: Tue, 31 Mar 2020 17:09:25 +0200 Subject: [PATCH 11/14] pcm: add chmap option to route plugin Add a config definition "chmap" to override the channel maps in the same way as in the hw and null plugins. Signed-off-by: Jonas Holmberg Signed-off-by: Takashi Iwai --- src/pcm/pcm_route.c | 57 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 47 insertions(+), 10 deletions(-) diff --git a/src/pcm/pcm_route.c b/src/pcm/pcm_route.c index bbcc6118..d3e5f3ff 100644 --- a/src/pcm/pcm_route.c +++ b/src/pcm/pcm_route.c @@ -104,6 +104,7 @@ typedef struct { int schannels; snd_pcm_route_params_t params; snd_pcm_chmap_t *chmap; + snd_pcm_chmap_query_t **chmap_override; } snd_pcm_route_t; #endif /* DOC_HIDDEN */ @@ -441,6 +442,7 @@ static int snd_pcm_route_close(snd_pcm_t *pcm) free(params->dsts); } free(route->chmap); + snd_pcm_free_chmaps(route->chmap_override); return snd_pcm_generic_close(pcm); } @@ -634,6 +636,9 @@ static snd_pcm_chmap_t *snd_pcm_route_get_chmap(snd_pcm_t *pcm) snd_pcm_chmap_t *map, *slave_map; unsigned int src, dst, nsrcs; + if (route->chmap_override) + return _snd_pcm_choose_fixed_chmap(pcm, route->chmap_override); + slave_map = snd_pcm_generic_get_chmap(pcm); if (!slave_map) return NULL; @@ -660,8 +665,14 @@ static snd_pcm_chmap_t *snd_pcm_route_get_chmap(snd_pcm_t *pcm) static snd_pcm_chmap_query_t **snd_pcm_route_query_chmaps(snd_pcm_t *pcm) { + snd_pcm_route_t *route = pcm->private_data; snd_pcm_chmap_query_t **maps; - snd_pcm_chmap_t *map = snd_pcm_route_get_chmap(pcm); + snd_pcm_chmap_t *map; + + if (route->chmap_override) + return _snd_pcm_copy_chmap_query(route->chmap_override); + + map = snd_pcm_route_get_chmap(pcm); if (!map) return NULL; maps = _snd_pcm_make_single_query_chmaps(map); @@ -818,10 +829,10 @@ err: return -EINVAL; } -static int find_matching_chmap(snd_pcm_t *spcm, snd_pcm_chmap_t *tt_chmap, +static int find_matching_chmap(snd_pcm_chmap_query_t **chmaps, + snd_pcm_chmap_t *tt_chmap, snd_pcm_chmap_t **found_chmap, int *schannels) { - snd_pcm_chmap_query_t** chmaps = snd_pcm_query_chmaps(spcm); int i; *found_chmap = NULL; @@ -854,7 +865,6 @@ static int find_matching_chmap(snd_pcm_t *spcm, snd_pcm_chmap_t *tt_chmap, int size = sizeof(snd_pcm_chmap_t) + c->channels * sizeof(unsigned int); *found_chmap = malloc(size); if (!*found_chmap) { - snd_pcm_free_chmaps(chmaps); return -ENOMEM; } memcpy(*found_chmap, c, size); @@ -863,8 +873,6 @@ static int find_matching_chmap(snd_pcm_t *spcm, snd_pcm_chmap_t *tt_chmap, } } - snd_pcm_free_chmaps(chmaps); - if (*found_chmap == NULL) { SNDERR("Found no matching channel map"); return -EINVAL; @@ -1252,6 +1260,7 @@ pcm.name { SCHANNEL REAL # route value (0.0 - 1.0) } } + [chmap MAP] # Override channel maps; MAP is a string array } \endcode @@ -1292,6 +1301,7 @@ int _snd_pcm_route_open(snd_pcm_t **pcmp, const char *name, snd_pcm_route_ttable_entry_t *ttable = NULL; unsigned int csize, ssize; unsigned int cused, sused; + snd_pcm_chmap_query_t **chmaps = NULL; snd_config_for_each(i, next, conf) { snd_config_t *n = snd_config_iterator_entry(i); const char *id; @@ -1306,31 +1316,45 @@ int _snd_pcm_route_open(snd_pcm_t **pcmp, const char *name, if (strcmp(id, "ttable") == 0) { if (snd_config_get_type(n) != SND_CONFIG_TYPE_COMPOUND) { SNDERR("Invalid type for %s", id); + snd_pcm_free_chmaps(chmaps); return -EINVAL; } tt = n; continue; } + if (strcmp(id, "chmap") == 0) { + chmaps = _snd_pcm_parse_config_chmaps(n); + if (!chmaps) { + SNDERR("Invalid channel map for %s", id); + return -EINVAL; + } + continue; + } SNDERR("Unknown field %s", id); return -EINVAL; } if (!slave) { SNDERR("slave is not defined"); + snd_pcm_free_chmaps(chmaps); return -EINVAL; } if (!tt) { SNDERR("ttable is not defined"); + snd_pcm_free_chmaps(chmaps); return -EINVAL; } err = snd_pcm_slave_conf(root, slave, &sconf, 2, SND_PCM_HW_PARAM_FORMAT, 0, &sformat, SND_PCM_HW_PARAM_CHANNELS, 0, &schannels); - if (err < 0) + if (err < 0) { + snd_pcm_free_chmaps(chmaps); return err; + } if (sformat != SND_PCM_FORMAT_UNKNOWN && snd_pcm_format_linear(sformat) != 1) { snd_config_delete(sconf); SNDERR("slave format is not linear"); + snd_pcm_free_chmaps(chmaps); return -EINVAL; } @@ -1345,13 +1369,19 @@ int _snd_pcm_route_open(snd_pcm_t **pcmp, const char *name, if (err < 0) { free(tt_chmap); free(ttable); + snd_pcm_free_chmaps(chmaps); return err; } if (tt_chmap) { - err = find_matching_chmap(spcm, tt_chmap, &chmap, &schannels); + if (!chmaps) + chmaps = snd_pcm_query_chmaps(spcm); + if (chmaps) + err = find_matching_chmap(chmaps, tt_chmap, &chmap, + &schannels); free(tt_chmap); - if (err < 0) { + if (chmaps && err < 0) { + snd_pcm_free_chmaps(chmaps); snd_pcm_close(spcm); return err; } @@ -1360,12 +1390,14 @@ int _snd_pcm_route_open(snd_pcm_t **pcmp, const char *name, err = _snd_pcm_route_determine_ttable(tt, &csize, &ssize, chmap); if (err < 0) { free(chmap); + snd_pcm_free_chmaps(chmaps); snd_pcm_close(spcm); return err; } ttable = malloc(csize * ssize * sizeof(snd_pcm_route_ttable_entry_t)); if (ttable == NULL) { free(chmap); + snd_pcm_free_chmaps(chmaps); snd_pcm_close(spcm); return -ENOMEM; } @@ -1374,6 +1406,7 @@ int _snd_pcm_route_open(snd_pcm_t **pcmp, const char *name, if (err < 0) { free(chmap); free(ttable); + snd_pcm_free_chmaps(chmaps); snd_pcm_close(spcm); return err; } @@ -1385,9 +1418,13 @@ int _snd_pcm_route_open(snd_pcm_t **pcmp, const char *name, free(ttable); if (err < 0) { free(chmap); + snd_pcm_free_chmaps(chmaps); snd_pcm_close(spcm); } else { - ((snd_pcm_route_t*) (*pcmp)->private_data)->chmap = chmap; + snd_pcm_route_t *route = (*pcmp)->private_data; + + route->chmap = chmap; + route->chmap_override = chmaps; } return err; -- 2.25.1 From 341326c21ededb8c768c43ec2c9c7a80e7a26d35 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Fri, 3 Apr 2020 18:00:43 +0200 Subject: [PATCH 12/14] usecase: allow indexes also for modifier names Signed-off-by: Jaroslav Kysela --- include/use-case.h | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/include/use-case.h b/include/use-case.h index 27cb3fe1..c2ba79a9 100644 --- a/include/use-case.h +++ b/include/use-case.h @@ -120,7 +120,7 @@ extern "C" { * allowed. The names with numbers must be continuous. It is allowed to put * a whitespace between name and index (like 'Line 1') for the better * readability. The device names 'Line 1' and 'Line1' are equal for - * thus purpose. + * this purpose. * * If EnableSequence/DisableSequence controls independent paths in the hardware * it is also recommended to split playback and capture UCM devices and use @@ -149,6 +149,13 @@ extern "C" { * The use case modifier allows runtime configuration changes to deal with * asynchronous events. * + * If multiple modifiers with the same name exists, the number suffixes should + * be added to these names like 'Echo Reference 1','Echo Reference 2' etc. + * No number gaps are allowed. The names with numbers must be continuous. + * It is allowed to put a whitespace between name and index for the better + * readability. The modifier names 'Something 1' and 'Something1' are equal + * for this purpose. + * * e.g. to record a voice call :- * 1. Set verb to SND_USE_CASE_VERB_VOICECALL (for voice call) * 2. Set modifier SND_USE_CASE_MOD_CAPTURE_VOICE when capture required. -- 2.25.1 From c9605484d165d2b707f78eef14a224b0b47ba322 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Mon, 6 Apr 2020 13:25:43 +0200 Subject: [PATCH 13/14] ucm: fix the device remove operation - allow to remove device only from conflicting lists - unify the error codes when the device is not found (ENODEV) Signed-off-by: Jaroslav Kysela --- src/ucm/utils.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/ucm/utils.c b/src/ucm/utils.c index 50b2a1df..d78ba91c 100644 --- a/src/ucm/utils.c +++ b/src/ucm/utils.c @@ -371,7 +371,7 @@ int uc_mgr_rename_in_dev_list(struct dev_list *dev_list, const char *src, return 0; } } - return -ENOENT; + return -ENODEV; } int uc_mgr_remove_from_dev_list(struct dev_list *dev_list, const char *name) @@ -528,17 +528,22 @@ int uc_mgr_remove_device(struct use_case_verb *verb, const char *name) { struct use_case_device *device; struct list_head *pos, *npos; + int err, found = 0; list_for_each_safe(pos, npos, &verb->device_list) { device = list_entry(pos, struct use_case_device, list); if (strcmp(device->name, name) == 0) { uc_mgr_free_device(device); + found++; continue; } - uc_mgr_remove_from_dev_list(&device->dev_list, name); - return 0; + err = uc_mgr_remove_from_dev_list(&device->dev_list, name); + if (err < 0 && err != -ENODEV) + return err; + if (err == 0) + found++; } - return -ENOENT; + return found == 0 ? -ENODEV : 0; } void uc_mgr_free_verb(snd_use_case_mgr_t *uc_mgr) -- 2.25.1 From fb48ad9e4f6b84fd4ade689bd79e3a3c37d3e034 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Mon, 6 Apr 2020 17:20:24 +0200 Subject: [PATCH 14/14] ucm: fix copy-n-paste typo (RemoveDevice list) Signed-off-by: Jaroslav Kysela --- src/ucm/parser.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ucm/parser.c b/src/ucm/parser.c index 0001e595..aca5ea8c 100644 --- a/src/ucm/parser.c +++ b/src/ucm/parser.c @@ -1176,7 +1176,7 @@ static int verb_device_management(struct use_case_verb *verb) } /* remove devices */ - list_for_each(pos, &verb->rename_list) { + list_for_each(pos, &verb->remove_list) { dev = list_entry(pos, struct ucm_dev_name, list); err = uc_mgr_remove_device(verb, dev->name2); if (err < 0) { -- 2.25.1