[pulseaudio-discuss] [PATCH 2/3] alsa-mixer: implement ELD device autodetection
Tanu Kaskinen
tanuk at iki.fi
Mon Jun 12 15:45:15 UTC 2017
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
More information about the pulseaudio-discuss
mailing list