ASoC: Tegra: Harmony: Add headphone jack detection
authorStephen Warren <swarren@nvidia.com>
Thu, 3 Feb 2011 20:56:13 +0000 (13:56 -0700)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Wed, 9 Feb 2011 12:10:53 +0000 (12:10 +0000)
Signed-off-by: Stephen Warren <swarren@nvidia.com>
Acked-by: Liam Girdwood <lrg@slimlogic.co.uk>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
sound/soc/tegra/harmony.c

index 11e2cb8..fcd316e 100644 (file)
@@ -38,6 +38,7 @@
 #include <mach/harmony_audio.h>
 
 #include <sound/core.h>
+#include <sound/jack.h>
 #include <sound/pcm.h>
 #include <sound/pcm_params.h>
 #include <sound/soc.h>
@@ -123,6 +124,24 @@ static struct snd_soc_ops harmony_asoc_ops = {
        .hw_params = harmony_asoc_hw_params,
 };
 
+static struct snd_soc_jack harmony_hp_jack;
+
+static struct snd_soc_jack_pin harmony_hp_jack_pins[] = {
+       {
+               .pin = "Headphone Jack",
+               .mask = SND_JACK_HEADPHONE,
+       },
+};
+
+static struct snd_soc_jack_gpio harmony_hp_jack_gpios[] = {
+       {
+               .name = "headphone detect",
+               .report = SND_JACK_HEADPHONE,
+               .debounce_time = 150,
+               .invert = 1,
+       }
+};
+
 static int harmony_event_int_spk(struct snd_soc_dapm_widget *w,
                                        struct snd_kcontrol *k, int event)
 {
@@ -178,11 +197,20 @@ static int harmony_asoc_init(struct snd_soc_pcm_runtime *rtd)
        snd_soc_dapm_add_routes(dapm, harmony_audio_map,
                                ARRAY_SIZE(harmony_audio_map));
 
-       snd_soc_dapm_enable_pin(dapm, "Headphone Jack");
        snd_soc_dapm_enable_pin(dapm, "Int Spk");
        snd_soc_dapm_enable_pin(dapm, "Mic Jack");
        snd_soc_dapm_sync(dapm);
 
+       harmony_hp_jack_gpios[0].gpio = pdata->gpio_hp_det;
+       snd_soc_jack_new(codec, "Headphone Jack", SND_JACK_HEADPHONE,
+                        &harmony_hp_jack);
+       snd_soc_jack_add_pins(&harmony_hp_jack,
+                             ARRAY_SIZE(harmony_hp_jack_pins),
+                             harmony_hp_jack_pins);
+       snd_soc_jack_add_gpios(&harmony_hp_jack,
+                              ARRAY_SIZE(harmony_hp_jack_gpios),
+                              harmony_hp_jack_gpios);
+
        return 0;
 }