]> git.ipfire.org Git - ipfire-2.x.git/blobdiff - src/patches/suse-2.6.27.31/patches.drivers/alsa-post-ga-alc888-hp-3stack-auto-mute
Move xen patchset to new version's subdir.
[ipfire-2.x.git] / src / patches / suse-2.6.27.31 / patches.drivers / alsa-post-ga-alc888-hp-3stack-auto-mute
diff --git a/src/patches/suse-2.6.27.31/patches.drivers/alsa-post-ga-alc888-hp-3stack-auto-mute b/src/patches/suse-2.6.27.31/patches.drivers/alsa-post-ga-alc888-hp-3stack-auto-mute
new file mode 100644 (file)
index 0000000..8df672f
--- /dev/null
@@ -0,0 +1,76 @@
+From 8718b700ccbcc3c6016d38a75e005293c3660f1c Mon Sep 17 00:00:00 2001
+From: Herton Ronaldo Krzesinski <herton@mandriva.com.br>
+Date: Wed, 4 Mar 2009 14:22:51 -0300
+Subject: ALSA: hda - Add headphone automute support for 3stack-hp model (ALC888)
+Patch-mainline: 
+References: bnc#482796
+
+Mute speaker outputs on headphone insertion for machines that use
+3stack-hp model.
+
+Signed-off-by: Herton Ronaldo Krzesinski <herton@mandriva.com.br>
+Signed-off-by: Takashi Iwai <tiwai@suse.de>
+
+---
+ sound/pci/hda/patch_realtek.c |   38 +++++++++++++++++++++++++++++++++-----
+ 1 file changed, 33 insertions(+), 5 deletions(-)
+
+--- a/sound/pci/hda/patch_realtek.c
++++ b/sound/pci/hda/patch_realtek.c
+@@ -7853,16 +7853,42 @@ static struct hda_verb alc888_lenovo_sky
+       { } /* end */
+ };
++static struct hda_verb alc888_6st_dell_verbs[] = {
++      {0x1b, AC_VERB_SET_UNSOLICITED_ENABLE, ALC880_HP_EVENT | AC_USRSP_EN},
++      { }
++};
++
++static void alc888_3st_hp_front_automute(struct hda_codec *codec)
++{
++      unsigned int present, bits;
++
++      present = snd_hda_codec_read(codec, 0x1b, 0,
++                      AC_VERB_GET_PIN_SENSE, 0) & 0x80000000;
++      bits = present ? HDA_AMP_MUTE : 0;
++      snd_hda_codec_amp_stereo(codec, 0x14, HDA_OUTPUT, 0,
++                               HDA_AMP_MUTE, bits);
++      snd_hda_codec_amp_stereo(codec, 0x16, HDA_OUTPUT, 0,
++                               HDA_AMP_MUTE, bits);
++      snd_hda_codec_amp_stereo(codec, 0x18, HDA_OUTPUT, 0,
++                               HDA_AMP_MUTE, bits);
++}
++
++static void alc888_3st_hp_unsol_event(struct hda_codec *codec,
++                                    unsigned int res)
++{
++      switch (res >> 26) {
++      case ALC880_HP_EVENT:
++              alc888_3st_hp_front_automute(codec);
++              break;
++      }
++}
++
+ static struct hda_verb alc888_3st_hp_verbs[] = {
+       {0x14, AC_VERB_SET_CONNECT_SEL, 0x00},  /* Front: output 0 (0x0c) */
+       {0x16, AC_VERB_SET_CONNECT_SEL, 0x01},  /* Rear : output 1 (0x0d) */
+       {0x18, AC_VERB_SET_CONNECT_SEL, 0x02},  /* CLFE : output 2 (0x0e) */
+-      { }
+-};
+-
+-static struct hda_verb alc888_6st_dell_verbs[] = {
+       {0x1b, AC_VERB_SET_UNSOLICITED_ENABLE, ALC880_HP_EVENT | AC_USRSP_EN},
+-      { }
++      { } /* end */
+ };
+ /*
+@@ -8715,6 +8741,8 @@ static struct alc_config_preset alc883_p
+               .channel_mode = alc888_3st_hp_modes,
+               .need_dac_fix = 1,
+               .input_mux = &alc883_capture_source,
++              .unsol_event = alc888_3st_hp_unsol_event,
++              .init_hook = alc888_3st_hp_front_automute,
+       },
+       [ALC888_6ST_DELL] = {
+               .mixers = { alc883_base_mixer, alc883_chmode_mixer },