aboutsummaryrefslogtreecommitdiffstats
path: root/sound
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2009-10-11 11:38:29 -0400
committerTakashi Iwai <tiwai@suse.de>2009-10-13 09:29:34 -0400
commit54930531a00af5a1c33361a02e67dd1802110465 (patch)
treed6e4adeb2038a0eba0129cd770b18e72d6465ebd /sound
parent2d9c648295d7bc376305337d29f540a5e411f632 (diff)
ALSA: hda - Fix mute sound with STAC9227/9228 codecs
On FSC laptops, the sound gets muted gradually when the volume is chnaged. This is due to the wrong volume-knob widget setup. The delta bit (bit 7) shouldn't be set for these devices. This patch adds a new quirk to set the value 0x7f to the widget 0x24 instead of 0xff. Reference: Novell bnc#546006 http://bugzilla.novell.com/show_bug.cgi?id=546006 Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound')
-rw-r--r--sound/pci/hda/patch_sigmatel.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
index a9b26828a651..75736827425d 100644
--- a/sound/pci/hda/patch_sigmatel.c
+++ b/sound/pci/hda/patch_sigmatel.c
@@ -158,6 +158,7 @@ enum {
158 STAC_D965_5ST_NO_FP, 158 STAC_D965_5ST_NO_FP,
159 STAC_DELL_3ST, 159 STAC_DELL_3ST,
160 STAC_DELL_BIOS, 160 STAC_DELL_BIOS,
161 STAC_927X_VOLKNOB,
161 STAC_927X_MODELS 162 STAC_927X_MODELS
162}; 163};
163 164
@@ -915,6 +916,14 @@ static struct hda_verb stac927x_core_init[] = {
915 {} 916 {}
916}; 917};
917 918
919static struct hda_verb stac927x_volknob_core_init[] = {
920 /* don't set delta bit */
921 {0x24, AC_VERB_SET_VOLUME_KNOB_CONTROL, 0x7f},
922 /* enable analog pc beep path */
923 {0x01, AC_VERB_SET_DIGI_CONVERT_2, 1 << 5},
924 {}
925};
926
918static struct hda_verb stac9205_core_init[] = { 927static struct hda_verb stac9205_core_init[] = {
919 /* set master volume and direct control */ 928 /* set master volume and direct control */
920 { 0x24, AC_VERB_SET_VOLUME_KNOB_CONTROL, 0xff}, 929 { 0x24, AC_VERB_SET_VOLUME_KNOB_CONTROL, 0xff},
@@ -1999,6 +2008,7 @@ static unsigned int *stac927x_brd_tbl[STAC_927X_MODELS] = {
1999 [STAC_D965_5ST_NO_FP] = d965_5st_no_fp_pin_configs, 2008 [STAC_D965_5ST_NO_FP] = d965_5st_no_fp_pin_configs,
2000 [STAC_DELL_3ST] = dell_3st_pin_configs, 2009 [STAC_DELL_3ST] = dell_3st_pin_configs,
2001 [STAC_DELL_BIOS] = NULL, 2010 [STAC_DELL_BIOS] = NULL,
2011 [STAC_927X_VOLKNOB] = NULL,
2002}; 2012};
2003 2013
2004static const char *stac927x_models[STAC_927X_MODELS] = { 2014static const char *stac927x_models[STAC_927X_MODELS] = {
@@ -2010,6 +2020,7 @@ static const char *stac927x_models[STAC_927X_MODELS] = {
2010 [STAC_D965_5ST_NO_FP] = "5stack-no-fp", 2020 [STAC_D965_5ST_NO_FP] = "5stack-no-fp",
2011 [STAC_DELL_3ST] = "dell-3stack", 2021 [STAC_DELL_3ST] = "dell-3stack",
2012 [STAC_DELL_BIOS] = "dell-bios", 2022 [STAC_DELL_BIOS] = "dell-bios",
2023 [STAC_927X_VOLKNOB] = "volknob",
2013}; 2024};
2014 2025
2015static struct snd_pci_quirk stac927x_cfg_tbl[] = { 2026static struct snd_pci_quirk stac927x_cfg_tbl[] = {
@@ -2045,6 +2056,8 @@ static struct snd_pci_quirk stac927x_cfg_tbl[] = {
2045 "Intel D965", STAC_D965_5ST), 2056 "Intel D965", STAC_D965_5ST),
2046 SND_PCI_QUIRK_MASK(PCI_VENDOR_ID_INTEL, 0xff00, 0x2500, 2057 SND_PCI_QUIRK_MASK(PCI_VENDOR_ID_INTEL, 0xff00, 0x2500,
2047 "Intel D965", STAC_D965_5ST), 2058 "Intel D965", STAC_D965_5ST),
2059 /* volume-knob fixes */
2060 SND_PCI_QUIRK_VENDOR(0x10cf, "FSC", STAC_927X_VOLKNOB),
2048 {} /* terminator */ 2061 {} /* terminator */
2049}; 2062};
2050 2063
@@ -5616,6 +5629,10 @@ static int patch_stac927x(struct hda_codec *codec)
5616 spec->dmux_nids = stac927x_dmux_nids; 5629 spec->dmux_nids = stac927x_dmux_nids;
5617 spec->num_dmuxes = ARRAY_SIZE(stac927x_dmux_nids); 5630 spec->num_dmuxes = ARRAY_SIZE(stac927x_dmux_nids);
5618 break; 5631 break;
5632 case STAC_927X_VOLKNOB:
5633 spec->num_dmics = 0;
5634 spec->init = stac927x_volknob_core_init;
5635 break;
5619 default: 5636 default:
5620 spec->num_dmics = 0; 5637 spec->num_dmics = 0;
5621 spec->init = stac927x_core_init; 5638 spec->init = stac927x_core_init;