[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