This removes the need to hardcode the ELD device index in the path configuration. The hardcoded values don't work with the Intel HDMI LPE driver. BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=100488 --- src/modules/alsa/alsa-mixer.c | 31 +++++++++++++++++++--- src/modules/alsa/alsa-mixer.h | 1 + .../alsa/mixer/paths/analog-output.conf.common | 6 +++-- src/modules/alsa/mixer/paths/hdmi-output-0.conf | 2 +- src/modules/alsa/mixer/paths/hdmi-output-1.conf | 2 +- src/modules/alsa/mixer/paths/hdmi-output-2.conf | 2 +- src/modules/alsa/mixer/paths/hdmi-output-3.conf | 2 +- src/modules/alsa/mixer/paths/hdmi-output-4.conf | 2 +- src/modules/alsa/mixer/paths/hdmi-output-5.conf | 2 +- src/modules/alsa/mixer/paths/hdmi-output-6.conf | 2 +- src/modules/alsa/mixer/paths/hdmi-output-7.conf | 2 +- 11 files changed, 40 insertions(+), 14 deletions(-) diff --git a/src/modules/alsa/alsa-mixer.c b/src/modules/alsa/alsa-mixer.c index 8bd90a728..71b393e49 100644 --- a/src/modules/alsa/alsa-mixer.c +++ b/src/modules/alsa/alsa-mixer.c @@ -2032,6 +2032,28 @@ static int element_parse_enumeration(pa_config_parser_state *state) { return 0; } +static int parse_eld_device(pa_config_parser_state *state) { + pa_alsa_path *path; + uint32_t eld_device; + + path = state->userdata; + + if (pa_atou(state->rvalue, &eld_device) >= 0) { + path->autodetect_eld_device = false; + path->eld_device = eld_device; + return 0; + } + + if (pa_streq(state->rvalue, "auto")) { + path->autodetect_eld_device = true; + path->eld_device = -1; + return 0; + } + + pa_log("[%s:%u] Invalid value for option 'eld-device': %s", state->filename, state->lineno, state->rvalue); + return -1; +} + static int option_parse_priority(pa_config_parser_state *state) { pa_alsa_path *p; pa_alsa_option *o; @@ -2524,7 +2546,7 @@ pa_alsa_path* pa_alsa_path_new(const char *paths_dir, const char *fname, pa_alsa { "description-key", pa_config_parse_string, NULL, "General" }, { "description", pa_config_parse_string, NULL, "General" }, { "mute-during-activation", pa_config_parse_bool, NULL, "General" }, - { "eld-device", pa_config_parse_int, NULL, "General" }, + { "eld-device", parse_eld_device, NULL, "General" }, /* [Option ...] */ { "priority", option_parse_priority, NULL, NULL }, @@ -2563,7 +2585,6 @@ pa_alsa_path* pa_alsa_path_new(const char *paths_dir, const char *fname, pa_alsa items[1].data = &p->description_key; items[2].data = &p->description; items[3].data = &mute_during_activation; - items[4].data = &p->eld_device; if (!paths_dir) paths_dir = get_default_paths_dir(); @@ -3992,9 +4013,11 @@ static void mapping_paths_probe(pa_alsa_mapping *m, pa_alsa_profile *profile, } PA_HASHMAP_FOREACH(p, ps->paths, state) { - if (pa_alsa_path_probe(p, mixer_handle, m->profile_set->ignore_dB) < 0) { + if (p->autodetect_eld_device) + p->eld_device = m->hw_device_index; + + if (pa_alsa_path_probe(p, m, mixer_handle, m->profile_set->ignore_dB) < 0) pa_hashmap_remove(ps->paths, p); - } } path_set_condense(ps, mixer_handle); diff --git a/src/modules/alsa/alsa-mixer.h b/src/modules/alsa/alsa-mixer.h index 96678aea4..d85cc38d3 100644 --- a/src/modules/alsa/alsa-mixer.h +++ b/src/modules/alsa/alsa-mixer.h @@ -191,6 +191,7 @@ struct pa_alsa_path { char *description_key; char *description; unsigned priority; + bool autodetect_eld_device; int eld_device; pa_proplist *proplist; diff --git a/src/modules/alsa/mixer/paths/analog-output.conf.common b/src/modules/alsa/mixer/paths/analog-output.conf.common index 17b45278a..a113a2e3a 100644 --- a/src/modules/alsa/mixer/paths/analog-output.conf.common +++ b/src/modules/alsa/mixer/paths/analog-output.conf.common @@ -64,8 +64,10 @@ ; mute-during-activation = yes | no # If this path supports hardware mute, should the hw mute be used while activating this ; # path? In some cases this can reduce extra noises during port switching, while in other ; # cases this can increase such noises. Default: no. -; eld-device = ... # If this is an HDMI port, here's where to specify the device number for the ELD mixer -; # control. The default is to not make use of ELD information. +; eld-device = ... # If this is an HDMI port, here's where to specify the device index for the ELD mixer +; # control. The default is to not make use of ELD information. If the value is "auto", +; # the device index is autodetected (requires setting "query-hw-device = yes" in the +; # mapping that contains this path). ; ; [Properties] # Property list for this path. The list is merged into the port property list. ; <key> = <value> # Each property is defined on its own line. diff --git a/src/modules/alsa/mixer/paths/hdmi-output-0.conf b/src/modules/alsa/mixer/paths/hdmi-output-0.conf index 331014709..ce96a4989 100644 --- a/src/modules/alsa/mixer/paths/hdmi-output-0.conf +++ b/src/modules/alsa/mixer/paths/hdmi-output-0.conf @@ -1,7 +1,7 @@ [General] description = HDMI / DisplayPort priority = 59 -eld-device = 3 +eld-device = auto [Properties] device.icon_name = video-display diff --git a/src/modules/alsa/mixer/paths/hdmi-output-1.conf b/src/modules/alsa/mixer/paths/hdmi-output-1.conf index d81ee789c..d35f6cb93 100644 --- a/src/modules/alsa/mixer/paths/hdmi-output-1.conf +++ b/src/modules/alsa/mixer/paths/hdmi-output-1.conf @@ -1,7 +1,7 @@ [General] description = HDMI / DisplayPort 2 priority = 58 -eld-device = 7 +eld-device = auto [Properties] device.icon_name = video-display diff --git a/src/modules/alsa/mixer/paths/hdmi-output-2.conf b/src/modules/alsa/mixer/paths/hdmi-output-2.conf index 349812fc2..b54da82f4 100644 --- a/src/modules/alsa/mixer/paths/hdmi-output-2.conf +++ b/src/modules/alsa/mixer/paths/hdmi-output-2.conf @@ -1,7 +1,7 @@ [General] description = HDMI / DisplayPort 3 priority = 57 -eld-device = 8 +eld-device = auto [Properties] device.icon_name = video-display diff --git a/src/modules/alsa/mixer/paths/hdmi-output-3.conf b/src/modules/alsa/mixer/paths/hdmi-output-3.conf index 81463c946..27f786fc7 100644 --- a/src/modules/alsa/mixer/paths/hdmi-output-3.conf +++ b/src/modules/alsa/mixer/paths/hdmi-output-3.conf @@ -1,7 +1,7 @@ [General] description = HDMI / DisplayPort 4 priority = 56 -eld-device = 9 +eld-device = auto [Properties] device.icon_name = video-display diff --git a/src/modules/alsa/mixer/paths/hdmi-output-4.conf b/src/modules/alsa/mixer/paths/hdmi-output-4.conf index d61ec7547..8e7f82f40 100644 --- a/src/modules/alsa/mixer/paths/hdmi-output-4.conf +++ b/src/modules/alsa/mixer/paths/hdmi-output-4.conf @@ -1,7 +1,7 @@ [General] description = HDMI / DisplayPort 5 priority = 55 -eld-device = 10 +eld-device = auto [Properties] device.icon_name = video-display diff --git a/src/modules/alsa/mixer/paths/hdmi-output-5.conf b/src/modules/alsa/mixer/paths/hdmi-output-5.conf index 02c15e893..708e83876 100644 --- a/src/modules/alsa/mixer/paths/hdmi-output-5.conf +++ b/src/modules/alsa/mixer/paths/hdmi-output-5.conf @@ -1,7 +1,7 @@ [General] description = HDMI / DisplayPort 6 priority = 54 -eld-device = 11 +eld-device = auto [Properties] device.icon_name = video-display diff --git a/src/modules/alsa/mixer/paths/hdmi-output-6.conf b/src/modules/alsa/mixer/paths/hdmi-output-6.conf index 188a1adb3..340d5e495 100644 --- a/src/modules/alsa/mixer/paths/hdmi-output-6.conf +++ b/src/modules/alsa/mixer/paths/hdmi-output-6.conf @@ -1,7 +1,7 @@ [General] description = HDMI / DisplayPort 7 priority = 53 -eld-device = 12 +eld-device = auto [Properties] device.icon_name = video-display diff --git a/src/modules/alsa/mixer/paths/hdmi-output-7.conf b/src/modules/alsa/mixer/paths/hdmi-output-7.conf index 80f4e3722..9946eda2c 100644 --- a/src/modules/alsa/mixer/paths/hdmi-output-7.conf +++ b/src/modules/alsa/mixer/paths/hdmi-output-7.conf @@ -1,7 +1,7 @@ [General] description = HDMI / DisplayPort 8 priority = 52 -eld-device = 13 +eld-device = auto [Properties] device.icon_name = video-display -- 2.11.0