[alsa-devel] snd-hda-intel with ALC880 on a ASUS W5A since patch 67b6ec3196da235317ff1b9474f17379b78f3294
nb
nb at dagami.org
Wed Nov 6 22:45:41 CET 2013
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
More information about the Alsa-devel
mailing list