Le 06-11-2013 16:58, Takashi Iwai a écrit :
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),
Hello Takashi,
I've tried your patch and it works for the HP/headphone part, not for the microphone.
I have learned a little bit about pins and the following conf works fine: { 0x14, 0x0121411f }, /* HP */ { 0x15, 0x411111f0 }, /* N/A */ { 0x16, 0x411111f0 }, /* N/A */ { 0x17, 0x411111f0 }, /* N/A */ { 0x18, 0x90a60160 }, /* mic */ { 0x19, 0x411111f0 }, /* N/A */ { 0x1a, 0x411111f0 }, /* N/A */ { 0x1b, 0x411111f0 }, /* N/A */ { 0x1c, 0x411111f0 }, /* N/A */ { 0x1d, 0x411111f0 }, /* N/A */ { 0x1e, 0xb743111e }, /* SPDIF out */ I have only moved the mic to 0x18. And I have noticed that the same pin is used for the external mic and the internal one. The jack makes the switch. The value 0x90a60160 is from hda-jack-retask. I could not test the SPDIF pin.
I think we can say the patch is approved, and you can add it to the source.
Thank you very much for your help
I can now use fully my laptop I hope for years .
Regards
nb