[pulseaudio-discuss] [PATCH 5/6] ucm: Add support for "JackControl"

Tanu Kaskinen tanu.kaskinen at linux.intel.com
Mon Mar 23 10:27:39 PDT 2015


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



More information about the pulseaudio-discuss mailing list