aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2012-02-13 05:56:25 -0500
committerTakashi Iwai <tiwai@suse.de>2012-02-13 06:07:40 -0500
commite652f4c861fb7f1f59ff0828db0d85578471932d (patch)
tree7337ba2be67e0a5dec04643b48411afca288d37d
parent71b1e9e43d5199f57c109e20c0f4dffc5c048130 (diff)
ALSA: hda - Suppress auto-mute feature on some machines with ALC861
A few machines with ALC861 & co are reported not to work properly with the auto-mute feature in software. The auto-mute feature is implemented in the hardware level, and the jack-detection never works with them. Also, rename the fixup index as ALC861_FIXUP_* to follow the standard. Signed-off-by: Takashi Iwai <tiwai@suse.de>
-rw-r--r--sound/pci/hda/patch_realtek.c38
1 files changed, 30 insertions, 8 deletions
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index 4a2a49fd92a..c6305984816 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -5563,8 +5563,10 @@ static const struct hda_amp_list alc861_loopbacks[] = {
5563 5563
5564/* Pin config fixes */ 5564/* Pin config fixes */
5565enum { 5565enum {
5566 PINFIX_FSC_AMILO_PI1505, 5566 ALC861_FIXUP_FSC_AMILO_PI1505,
5567 PINFIX_ASUS_A6RP, 5567 ALC861_FIXUP_AMP_VREF_0F,
5568 ALC861_FIXUP_NO_JACK_DETECT,
5569 ALC861_FIXUP_ASUS_A6RP,
5568}; 5570};
5569 5571
5570/* On some laptops, VREF of pin 0x0f is abused for controlling the main amp */ 5572/* On some laptops, VREF of pin 0x0f is abused for controlling the main amp */
@@ -5586,8 +5588,16 @@ static void alc861_fixup_asus_amp_vref_0f(struct hda_codec *codec,
5586 spec->keep_vref_in_automute = 1; 5588 spec->keep_vref_in_automute = 1;
5587} 5589}
5588 5590
5591/* suppress the jack-detection */
5592static void alc_fixup_no_jack_detect(struct hda_codec *codec,
5593 const struct alc_fixup *fix, int action)
5594{
5595 if (action == ALC_FIXUP_ACT_PRE_PROBE)
5596 codec->no_jack_detect = 1;
5597}
5598
5589static const struct alc_fixup alc861_fixups[] = { 5599static const struct alc_fixup alc861_fixups[] = {
5590 [PINFIX_FSC_AMILO_PI1505] = { 5600 [ALC861_FIXUP_FSC_AMILO_PI1505] = {
5591 .type = ALC_FIXUP_PINS, 5601 .type = ALC_FIXUP_PINS,
5592 .v.pins = (const struct alc_pincfg[]) { 5602 .v.pins = (const struct alc_pincfg[]) {
5593 { 0x0b, 0x0221101f }, /* HP */ 5603 { 0x0b, 0x0221101f }, /* HP */
@@ -5595,17 +5605,29 @@ static const struct alc_fixup alc861_fixups[] = {
5595 { } 5605 { }
5596 } 5606 }
5597 }, 5607 },
5598 [PINFIX_ASUS_A6RP] = { 5608 [ALC861_FIXUP_AMP_VREF_0F] = {
5599 .type = ALC_FIXUP_FUNC, 5609 .type = ALC_FIXUP_FUNC,
5600 .v.func = alc861_fixup_asus_amp_vref_0f, 5610 .v.func = alc861_fixup_asus_amp_vref_0f,
5601 }, 5611 },
5612 [ALC861_FIXUP_NO_JACK_DETECT] = {
5613 .type = ALC_FIXUP_FUNC,
5614 .v.func = alc_fixup_no_jack_detect,
5615 },
5616 [ALC861_FIXUP_ASUS_A6RP] = {
5617 .type = ALC_FIXUP_FUNC,
5618 .v.func = alc861_fixup_asus_amp_vref_0f,
5619 .chained = true,
5620 .chain_id = ALC861_FIXUP_NO_JACK_DETECT,
5621 }
5602}; 5622};
5603 5623
5604static const struct snd_pci_quirk alc861_fixup_tbl[] = { 5624static const struct snd_pci_quirk alc861_fixup_tbl[] = {
5605 SND_PCI_QUIRK_VENDOR(0x1043, "ASUS laptop", PINFIX_ASUS_A6RP), 5625 SND_PCI_QUIRK(0x1043, 0x1393, "ASUS A6Rp", ALC861_FIXUP_ASUS_A6RP),
5606 SND_PCI_QUIRK(0x1584, 0x0000, "Uniwill ECS M31EI", PINFIX_ASUS_A6RP), 5626 SND_PCI_QUIRK_VENDOR(0x1043, "ASUS laptop", ALC861_FIXUP_AMP_VREF_0F),
5607 SND_PCI_QUIRK(0x1584, 0x2b01, "Haier W18", PINFIX_ASUS_A6RP), 5627 SND_PCI_QUIRK(0x1462, 0x7254, "HP DX2200", ALC861_FIXUP_NO_JACK_DETECT),
5608 SND_PCI_QUIRK(0x1734, 0x10c7, "FSC Amilo Pi1505", PINFIX_FSC_AMILO_PI1505), 5628 SND_PCI_QUIRK(0x1584, 0x2b01, "Haier W18", ALC861_FIXUP_AMP_VREF_0F),
5629 SND_PCI_QUIRK(0x1584, 0x0000, "Uniwill ECS M31EI", ALC861_FIXUP_AMP_VREF_0F),
5630 SND_PCI_QUIRK(0x1734, 0x10c7, "FSC Amilo Pi1505", ALC861_FIXUP_FSC_AMILO_PI1505),
5609 {} 5631 {}
5610}; 5632};
5611 5633