On Tue, 2015-03-10 at 17:39 +0530, Arun Raghavan wrote: > On Thu, 2015-02-12 at 15:11 +0200, Tanu Kaskinen wrote: > > JackControl is used to indicate the kcontrol name for jack detection. > > --- > > src/modules/alsa/alsa-ucm.c | 25 ++++++++++++++++++++----- > > src/modules/alsa/alsa-ucm.h | 3 +++ > > 2 files changed, 23 insertions(+), 5 deletions(-) > > > > 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; > > Looks good to me, ack. Thanks, I pushed this patch now. -- Tanu