ASoC: Tegra: Harmony: Add headphone jack detection

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>
This commit is contained in:
Stephen Warren 2011-02-03 13:56:13 -07:00 committed by Mark Brown
parent 46fdaa3bec
commit f7d3e403d7

View File

@ -38,6 +38,7 @@
#include <mach/harmony_audio.h> #include <mach/harmony_audio.h>
#include <sound/core.h> #include <sound/core.h>
#include <sound/jack.h>
#include <sound/pcm.h> #include <sound/pcm.h>
#include <sound/pcm_params.h> #include <sound/pcm_params.h>
#include <sound/soc.h> #include <sound/soc.h>
@ -123,6 +124,24 @@ static struct snd_soc_ops harmony_asoc_ops = {
.hw_params = harmony_asoc_hw_params, .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, static int harmony_event_int_spk(struct snd_soc_dapm_widget *w,
struct snd_kcontrol *k, int event) 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, snd_soc_dapm_add_routes(dapm, harmony_audio_map,
ARRAY_SIZE(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, "Int Spk");
snd_soc_dapm_enable_pin(dapm, "Mic Jack"); snd_soc_dapm_enable_pin(dapm, "Mic Jack");
snd_soc_dapm_sync(dapm); 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; return 0;
} }