Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 45a6ac16 authored by Matt Ranostay's avatar Matt Ranostay Committed by Takashi Iwai
Browse files

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: default avatarMatthew Ranostay <mranostay@embeddedalley.com>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent ec4e86ba
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -501,6 +501,7 @@ config SND_HDA_INTEL
	tristate "Intel HD Audio"
	select SND_PCM
	select SND_VMASTER
	select SND_JACK if INPUT=y || INPUT=SND
	help
	  Say Y here to include support for Intel "High Definition
	  Audio" (Azalia) motherboard devices.
+13 −1
Original line number Diff line number Diff line
@@ -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 */