[alsa-devel] [PATCH v8 1/7] ALSA: jack: implement kctl creating for jack device
Jie, Yang
yang.jie at intel.com
Wed Apr 22 14:08:35 CEST 2015
> -----Original Message-----
> From: Takashi Iwai [mailto:tiwai at suse.de]
> Sent: Wednesday, April 22, 2015 7:28 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 v8 1/7] ALSA: jack: implement kctl creating for jack
> device
>
> At Wed, 22 Apr 2015 14:03:47 +0800,
> Jie Yang wrote:
> >
> > Currently the ALSA jack core registers only input devices for each
> > jack registered. These jack input devices are not readable by
> > userspace devices that run as non root. This patch and the following
> > series patches will implement kctls inside the core jack part,
> > including kctls creating, status changing report, for both HD-Audio
> > and ASoC jack. This allows non root userspace to read jack status and act on
> it.
> >
> > This patch implement snd_jack_add_new_kctl(), which will create a
> > kcontrol, add it to the card, and also attach it to the jack kctl list.
> >
> > The patch also initial the jack kctl list after jack is newed, and
> > report kctl status when doing jack report.
> >
> > In the following patches, We will update snd_jack_new() to support
> > phantom jack creating, and also enable a kcontrol creating at this jack new
> stage.
> > After that, we can remove these part from HDA jack, and leave jack
> > kctls handled by core part thoroughly.
> >
> > Signed-off-by: Liam Girdwood <liam.r.girdwood at linux.intel.com>
> > Modified-by: Jie Yang <yang.jie at intel.com>
> > Signed-off-by: Jie Yang <yang.jie at intel.com>
> > Reveiwed-by: Mark Brown <broonie at kernel.org>
> > ---
> > include/sound/jack.h | 15 +++++++-
> > sound/core/Kconfig | 3 --
> > sound/core/Makefile | 3 +-
> > sound/core/jack.c | 104
> +++++++++++++++++++++++++++++++++++++++++++++++++-
> > sound/pci/hda/Kconfig | 1 -
> > 5 files changed, 118 insertions(+), 8 deletions(-)
> >
> > diff --git a/include/sound/jack.h b/include/sound/jack.h index
> > 2182350..9781e75 100644
> > --- a/include/sound/jack.h
> > +++ b/include/sound/jack.h
> > @@ -73,6 +73,8 @@ enum snd_jack_types {
> >
> > struct snd_jack {
> > struct input_dev *input_dev;
> > + struct list_head kctl_list;
> > + struct snd_card *card;
> > int registered;
> > int type;
> > const char *id;
> > @@ -82,10 +84,17 @@ 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 */
> > +};
>
> This struct isn't referred outside jack.c, so we can move it to jack.c. This hides
> the internal implementation details.
Also thought of it, will change it soon.
>
>
> > #ifdef CONFIG_SND_JACK
> >
> > int snd_jack_new(struct snd_card *card, const char *id, int type,
> > struct snd_jack **jack);
> > +int snd_jack_add_new_kctl(struct snd_jack *jack, const char * name,
> > +int mask);
> > void snd_jack_set_parent(struct snd_jack *jack, struct device
> > *parent); int snd_jack_set_key(struct snd_jack *jack, enum
> snd_jack_types type,
> > int keytype);
> > @@ -93,13 +102,17 @@ int snd_jack_set_key(struct snd_jack *jack, enum
> > snd_jack_types type, void snd_jack_report(struct snd_jack *jack, int
> > status);
> >
> > #else
> > -
> > static inline int snd_jack_new(struct snd_card *card, const char *id, int
> type,
> > struct snd_jack **jack)
> > {
> > return 0;
> > }
> >
> > +static inline int snd_jack_add_new_kctl(struct snd_jack *jack, const
> > +char * name, int mask) {
> > + return 0;
> > +}
> > +
> > static inline void snd_jack_set_parent(struct snd_jack *jack,
> > struct device *parent)
> > {
> > diff --git a/sound/core/Kconfig b/sound/core/Kconfig index
> > 313f22e..63cc2e9 100644
> > --- a/sound/core/Kconfig
> > +++ b/sound/core/Kconfig
> > @@ -221,9 +221,6 @@ config SND_PCM_XRUN_DEBUG config
> SND_VMASTER
> > bool
> >
> > -config SND_KCTL_JACK
> > - bool
> > -
> > config SND_DMA_SGBUF
> > def_bool y
> > depends on X86
> > diff --git a/sound/core/Makefile b/sound/core/Makefile index
> > 4daf2f5..e041dc2 100644
> > --- a/sound/core/Makefile
> > +++ b/sound/core/Makefile
> > @@ -7,8 +7,7 @@ snd-y := sound.o init.o memory.o info.o control.o
> misc.o device.o
> > snd-$(CONFIG_ISA_DMA_API) += isadma.o
> > snd-$(CONFIG_SND_OSSEMUL) += sound_oss.o info_oss.o
> > snd-$(CONFIG_SND_VMASTER) += vmaster.o
> > -snd-$(CONFIG_SND_KCTL_JACK) += ctljack.o
> > -snd-$(CONFIG_SND_JACK) += jack.o
> > +snd-$(CONFIG_SND_JACK) += ctljack.o jack.o
>
> I guess this breaks the build when CONFIG_SND_HDA_INPUT_JACK=n.
Actually not, just double confirm it.
>
>
> Takashi
More information about the Alsa-devel
mailing list