[alsa-devel] [PATCH v6 1/6] ALSA: jack: create jack kcontrols for every jack input

Jie, Yang yang.jie at intel.com
Mon Apr 20 10:38:46 CEST 2015


> -----Original Message-----
> From: Takashi Iwai [mailto:tiwai at suse.de]
> Sent: Monday, April 20, 2015 4:06 PM
> To: Jie, Yang
> Cc: broonie at kernel.org; alsa-devel at alsa-project.org; Girdwood, Liam R;
> tanu.kaskinen at linux.intel.com; Liam Girdwood
> Subject: Re: [PATCH v6 1/6] ALSA: jack: create jack kcontrols for every jack
> input
> 
> At Mon, 20 Apr 2015 07:52:20 +0000,
> Jie, Yang wrote:
> >
> > > > @@ -82,10 +84,19 @@ struct snd_jack {
> > > >  	void (*private_free)(struct snd_jack *);  };
> > > >
> > > > +struct snd_jack_kctl {
> > > > +	struct snd_kcontrol *kctl;
> > > > +	struct list_head list;		/* list of controls belong to the same
> > > jack */
> > > > +	unsigned int mask_bits;	/* one of the corresponding bits of
> > > status change will report to this kctl */
> > > > +	void *private_data;
> > > > +	void (*private_free)(struct snd_jack_kctl *jack_kctl); };
> > >
> > > You don't have to expose this.  The hda_jack.c doesn't actually need
> > > these whole bits, as it supposes 1:1 as jack:kctl mapping.  You can
> > > get rid of hda_jack->kctl since snd_jack_report() does it already,
> > > thus the private_data and the destructor can be dropped, too.
> >
> > The patch 3/6 removes had_jack->kctl, here I added priate destructor
> > for HDA jack to reset hda_jack_tbl jacks->nid and jacks->jack to 0.
> > Seems these are needed for HDA jack logic, otherwise, I can already
> > dropped them. :(
> 
> It's not needed, as far as I understand your code.
> 
> Try to look from from the top-level POV: the hda driver just needs to register
> a jack object via snd_jack_new(), reports it, and remove it in destructor.  The
> private_data was needed for tracking the codec-local kctls, but now they are
> managed in jack object itself, thus we don't have to keep eyes on it.  The
> private_free is for removing the kctl list, and since this is gone, we don't have
> to take it, either.  In other words, we don't have to take care of kctls at all in
> hda driver side.  This would be the ideal situation.
 
Thanks for explaining it. Finally I make clear that jack private_free will call
hda_free_jack_priv() to reset jacks->nid/jack, so I have no worry now. :)

> 
> (snip)
> > > snd_kctl_jack_new() itself.  At the same time, the code doing the
> > > same thing in hda_jack.c can be removed.  Then the index argument of
> >
> > A little concern that there may be a little difference here:
> > hda_jack.c:get_unique_index() check the codec kctl list, but in my
> > patch we check card kctl list, I am afraid that it may influence the
> > exist HDA usage, wo just keep what HDA did before for HDA jack.
> >
> > Takashi, do you think it's a risk to change from codec kctl list to
> > card kctl list for HDA part?
> 
> No, there shouldn't.  The id must be unique for the whole card, not specific
> to codecs.  That is, the code looking through
> snd_ctl_find_id() is even safer than the current version.
 
OK, then I feel reassured to replace it. :)

> 
> 
> thanks,
> 
> Takashi


More information about the Alsa-devel mailing list