Headphone not working on a desktop machine
Bug #1155016 reported by
David Henningsson
This bug affects 1 person
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
linux (Ubuntu) |
Fix Released
|
Undecided
|
David Henningsson |
Bug Description
On a desktop machine we're currently enabling, the front headphone output does not work (no or very weak output).
Please don't triage, this is for tracking purposes only.
Changed in linux (Ubuntu): | |
assignee: | nobody → David Henningsson (diwic) |
status: | New → In Progress |
To post a comment you must log in.
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 pci/hda/ patch_sigmatel. c | 25 +++++++ +++++++ +++++++ ++++
Signed-off-by: David Henningsson <email address hidden>
---
sound/
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 pci/hda/ patch_sigmatel. c pci/hda/ patch_sigmatel. c auto_config( struct hda_codec *codec)
index d57c81e..66200ea8 100644
--- a/sound/
+++ b/sound/
@@ -3524,6 +3524,31 @@ static int stac_parse_
if (err < 0)
return err;
+ /* Don't GPIO-mute speakers if there are no internal speakers, because gen.autocfg. line_out_ type == AUTO_PIN_ SPEAKER_ OUT) { autocfg. line_out_ pins; autocfg. line_outs; autocfg. speaker_ pins; autocfg. speaker_ outs; codec_get_ pincfg( codec, nid_pin[i]); get_input_ pin_attr( def_conf) ; >gen.vmaster_ tlv[3] |= TLV_DB_SCALE_MUTE;
+ the GPIO might be necessary for Headphone */
+ if (spec->eapd_switch) {
+ hda_nid_t *nid_pin;
+ int nids, i;
+ bool found = false;
+ if (spec->
+ nid_pin = spec->gen.
+ nids = spec->gen.
+ } else {
+ nid_pin = spec->gen.
+ nids = spec->gen.
+ }
+ for (i = 0; i < nids; i++) {
+ unsigned int def_conf = snd_hda_
+ unsigned int attr = snd_hda_
+ if (attr == INPUT_PIN_ATTR_INT) {
+ found = true;
+ break;
+ }
+ }
+ if (!found)
+ spec->eapd_switch = 0;
+ }
+
/* minimum value is actually mute */
spec-
--
1.7.9.5