[alsa-devel] [PATCH v2 1/2] ALSA: jack: create jack kcontrols for every jack input device

Jie, Yang yang.jie at intel.com
Fri Mar 20 13:50:33 CET 2015


> -----Original Message-----
> From: Takashi Iwai [mailto:tiwai at suse.de]
> Sent: Friday, March 20, 2015 8:27 PM
> To: Jie, Yang
> Cc: perex at perex.cz; broonie at kernel.org; alsa-devel at alsa-project.org;
> Girdwood, Liam R; Liam Girdwood
> Subject: Re: [PATCH v2 1/2] ALSA: jack: create jack kcontrols for every jack
> input device
> 
> At Fri, 20 Mar 2015 12:22:10 +0000,
> Jie, Yang wrote:
> >
> > > > +}
> > > > +
> > > > +static int snd_jack_new_kctl(struct snd_card *card, struct
> > > > +snd_jack *jack, int type) {
> > > > +	struct snd_kcontrol *kctl;
> > > > +	struct snd_jack_kctl *jack_kctl;
> > > > +	int i, err, index, state = 0 /* use 0 for default state ?? */;
> > > > +
> > > > +	INIT_LIST_HEAD(&jack->kctl_list);
> > > > +	for (i = 0; i < fls(SND_JACK_BTN_0); i++) {
> > > > +		int testbit = 1 << i;
> > > > +		if (type & testbit) {
> > >
> > > With this implementation, you'll get multiple boolean kctls for a
> > > headset.  I thought we agreed with creating a single boolean for headset?
> > [Keyon] We agreed with creating multiple kctls for combo jack, e.g.
> headset.
> > Furthermore, e.g., imagine that type = SND_JACK_HEADSET  |
> > SND_JACK_BTN_0, we will create 3 kctls for the jack, when BTN_0 is
> > pressed, we will report to the 3rd kctl.
> 
> Hm, I don't remember that I agreed with multiple kctls...
> 
> The multiple kctls have a significant drawback (multiple event calls for a single
> headset) and its behavior is incompatible with the current code (both the
> name change and the behavior change).  That is, your patch will very likely
> break the existing applications.
[Keyon] I am not very clear with the existing applications that using these 
kctl events(seems Android use input subsystem event? Which we didn't
Change here. If I understand correctly, Pulseaudio uses jack switch controls, 
via the name, then we can use different name for headphone and mic here.)

we will generate 2 event calls(one headphone, one mic) when Headset 
plug in/out, applications will receive these 2 events,  and they can do anything,
e.g. decide to switch on/off speaker/headphone.

BTW, I haven't implemented the generating of combo jack kctls' name yet,
currently, they looked like below:
numid=12,iface=CARD,name='Headset Jack'
numid=13,iface=CARD,name='Headset Jack',index=1
numid=14,iface=CARD,name='Headset Jack',index=2

once we have come to agreement, we can modify it in snd_jack_new_kctl(),
e.g., "Headset Jack Mic" and "Headset Jack Speakers".

> 
> 
> Takashi


More information about the Alsa-devel mailing list