If there are no internal speakers, we should not turn the eapd switch
off, because it might be necessary to keep high for Headphone.

BugLink: https://bugs.launchpad.net/bugs/1155016
Signed-off-by: David Henningsson <david.hennings...@canonical.com>
---
 sound/pci/hda/patch_sigmatel.c |   25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

Hi Takashi,

I encountered the bug when working with a pre-release machine (so no
alsa-info, unfortunately).

Feel free to commit if you think this is a good idea. Or can you think of a use 
case
where this would cause a regression?

diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
index d57c81e..66200ea8 100644
--- a/sound/pci/hda/patch_sigmatel.c
+++ b/sound/pci/hda/patch_sigmatel.c
@@ -3524,6 +3524,31 @@ static int stac_parse_auto_config(struct hda_codec 
*codec)
        if (err < 0)
                return err;
 
+       /* Don't GPIO-mute speakers if there are no internal speakers, because
+          the GPIO might be necessary for Headphone */
+       if (spec->eapd_switch) {
+               hda_nid_t *nid_pin;
+               int nids, i;
+               bool found = false;
+               if (spec->gen.autocfg.line_out_type == AUTO_PIN_SPEAKER_OUT) {
+                       nid_pin = spec->gen.autocfg.line_out_pins;
+                       nids = spec->gen.autocfg.line_outs;
+               } else {
+                       nid_pin = spec->gen.autocfg.speaker_pins;
+                       nids = spec->gen.autocfg.speaker_outs;
+               }
+               for (i = 0; i < nids; i++) {
+                       unsigned int def_conf = snd_hda_codec_get_pincfg(codec, 
nid_pin[i]);
+                       unsigned int attr = 
snd_hda_get_input_pin_attr(def_conf);
+                       if (attr == INPUT_PIN_ATTR_INT) {
+                               found = true;
+                               break;
+                       }
+               }
+               if (!found)
+                       spec->eapd_switch = 0;
+       }
+
        /* minimum value is actually mute */
        spec->gen.vmaster_tlv[3] |= TLV_DB_SCALE_MUTE;
 
-- 
1.7.9.5

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1155016

Title:
  Headphone not working on a desktop machine

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1155016/+subscriptions

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to