diff options
author | Takashi Iwai <tiwai@suse.de> | 2009-10-11 11:38:29 -0400 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2009-10-13 09:29:34 -0400 |
commit | 54930531a00af5a1c33361a02e67dd1802110465 (patch) | |
tree | d6e4adeb2038a0eba0129cd770b18e72d6465ebd /sound | |
parent | 2d9c648295d7bc376305337d29f540a5e411f632 (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.c | 17 |
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 | ||
919 | static 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 | |||
918 | static struct hda_verb stac9205_core_init[] = { | 927 | static 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 | ||
2004 | static const char *stac927x_models[STAC_927X_MODELS] = { | 2014 | static 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 | ||
2015 | static struct snd_pci_quirk stac927x_cfg_tbl[] = { | 2026 | static 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; |