[alsa-devel] [PATCH] hda: Add logic to force HP mixer creation

Matthew Ranostay mranostay at embeddedalley.com
Sun Feb 15 17:01:01 CET 2009


In some instances like a laptop PCI_QUIRK you may want to force a
headphone mixer otherwise a "Front" mixer would be in its place, this
is to aid user friendlyness.

Signed-off-by: Matthew Ranostay <mranostay at embeddedalley.com>
---
 sound/pci/hda/patch_sigmatel.c |   25 ++++++++++++++++++-------
 1 files changed, 18 insertions(+), 7 deletions(-)

diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
index aeb5d21..e02a187 100644
--- a/sound/pci/hda/patch_sigmatel.c
+++ b/sound/pci/hda/patch_sigmatel.c
@@ -168,6 +168,7 @@ struct sigmatel_spec {
 	unsigned int surr_switch: 1;
 	unsigned int alt_switch: 1;
 	unsigned int hp_detect: 1;
+	unsigned int hp_mixer: 1;
 	unsigned int spdif_mute: 1;
 	unsigned int check_volume_offset:1;
 
@@ -857,9 +858,9 @@ static struct hda_verb stac92hd73xx_10ch_core_init[] = {
 };
 
 static struct hda_verb stac92hd83xxx_core_init[] = {
-	{ 0xa, AC_VERB_SET_CONNECT_SEL, 0x1},
-	{ 0xb, AC_VERB_SET_CONNECT_SEL, 0x1},
-	{ 0xd, AC_VERB_SET_CONNECT_SEL, 0x0},
+	{ 0xa, AC_VERB_SET_CONNECT_SEL, 0x0},
+	{ 0xb, AC_VERB_SET_CONNECT_SEL, 0x0},
+	{ 0xd, AC_VERB_SET_CONNECT_SEL, 0x1},
 
 	/* power state controls amps */
 	{ 0x01, AC_VERB_SET_EAPD, 1 << 2},
@@ -3115,12 +3116,12 @@ static int stac92xx_auto_create_multi_out_ctls(struct hda_codec *codec,
 		"Front", "Surround", NULL /*CLFE*/, "Side"
 	};
 	hda_nid_t nid = 0;
-	int i, err;
+	int i, idx = 0, err;
 	unsigned int wid_caps;
 
 	for (i = 0; i < cfg->line_outs && spec->multiout.dac_nids[i]; i++) {
 		nid = spec->multiout.dac_nids[i];
-		if (i == 2) {
+		if (idx == 2) {
 			/* Center/LFE */
 			err = create_controls(codec, "Center", nid, 1);
 			if (err < 0)
@@ -3139,9 +3140,9 @@ static int stac92xx_auto_create_multi_out_ctls(struct hda_codec *codec,
 				if (err < 0)
 					return err;
 			}
-
+			idx++;
 		} else {
-			const char *name = chname[i];
+			const char *name = chname[idx];
 			/* if it's a single DAC, assign a better name */
 			if (!i && is_unique_dac(spec, nid)) {
 				switch (cfg->line_out_type) {
@@ -3153,6 +3154,10 @@ static int stac92xx_auto_create_multi_out_ctls(struct hda_codec *codec,
 					break;
 				}
 			}
+			if (!i && spec->hp_mixer)
+				name = "Headphone";
+			else
+				idx++;
 			err = create_controls(codec, name, nid, 3);
 			if (err < 0)
 				return err;
@@ -4894,6 +4899,12 @@ again:
 		break;
 	}
 
+	switch (spec->board_config) {
+	case STAC_DELL_S14:
+		spec->hp_mixer = 1;
+		break;
+	}
+
 	err = stac92xx_parse_auto_config(codec, 0x1d, 0);
 	if (!err) {
 		if (spec->board_config < 0) {
-- 
1.5.6.3



More information about the Alsa-devel mailing list