diff options
Diffstat (limited to 'meta/recipes-multimedia/pulseaudio/pulseaudio/0004-alsa-set-availability-for-some-unavailable-profiles.patch')
-rw-r--r-- | meta/recipes-multimedia/pulseaudio/pulseaudio/0004-alsa-set-availability-for-some-unavailable-profiles.patch | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/meta/recipes-multimedia/pulseaudio/pulseaudio/0004-alsa-set-availability-for-some-unavailable-profiles.patch b/meta/recipes-multimedia/pulseaudio/pulseaudio/0004-alsa-set-availability-for-some-unavailable-profiles.patch new file mode 100644 index 0000000000..bb318aa06e --- /dev/null +++ b/meta/recipes-multimedia/pulseaudio/pulseaudio/0004-alsa-set-availability-for-some-unavailable-profiles.patch @@ -0,0 +1,75 @@ +From 0136b73158f60d5dc630ae348b18df3b59a2a5c2 Mon Sep 17 00:00:00 2001 +From: Tanu Kaskinen <tanuk@iki.fi> +Date: Fri, 23 Oct 2015 13:37:11 +0300 +Subject: [PATCH 4/4] alsa: set availability for (some) unavailable profiles + +The alsa card hasn't so far set any availability for profiles. That +caused an issue with some HDMI hardware: the sound card has two HDMI +outputs, but only the second of them is actually usable. The +unavailable port is marked as unavailable and the available port is +marked as available, but this information isn't propagated to the +profile availability. Without profile availability information, the +initial profile policy picks the unavailable one, since it has a +higher priority value. + +This patch adds simple logic for marking some profiles unavailable: +if the profile only contains unavailable ports, the profile is +unavailable too. This can be improved in the future so that if a +profile contains sinks or sources that only contain unavailable ports, +the profile should be marked as unavailable. Implementing that +requires adding more information about the sinks and sources to +pa_card_profile, however. + +BugLink: https://bugzilla.yoctoproject.org/show_bug.cgi?id=8448 + +Upstream-Status: Submitted [http://lists.freedesktop.org/archives/pulseaudio-discuss/2015-October/024614.html] +Signed-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com> +--- + src/modules/alsa/module-alsa-card.c | 24 ++++++++++++++++++++++++ + 1 file changed, 24 insertions(+) + +diff --git a/src/modules/alsa/module-alsa-card.c b/src/modules/alsa/module-alsa-card.c +index 5b39654..73a846c 100644 +--- a/src/modules/alsa/module-alsa-card.c ++++ b/src/modules/alsa/module-alsa-card.c +@@ -366,6 +366,7 @@ static int report_jack_state(snd_mixer_elem_t *melem, unsigned int mask) { + void *state; + pa_alsa_jack *jack; + pa_device_port *port; ++ pa_card_profile *profile; + + pa_assert(u); + +@@ -396,6 +397,29 @@ static int report_jack_state(snd_mixer_elem_t *melem, unsigned int mask) { + } + report_port_state(port, u); + } ++ ++ /* Update profile availabilities. The logic could be improved; for now we ++ * only set obviously unavailable profiles (those that contain only ++ * unavailable ports) to PA_AVAILABLE_NO and all others to ++ * PA_AVAILABLE_UNKNOWN. */ ++ PA_HASHMAP_FOREACH(profile, u->card->profiles, state) { ++ void *state2; ++ pa_available_t available = PA_AVAILABLE_NO; ++ ++ /* Don't touch the "off" profile. */ ++ if (pa_hashmap_size(profile->ports) == 0) ++ continue; ++ ++ PA_HASHMAP_FOREACH(port, profile->ports, state2) { ++ if (port->available != PA_AVAILABLE_NO) { ++ available = PA_AVAILABLE_UNKNOWN; ++ break; ++ } ++ } ++ ++ pa_card_profile_set_available(profile, available); ++ } ++ + return 0; + } + +-- +2.1.4 + |