[alsa-devel] hda Regression: jack doesn't mute speaker

Takashi Iwai tiwai at suse.de
Thu Apr 16 10:41:28 CEST 2009


At Thu, 16 Apr 2009 09:23:25 +0200,
Ortwin Glück wrote:
> 
> Takashi Iwai wrote:
> >>>> Also the "Front" 
> >>>> and "Surround" outputs are now both labeled "Speaker" (see attached images of kmix).
> >>> What I/O are they actually corresponding to?  Are they speaker outputs
> >>> or line-outs, or anything else?
> >> They correspond to the built-in speakers.
> > 
> > So they are really front/surround 4.0-speaker outputs?
> 
> Probably. They seem to control two distinct speakers inside the laptop. More I 
> don't know. In OS-X there is only a single volume control (a sacrifice to 
> usability I think. who would want to control individual volumes of these on a 
> laptop anyway).

The problem is likely because hp_detect field isn't set on your
machine because the headphone shares the same audio-out widget with
the speaker out.

Could you try the patch below?


thanks,

Takashi

---
diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
index ce30b45..917bc5d 100644
--- a/sound/pci/hda/patch_sigmatel.c
+++ b/sound/pci/hda/patch_sigmatel.c
@@ -3076,6 +3076,11 @@ static int create_multi_out_ctls(struct hda_codec *codec, int num_outs,
 	unsigned int wid_caps;
 
 	for (i = 0; i < num_outs && i < ARRAY_SIZE(chname); i++) {
+		if (type == AUTO_PIN_HP_OUT && !spec->hp_detect) {
+			wid_caps = get_wcaps(codec, pins[i]);
+			if (wid_caps & AC_WCAP_UNSOL_CAP)
+				spec->hp_detect = 1;
+		}
 		nid = dac_nids[i];
 		if (!nid)
 			continue;
@@ -3119,11 +3124,6 @@ static int create_multi_out_ctls(struct hda_codec *codec, int num_outs,
 			err = create_controls_idx(codec, name, idx, nid, 3);
 			if (err < 0)
 				return err;
-			if (type == AUTO_PIN_HP_OUT && !spec->hp_detect) {
-				wid_caps = get_wcaps(codec, pins[i]);
-				if (wid_caps & AC_WCAP_UNSOL_CAP)
-					spec->hp_detect = 1;
-			}
 		}
 	}
 	return 0;


More information about the Alsa-devel mailing list