On December 03, 2015 10:56, Takashi Iwai wrote: > > This patch adds support to the codec driver to handle mic level > > detect related IRQs, and report these to user-space using a uevent > > variable. > > Is the uevent the best way for this? > > > thanks, > > Takashi Well originally I was using an input device mechanism to report to user-space, albeit using KEY_VOICECOMMAND, which Mark mentioned wasn't correct for this scenario, which was fair enough. He also mentioned that there had been a general push back on using input devices so that code was dropped. See thread below: https://lkml.org/lkml/2015/11/10/347 uevent seemed like the simplest solution to report this event, and allow user-space to act based on it. As mentioned before though, I am open to suggestions if there's a better way. > > > > Signed-off-by: Adam Thomson <Adam.Thomson.Opensource@xxxxxxxxxxx> > > --- > > sound/soc/codecs/da7218.c | 19 ++++++++++++++----- > > 1 file changed, 14 insertions(+), 5 deletions(-) > > > > diff --git a/sound/soc/codecs/da7218.c b/sound/soc/codecs/da7218.c > > index 4fee7ae..752ed04 100644 > > --- a/sound/soc/codecs/da7218.c > > +++ b/sound/soc/codecs/da7218.c > > @@ -2202,6 +2202,16 @@ int da7218_hpldet(struct snd_soc_codec *codec, > struct snd_soc_jack *jack) > > } > > EXPORT_SYMBOL_GPL(da7218_hpldet); > > > > +static void da7218_micldet_irq(struct snd_soc_codec *codec) > > +{ > > + char *envp[] = { > > + "EVENT=MIC_LEVEL_DETECT", > > + NULL, > > + }; > > + > > + kobject_uevent_env(&codec->dev->kobj, KOBJ_CHANGE, envp); > > +} > > + > > static void da7218_hpldet_irq(struct snd_soc_codec *codec) > > { > > struct da7218_priv *da7218 = snd_soc_codec_get_drvdata(codec); > > @@ -2232,6 +2242,10 @@ static irqreturn_t da7218_irq_thread(int irq, void > *data) > > if (!status) > > return IRQ_NONE; > > > > + /* Mic level detect */ > > + if (status & DA7218_LVL_DET_EVENT_MASK) > > + da7218_micldet_irq(codec); > > + > > /* HP detect */ > > if (status & DA7218_HPLDET_JACK_EVENT_MASK) > > da7218_hpldet_irq(codec); > > @@ -2936,11 +2950,6 @@ static int da7218_probe(struct snd_soc_codec *codec) > > } > > > > if (da7218->irq) { > > - /* Mask off mic level events, currently not handled */ > > - snd_soc_update_bits(codec, DA7218_EVENT_MASK, > > - DA7218_LVL_DET_EVENT_MSK_MASK, > > - DA7218_LVL_DET_EVENT_MSK_MASK); > > - > > ret = devm_request_threaded_irq(codec->dev, da7218->irq, NULL, > > da7218_irq_thread, > > IRQF_TRIGGER_LOW | > IRQF_ONESHOT, > > -- > > 1.9.3 > > > > _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel