summaryrefslogtreecommitdiffstats
path: root/sound/pci/hda/patch_sigmatel.c
diff options
context:
space:
mode:
authorMatthew Ranostay2008-10-15 20:45:38 +0200
committerTakashi Iwai2008-10-16 08:43:24 +0200
commit45a6ac16c2136e4b902b09bf0b6192b940e8d732 (patch)
tree935d09d62508c81b9f80e1e5de42839e1cbfa314 /sound/pci/hda/patch_sigmatel.c
parentALSA: hda - Fix PCM type of Nvidia HDMI devices (diff)
downloadkernel-qcow2-linux-45a6ac16c2136e4b902b09bf0b6192b940e8d732.tar.gz
kernel-qcow2-linux-45a6ac16c2136e4b902b09bf0b6192b940e8d732.tar.xz
kernel-qcow2-linux-45a6ac16c2136e4b902b09bf0b6192b940e8d732.zip
ALSA: hda: add support for jack detection on IDT/Sigmatel
Added support for jack detection reporting to userspace for IDT/Sigmatel codecs. Signed-off-by: Matthew Ranostay <mranostay@embeddedalley.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/pci/hda/patch_sigmatel.c')
-rw-r--r--sound/pci/hda/patch_sigmatel.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
index a2ac7205d45d..ec88ba881482 100644
--- a/sound/pci/hda/patch_sigmatel.c
+++ b/sound/pci/hda/patch_sigmatel.c
@@ -30,6 +30,7 @@
#include <linux/pci.h>
#include <sound/core.h>
#include <sound/asoundef.h>
+#include <sound/jack.h>
#include "hda_codec.h"
#include "hda_local.h"
#include "hda_patch.h"
@@ -216,6 +217,9 @@ struct sigmatel_spec {
struct hda_pcm pcm_rec[2]; /* PCM information */
+ /* jack detection */
+ struct snd_jack *jack;
+
/* dynamic controls and input_mux */
struct auto_pin_cfg autocfg;
unsigned int num_kctl_alloc, num_kctl_used;
@@ -3617,7 +3621,7 @@ static int stac92xx_init(struct hda_codec *codec)
{
struct sigmatel_spec *spec = codec->spec;
struct auto_pin_cfg *cfg = &spec->autocfg;
- int i;
+ int i, err;
snd_hda_sequence_write(codec, spec->init);
@@ -3639,6 +3643,12 @@ static int stac92xx_init(struct hda_codec *codec)
stac92xx_auto_set_pinctl(codec, spec->autocfg.line_out_pins[0],
AC_PINCTL_OUT_EN);
stac92xx_auto_init_hp_out(codec);
+ /* jack detection */
+ err = snd_jack_new(codec->bus->card,
+ "Headphone Jack",
+ SND_JACK_HEADPHONE, &spec->jack);
+ if (err < 0)
+ return err;
/* fake event to set up pins */
codec->patch_ops.unsol_event(codec, STAC_HP_EVENT << 26);
} else {
@@ -3796,6 +3806,8 @@ static void stac92xx_hp_detect(struct hda_codec *codec, unsigned int res)
break;
presence = get_hp_pin_presence(codec, cfg->hp_pins[i]);
}
+ snd_jack_report(spec->jack,
+ presence ? SND_JACK_HEADPHONE : 0);
if (presence) {
/* disable lineouts, enable hp */