Commit 4528eb19 authored by Takashi Iwai's avatar Takashi Iwai

ALSA: hda - Fix silent output on Toshiba Satellite L40

Toshiba Satellite L40 with AD1986A codec requires the EAPD of NID 0x1b
to be constantly on, otherwise the output doesn't work.
Unlike most of other AD1986A machines, EAPD is correctly implemented
in HD-audio manner (that is, bit set = amp on), so we need to clear
the inv_eapd flag in the fixup, too.

Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=67481
Cc: <stable@vger.kernel.org> [v3.11+]
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 4fa71c15
...@@ -244,6 +244,19 @@ static void ad_fixup_inv_jack_detect(struct hda_codec *codec, ...@@ -244,6 +244,19 @@ static void ad_fixup_inv_jack_detect(struct hda_codec *codec,
} }
} }
/* Toshiba Satellite L40 implements EAPD in a standard way unlike others */
static void ad1986a_fixup_eapd(struct hda_codec *codec,
const struct hda_fixup *fix, int action)
{
struct ad198x_spec *spec = codec->spec;
if (action == HDA_FIXUP_ACT_PRE_PROBE) {
codec->inv_eapd = 0;
spec->gen.keep_eapd_on = 1;
spec->eapd_nid = 0x1b;
}
}
enum { enum {
AD1986A_FIXUP_INV_JACK_DETECT, AD1986A_FIXUP_INV_JACK_DETECT,
AD1986A_FIXUP_ULTRA, AD1986A_FIXUP_ULTRA,
...@@ -251,6 +264,7 @@ enum { ...@@ -251,6 +264,7 @@ enum {
AD1986A_FIXUP_3STACK, AD1986A_FIXUP_3STACK,
AD1986A_FIXUP_LAPTOP, AD1986A_FIXUP_LAPTOP,
AD1986A_FIXUP_LAPTOP_IMIC, AD1986A_FIXUP_LAPTOP_IMIC,
AD1986A_FIXUP_EAPD,
}; };
static const struct hda_fixup ad1986a_fixups[] = { static const struct hda_fixup ad1986a_fixups[] = {
...@@ -311,6 +325,10 @@ static const struct hda_fixup ad1986a_fixups[] = { ...@@ -311,6 +325,10 @@ static const struct hda_fixup ad1986a_fixups[] = {
.chained_before = 1, .chained_before = 1,
.chain_id = AD1986A_FIXUP_LAPTOP, .chain_id = AD1986A_FIXUP_LAPTOP,
}, },
[AD1986A_FIXUP_EAPD] = {
.type = HDA_FIXUP_FUNC,
.v.func = ad1986a_fixup_eapd,
},
}; };
static const struct snd_pci_quirk ad1986a_fixup_tbl[] = { static const struct snd_pci_quirk ad1986a_fixup_tbl[] = {
...@@ -318,6 +336,7 @@ static const struct snd_pci_quirk ad1986a_fixup_tbl[] = { ...@@ -318,6 +336,7 @@ static const struct snd_pci_quirk ad1986a_fixup_tbl[] = {
SND_PCI_QUIRK_MASK(0x1043, 0xff00, 0x8100, "ASUS P5", AD1986A_FIXUP_3STACK), SND_PCI_QUIRK_MASK(0x1043, 0xff00, 0x8100, "ASUS P5", AD1986A_FIXUP_3STACK),
SND_PCI_QUIRK_MASK(0x1043, 0xff00, 0x8200, "ASUS M2", AD1986A_FIXUP_3STACK), SND_PCI_QUIRK_MASK(0x1043, 0xff00, 0x8200, "ASUS M2", AD1986A_FIXUP_3STACK),
SND_PCI_QUIRK(0x10de, 0xcb84, "ASUS A8N-VM", AD1986A_FIXUP_3STACK), SND_PCI_QUIRK(0x10de, 0xcb84, "ASUS A8N-VM", AD1986A_FIXUP_3STACK),
SND_PCI_QUIRK(0x1179, 0xff40, "Toshiba Satellite L40", AD1986A_FIXUP_EAPD),
SND_PCI_QUIRK(0x144d, 0xc01e, "FSC V2060", AD1986A_FIXUP_LAPTOP), SND_PCI_QUIRK(0x144d, 0xc01e, "FSC V2060", AD1986A_FIXUP_LAPTOP),
SND_PCI_QUIRK_MASK(0x144d, 0xff00, 0xc000, "Samsung", AD1986A_FIXUP_SAMSUNG), SND_PCI_QUIRK_MASK(0x144d, 0xff00, 0xc000, "Samsung", AD1986A_FIXUP_SAMSUNG),
SND_PCI_QUIRK(0x144d, 0xc027, "Samsung Q1", AD1986A_FIXUP_ULTRA), SND_PCI_QUIRK(0x144d, 0xc027, "Samsung Q1", AD1986A_FIXUP_ULTRA),
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment