[pulseaudio-commits] src/modules

Tanu Kaskinen tanuk at kemper.freedesktop.org
Mon Mar 23 10:27:35 PDT 2015


 src/modules/alsa/alsa-ucm.c |   25 ++++++++++++++++++++-----
 src/modules/alsa/alsa-ucm.h |    3 +++
 2 files changed, 23 insertions(+), 5 deletions(-)

New commits:
commit 85f5d93306888bd3ee09497056bfa1b1e32bd51f
Author: Tanu Kaskinen <tanu.kaskinen at linux.intel.com>
Date:   Thu Feb 12 15:11:52 2015 +0200

    ucm: Add support for "JackControl"
    
    JackControl is used to indicate the kcontrol name for jack detection.

diff --git a/src/modules/alsa/alsa-ucm.c b/src/modules/alsa/alsa-ucm.c
index aa2d601..ef6adcd 100644
--- a/src/modules/alsa/alsa-ucm.c
+++ b/src/modules/alsa/alsa-ucm.c
@@ -90,6 +90,7 @@ static struct ucm_items item[] = {
     {"CaptureRate", PA_ALSA_PROP_UCM_CAPTURE_RATE},
     {"CaptureChannels", PA_ALSA_PROP_UCM_CAPTURE_CHANNELS},
     {"TQ", PA_ALSA_PROP_UCM_QOS},
+    {"JackControl", PA_ALSA_PROP_UCM_JACK_CONTROL},
     {NULL, NULL},
 };
 
@@ -1262,9 +1263,18 @@ static int ucm_create_mapping(
     return ret;
 }
 
-static pa_alsa_jack* ucm_get_jack(pa_alsa_ucm_config *ucm, const char *dev_name, const char *pre_tag) {
+static pa_alsa_jack* ucm_get_jack(pa_alsa_ucm_config *ucm, pa_alsa_ucm_device *device, const char *pre_tag) {
     pa_alsa_jack *j;
-    char *name = pa_sprintf_malloc("%s%s", pre_tag, dev_name);
+    const char *device_name;
+    char *name;
+    const char *jack_control;
+
+    pa_assert(ucm);
+    pa_assert(device);
+    pa_assert(pre_tag);
+
+    device_name = pa_proplist_gets(device->proplist, PA_ALSA_PROP_UCM_NAME);
+    name = pa_sprintf_malloc("%s%s", pre_tag, device_name);
 
     PA_LLIST_FOREACH(j, ucm->jacks)
         if (pa_streq(j->name, name))
@@ -1274,7 +1284,12 @@ static pa_alsa_jack* ucm_get_jack(pa_alsa_ucm_config *ucm, const char *dev_name,
     j->state_unplugged = PA_AVAILABLE_NO;
     j->state_plugged = PA_AVAILABLE_YES;
     j->name = pa_xstrdup(name);
-    j->alsa_name = pa_sprintf_malloc("%s Jack", dev_name);
+
+    jack_control = pa_proplist_gets(device->proplist, PA_ALSA_PROP_UCM_JACK_CONTROL);
+    if (jack_control)
+        j->alsa_name = pa_xstrdup(jack_control);
+    else
+        j->alsa_name = pa_sprintf_malloc("%s Jack", device_name);
 
     PA_LLIST_PREPEND(pa_alsa_jack, ucm->jacks, j);
 
@@ -1343,9 +1358,9 @@ static int ucm_create_profile(
         ucm_create_mapping(ucm, ps, p, dev, verb_name, name, sink, source);
 
         if (sink)
-            dev->output_jack = ucm_get_jack(ucm, name, PA_UCM_PRE_TAG_OUTPUT);
+            dev->output_jack = ucm_get_jack(ucm, dev, PA_UCM_PRE_TAG_OUTPUT);
         if (source)
-            dev->input_jack = ucm_get_jack(ucm, name, PA_UCM_PRE_TAG_INPUT);
+            dev->input_jack = ucm_get_jack(ucm, dev, PA_UCM_PRE_TAG_INPUT);
     }
 
     /* Now find modifiers that have their own PlaybackPCM and create
diff --git a/src/modules/alsa/alsa-ucm.h b/src/modules/alsa/alsa-ucm.h
index 20dc999..a8c8090 100644
--- a/src/modules/alsa/alsa-ucm.h
+++ b/src/modules/alsa/alsa-ucm.h
@@ -84,6 +84,9 @@ typedef void snd_use_case_mgr_t;
 /** For devices: The modifier (if any) that this device corresponds to */
 #define PA_ALSA_PROP_UCM_MODIFIER "alsa.ucm.modifier"
 
+/* Corresponds to the "JackControl" UCM value. */
+#define PA_ALSA_PROP_UCM_JACK_CONTROL               "alsa.ucm.jack_control"
+
 typedef struct pa_alsa_ucm_verb pa_alsa_ucm_verb;
 typedef struct pa_alsa_ucm_modifier pa_alsa_ucm_modifier;
 typedef struct pa_alsa_ucm_device pa_alsa_ucm_device;



More information about the pulseaudio-commits mailing list