At Tue, 05 Nov 2013 21:49:19 +0100, nb wrote:
Looking at alsa-info.sh outputs, all pins have invalid configurations (0x0). It means BIOS doesn't set up pins at all properly, thus you have to define the pin configurations manually.
Im not surprised, the laptop is 8 years old. But it still works perfectly
For that, we need to identify which pin corresponds to which I/O. The first thing to know is: what I/Os does your machine have? List up all I/Os, e.g. a green headphone output at front side, a red mic jack at left side, an internal mic, a built-in speaker, etc.
I'm not sure this is what you are asking for. Trying to draw it.
+--------+ | | | *| <- internal mic (it's a hole) | *| <- button for muting internal mic | | | | internal speaker -> | * * | <- internal speaker ---------- / / / / <- jack 3.5 (headphone) black / / <- jack 3.5 (mic) black /_________/ <- volume button (black)
There is also a s-video connector at the rear of the dock
The jacks are usually detectable, and hda-jack-retask or hda_analyzer would be your help. See Documentation/sound/alsa/HD-Audio.txt.
I'm not comfortable with this. I've tried to do the best, but I must admit that I don't understand really what it does.
But the fact is that after reading many docs and doing the following, it worked:
- run hda-jack-retask, select "Headphone" for pin ID 0x14, then quit
- run alsamixer, choose via F6 "0 HDA Intel" card, unmute every control,
then quit
- run hda_analyser with the alsa-info output of the non working kernel,
and for NODE 0x14 PIN check "OUT" in widget control, and uncheck "IN" and "HP"
After that headphone output and HP worked.
I know that saying this I'm not clear at all, but I don't understand what's happening.
I hope this will "talk" more to you.
OK. I digged the codec archive and found that ASUS W6A has a sane BIOS setup. So, we can likely take over it.
Below is an untested patch. Give it a try.
Takashi
--- diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index 215db601267d..4c144a0d04d7 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c @@ -1045,6 +1045,7 @@ enum { ALC880_FIXUP_UNIWILL, ALC880_FIXUP_UNIWILL_DIG, ALC880_FIXUP_Z71V, + ALC880_FIXUP_ASUS_W5A, ALC880_FIXUP_3ST_BASE, ALC880_FIXUP_3ST, ALC880_FIXUP_3ST_DIG, @@ -1215,6 +1216,26 @@ static const struct hda_fixup alc880_fixups[] = { { } } }, + [ALC880_FIXUP_ASUS_W5A] = { + .type = HDA_FIXUP_PINS, + .v.pins = (const struct hda_pintbl[]) { + /* set up the whole pins as BIOS is utterly broken */ + { 0x14, 0x0121411f }, /* HP */ + { 0x15, 0x411111f0 }, /* N/A */ + { 0x16, 0x411111f0 }, /* N/A */ + { 0x17, 0x411111f0 }, /* N/A */ + { 0x18, 0x411111f0 }, /* N/A */ + { 0x19, 0x01a19920 }, /* mic-in */ + { 0x1a, 0x411111f0 }, /* N/A */ + { 0x1b, 0xb7831122 }, /* int mic */ + { 0x1c, 0x411111f0 }, /* N/A */ + { 0x1d, 0x411111f0 }, /* N/A */ + { 0x1e, 0xb743111e }, /* SPDIF out */ + { } + }, + .chained = true, + .chain_id = ALC880_FIXUP_GPIO1, + }, [ALC880_FIXUP_3ST_BASE] = { .type = HDA_FIXUP_PINS, .v.pins = (const struct hda_pintbl[]) { @@ -1336,6 +1357,7 @@ static const struct hda_fixup alc880_fixups[] = {
static const struct snd_pci_quirk alc880_fixup_tbl[] = { SND_PCI_QUIRK(0x1019, 0x0f69, "Coeus G610P", ALC880_FIXUP_W810), + SND_PCI_QUIRK(0x1043, 0x10c3, "ASUS W5A", ALC880_FIXUP_ASUS_W5A), SND_PCI_QUIRK(0x1043, 0x1964, "ASUS Z71V", ALC880_FIXUP_Z71V), SND_PCI_QUIRK_VENDOR(0x1043, "ASUS", ALC880_FIXUP_GPIO1), SND_PCI_QUIRK(0x1558, 0x5401, "Clevo GPIO2", ALC880_FIXUP_GPIO2),