ASoC: rt286: add jack detection disable with NULL jack passed
authorJie Yang <yang.jie@intel.com>
Tue, 10 Feb 2015 09:01:56 +0000 (17:01 +0800)
committerMark Brown <broonie@kernel.org>
Tue, 24 Feb 2015 15:06:12 +0000 (00:06 +0900)
Some platforms, e.g. WSB, don't need jack detection when
system is in Suspend, for power save reason.

Here add headphone/mic jack detection disable feature with NULL
jack passed in, when disabled, it will disable interrupt, and
disable LDO1, which is used for jack detection when headphone
is plugged in.

Signed-off-by: Jie Yang <yang.jie@intel.com>
Reviewed-by: Bard Liao <bardliao@realtek.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/rt286.c

index f374840a5a7ce376272d8f7e3290f91c099cb19f..16723b167fbf0dd473d99781b62b98e2b11de1de 100644 (file)
@@ -395,9 +395,20 @@ int rt286_mic_detect(struct snd_soc_codec *codec, struct snd_soc_jack *jack)
 
        rt286->jack = jack;
 
-       /* Send an initial empty report */
-       snd_soc_jack_report(rt286->jack, 0,
-               SND_JACK_MICROPHONE | SND_JACK_HEADPHONE);
+       if (jack) {
+               /* enable IRQ */
+               if (rt286->jack->status | SND_JACK_HEADPHONE)
+                       snd_soc_dapm_force_enable_pin(&codec->dapm, "LDO1");
+               regmap_update_bits(rt286->regmap, RT286_IRQ_CTRL, 0x2, 0x2);
+               /* Send an initial empty report */
+               snd_soc_jack_report(rt286->jack, rt286->jack->status,
+                       SND_JACK_MICROPHONE | SND_JACK_HEADPHONE);
+       } else {
+               /* disable IRQ */
+               regmap_update_bits(rt286->regmap, RT286_IRQ_CTRL, 0x2, 0x0);
+               snd_soc_dapm_disable_pin(&codec->dapm, "LDO1");
+       }
+       snd_soc_dapm_sync(&codec->dapm);
 
        return 0;
 }