[alsa-devel] [PATCH v8 3/7] ALSA: jack: extend snd_jack_new to support phantom jack

Jie, Yang yang.jie at intel.com
Wed Apr 22 14:49:15 CEST 2015


> -----Original Message-----
> From: Takashi Iwai [mailto:tiwai at suse.de]
> Sent: Wednesday, April 22, 2015 7:31 PM
> To: Jie, Yang
> Cc: broonie at kernel.org; alsa-devel at alsa-project.org; Girdwood, Liam R;
> tanu.kaskinen at linux.intel.com
> Subject: Re: [PATCH v8 3/7] ALSA: jack: extend snd_jack_new to support
> phantom jack
> 
> At Wed, 22 Apr 2015 14:03:49 +0800,
> Jie Yang wrote:
> >
> > diff --git a/sound/core/jack.c b/sound/core/jack.c index
> > b13d0b1..6c729ef 100644
> > --- a/sound/core/jack.c
> > +++ b/sound/core/jack.c
> > @@ -198,6 +198,9 @@ EXPORT_SYMBOL(snd_jack_add_new_kctl);
> >   * @type:  a bitmask of enum snd_jack_type values that can be detected
> by
> >   *         this jack
> >   * @jjack: Used to provide the allocated jack object to the caller.
> > + * @phantom_jack: for phantom jack, only create needed kctl, won't
> create
> > + *         input device
> > + * @initial_kctl: create kctl if true, also add it to the non-phantom
> > + jack kctl list
> 
> Better to align with the actual argument order.
 
OK, will update it, together with that for documentation in patch 7/7.

> 
> >   *
> >   * Creates a new jack object.
> >   *
> > @@ -205,9 +208,10 @@ EXPORT_SYMBOL(snd_jack_add_new_kctl);
> >   * On success @jjack will be initialised.
> >   */
> >  int snd_jack_new(struct snd_card *card, const char *id, int type,
> > -		 struct snd_jack **jjack)
> > +		 struct snd_jack **jjack, bool initial_kctl, bool phantom_jack)
> >  {
> >  	struct snd_jack *jack;
> > +	struct snd_jack_kctl *jack_kctl = NULL;
> >  	int err;
> >  	int i;
> >  	static struct snd_device_ops ops = { @@ -216,26 +220,33 @@ int
> > snd_jack_new(struct snd_card *card, const char *id, int type,
> >  		.dev_disconnect = snd_jack_dev_disconnect,
> >  	};
> >
> > +	if (initial_kctl)
> > +		jack_kctl = snd_jack_kctl_new(card, id, type);
> > +
> 
> The function should return -ENOMEM if snd_jack_kctl_new() fails.
> 
> >  	jack = kzalloc(sizeof(struct snd_jack), GFP_KERNEL);
> >  	if (jack == NULL)
> >  		return -ENOMEM;
> >
> >  	jack->id = kstrdup(id, GFP_KERNEL);
> >
> > -	jack->input_dev = input_allocate_device();
> > -	if (jack->input_dev == NULL) {
> > -		err = -ENOMEM;
> > -		goto fail_input;
> > -	}
> > +	/* don't creat input device for phantom jack */
> > +	if (!phantom_jack) {
> > +		jack->input_dev = input_allocate_device();
> > +		if (jack->input_dev == NULL) {
> > +			err = -ENOMEM;
> > +			goto fail_input;
> > +		}
> >
> > -	jack->input_dev->phys = "ALSA";
> > +		jack->input_dev->phys = "ALSA";
> >
> > -	jack->type = type;
> > +		jack->type = type;
> >
> > -	for (i = 0; i < SND_JACK_SWITCH_TYPES; i++)
> > -		if (type & (1 << i))
> > -			input_set_capability(jack->input_dev, EV_SW,
> > -					     jack_switch_types[i]);
> > +		for (i = 0; i < SND_JACK_SWITCH_TYPES; i++)
> > +			if (type & (1 << i))
> > +				input_set_capability(jack->input_dev,
> EV_SW,
> > +						     jack_switch_types[i]);
> > +
> > +	}
> >
> >  	err = snd_device_new(card, SNDRV_DEV_JACK, jack, &ops);
> >  	if (err < 0)
> > @@ -244,6 +255,9 @@ int snd_jack_new(struct snd_card *card, const char
> *id, int type,
> >  	jack->card = card;
> >  	INIT_LIST_HEAD(&jack->kctl_list);
> >
> > +	if (initial_kctl && jack_kctl)
> 
> ... then here no need to check both.
 
Good, will change it soon.

> 
> 
> Takashi


More information about the Alsa-devel mailing list