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@diasemi.com
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