mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 19:56:18 +00:00
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>
This commit is contained in:
parent
ec4e86ba06
commit
45a6ac16c2
2 changed files with 14 additions and 1 deletions
|
@ -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.
|
||||
|
|
|
@ -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 */
|
||||
|
|
Loading…
Reference in a new issue