[PATCH 03/17] alsa: Fix jack state reporting

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The old code assumed that each path can contain only one port, which
isn't true.
---
 src/modules/alsa/module-alsa-card.c | 27 ++++++++++++++-------------
 1 file changed, 14 insertions(+), 13 deletions(-)

diff --git a/src/modules/alsa/module-alsa-card.c b/src/modules/alsa/module-alsa-card.c
index 103a8fa..7576043 100644
--- a/src/modules/alsa/module-alsa-card.c
+++ b/src/modules/alsa/module-alsa-card.c
@@ -302,22 +302,21 @@ static void report_port_state(pa_device_port *p, struct userdata *u) {
     void *state;
     pa_alsa_jack *jack;
     pa_available_t pa = PA_AVAILABLE_UNKNOWN;
-    pa_device_port *port;
 
     PA_HASHMAP_FOREACH(jack, u->jacks, state) {
         pa_available_t cpa;
 
-        if (u->use_ucm)
-            port = pa_hashmap_get(u->card->ports, jack->name);
-        else {
-            if (jack->path)
-                port = jack->path->port;
-            else
+        if (u->use_ucm) {
+            pa_device_port *port = pa_hashmap_get(u->card->ports, jack->name);
+
+            if (p != port)
                 continue;
-        }
+        } else {
+            pa_alsa_port_data *data = PA_DEVICE_PORT_DATA(p);
 
-        if (p != port)
-            continue;
+            if (jack->path != data->path)
+                continue;
+        }
 
         cpa = jack->plugged_in ? jack->state_plugged : jack->state_unplugged;
 
@@ -365,12 +364,14 @@ static int report_jack_state(snd_hctl_elem_t *elem, unsigned int mask) {
                 pa_assert(u->card->ports);
                 port = pa_hashmap_get(u->card->ports, jack->name);
                 pa_assert(port);
+                report_port_state(port, u);
             }
             else {
-                pa_assert(jack->path && jack->path->port);
-                port = jack->path->port;
+                unsigned idx;
+
+                PA_DYNARRAY_FOREACH(port, jack->path->ports, idx)
+                    report_port_state(port, u);
             }
-            report_port_state(port, u);
         }
     return 0;
 }
-- 
1.8.3.1



[Index of Archives]     [Linux Audio Users]     [AMD Graphics]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux