Ok, so managed to get this resolved. There's an embarassingly easy
solution.

On boot, at the "Lenovo" splash screen - quickly disable FnLock and then
press the mute button. The mute light on the keyboard will then go out
and remain unlit.

Now, even on the -current kernel with no changes, audio works via the
speakers. Headphones also work as expected.

I have no idea why this worked as I tried setting every
AZ_QRK_GPIO_UNMUTE_* bit I could find. The microphone still doesn't
work, but hey - we're improving.

I think we'll still need to add the identifier to azalia_codec to
support Thinkpad docks etc, so I'll keep working on that.


Ashton Fagg <[email protected]> writes:

> Following up here - Brad Smith (cc'ed) suggested a patch off-list to
> register ALC257 as part of the Azalia codecs.
>
> I applied this patch, and susequently it did not work. I did some
> resarch into how Linux's ALSA handles this chip, and it seems that it
> treats it the same as an ALC 269.
>
> The suggested patch comprises of:
>
> --- azalia_codec.c.orig       Tue Oct 20 20:26:20 2020
> +++ azalia_codec.c    Tue Oct 20 20:02:58 2020
> @@ -83,6 +83,10 @@
>               this->name = "Realtek ALC221";
>               this->qrks |= AZ_QRK_WID_CDIN_1C | AZ_QRK_WID_BEEP_1D;
>               break;
> +    case 0x10ec0257:
> +             this->name = "Realtek ALC257";
> +       this->qrks |= AZ_QRK_WID_CDIN_1C | AZ_QRK_WID_BEEP_1D;
> +             break;
>       case 0x10ec0260:
>               this->name = "Realtek ALC260";
>               if (this->subid == 0x008f1025)
>
>
> This configures the device in the same way as the ALC269 further down in
> the same driver.
>
> I compiled my kernel with AZALIA_DEBUG enabled, and it now appears that
> the codec gets attached - but alas, still no sound through the speakers.
>
> My suspicion is that we need to set one of the AZ_QRK_GPIO_UNMUTE_*
> flags, but I'm not familiar with this code and I can't quite interpret
> the output properly yet.
>
> I also tried the variation where we simply don't set any of the quirk
> flags - same result.
>
> Any further ideas greatly appreciated.
>
> AZALIA_DEBUG output from kernel with patch applied:
>
> azalia0 at pci6 dev 0 function 1 "ATI Renoir HD Audio" rev 0x00: msi
> azalia_reset: resetting
> azalia_reset: reset counter = 5000
> azalia_reset: reset counter = 5000
> azalia0: host: High Definition Audio rev. 1.0
> azalia0: host: 4 output, 0 input, and 0 bidi streams
> azalia0: found a codec at #0
> azalia_init_corb: CORB allocation succeeded.
> azalia_init_corb: CORBWP=0; size=256
> azalia_init_rirb: RIRB allocation succeeded.
> azalia_init_rirb: RIRBRP=0, size=256
> azalia0: codec[0] vid 0x1002aa01, subid 0x508217aa, rev. 7.0, HDA version 1.0
> azalia0: nidstart=1 #functions=1
> azalia_codec_init: FTYPE result = 0x00000001
> azalia_codec_init: There are 12 widgets in the audio function.
>       encodings=1<PCM>
>       PCM formats=20070<16bit,48kHz,44.1kHz,32kHz>
>       inamp: mute=0 size=0 steps=0 offset=0
>       outamp: mute=0 size=0 steps=0 offset=0
>       gpio: wake=0 unsol=0 gpis=0 gpos=0 gpios=0
> azalia0: dac02 wcap=221<DIGITAL,STRIPE,STEREO>
> azalia0: unknown03 wcap=400381<DIGITAL,CONNLIST,UNSOL,STEREO>
>       cap=94<OUTPUT,PRESENCE>
>       [15/00] color=unknown device=digital-out conn=jack conntype=digital
>       location=spec1 chassis=internal special=hdmi
>       connections=0x2; selected=0x2
> azalia0: dac04 wcap=221<DIGITAL,STRIPE,STEREO>
> azalia0: unknown05 wcap=400381<DIGITAL,CONNLIST,UNSOL,STEREO>
>       cap=94<OUTPUT,PRESENCE>
>       [15/00] color=unknown device=digital-out conn=jack conntype=digital
>       location=spec1 chassis=internal special=hdmi
>       connections=0x4; selected=0x4
> azalia0: dac06 wcap=221<DIGITAL,STRIPE,STEREO>
> azalia0: unknown07 wcap=400381<DIGITAL,CONNLIST,UNSOL,STEREO>
>       cap=94<OUTPUT,PRESENCE>
>       [15/00] color=unknown device=digital-out conn=jack conntype=digital
>       location=spec1 chassis=internal special=hdmi
>       connections=0x6; selected=0x6
> azalia0: dac08 wcap=221<DIGITAL,STRIPE,STEREO>
> azalia0: unknown09 wcap=400381<DIGITAL,CONNLIST,UNSOL,STEREO>
>       cap=94<OUTPUT,PRESENCE>
>       [15/00] color=unknown device=digital-out conn=none conntype=digital
>       location=spec1 chassis=internal special=hdmi
>       connections=0x8; selected=0x8
> azalia0: dac0a wcap=221<DIGITAL,STRIPE,STEREO>
> azalia0: unknown0b wcap=400381<DIGITAL,CONNLIST,UNSOL,STEREO>
>       cap=94<OUTPUT,PRESENCE>
>       [15/00] color=unknown device=digital-out conn=none conntype=digital
>       location=spec1 chassis=internal special=hdmi
>       connections=0xa; selected=0xa
> azalia0: dac0c wcap=221<DIGITAL,STRIPE,STEREO>
> azalia0: unknown0d wcap=400381<DIGITAL,CONNLIST,UNSOL,STEREO>
>       cap=94<OUTPUT,PRESENCE>
>       [15/00] color=unknown device=digital-out conn=none conntype=digital
>       location=spec1 chassis=internal special=hdmi
>       connections=0xc; selected=0xc
> azalia_codec_sort_pins: analog out pins:
> azalia_codec_sort_pins: digital out pins: 0x03->0x02 0x05->0x04 0x07->0x06
> azalia_codec_sort_pins: analog in pins:
> azalia_codec_sort_pins: digital in pins:
> azalia0: dacgroup[0]: 02 04 06
> azalia0: no supported codecs
> azalia_pci_detach
> azalia_pci_detach: delete streams
> azalia_pci_detach: delete codecs
> azalia_pci_detach: delete CORB and RIRB
> azalia_pci_detach: disable interrupts
> azalia_pci_detach: clear interrupts
> azalia_pci_detach: delete PCI resources
> ccp0 at pci6 dev 0 function 2 "AMD 17h/1xh Crypto" rev 0x00
> xhci1 at pci6 dev 0 function 3 "AMD 17h/6xh xHCI" rev 0x00: msi, xHCI 1.10
> usb1 at xhci1: USB revision 3.0
> uhub1 at usb1 configuration 1 interface 0 "AMD xHCI root hub" rev 3.00/1.00 
> addr 1
> xhci2 at pci6 dev 0 function 4 "AMD 17h/6xh xHCI" rev 0x00: msi, xHCI 1.10
> usb2 at xhci2: USB revision 3.0
> uhub2 at usb2 configuration 1 interface 0 "AMD xHCI root hub" rev 3.00/1.00 
> addr 1
> "AMD 17h/1xh I2S Audio" rev 0x01 at pci6 dev 0 function 5 not configured
> azalia1 at pci6 dev 0 function 6 "AMD 17h/1xh HD Audio" rev 0x00: apic 33 int 
> 12
> azalia_reset: resetting
> azalia_reset: reset counter = 5000
> azalia_reset: reset counter = 4992
> azalia1: host: High Definition Audio rev. 1.0
> azalia1: host: 4 output, 4 input, and 0 bidi streams
> azalia1: found a codec at #0
> azalia_init_corb: CORB allocation succeeded.
> azalia_init_corb: CORBWP=0; size=256
> azalia_init_rirb: RIRB allocation succeeded.
> azalia_init_rirb: RIRBRP=0, size=256
> azalia1: codec[0] vid 0x10ec0257, subid 0x508217aa, rev. 0.1, HDA version 1.0
> azalia1: nidstart=1 #functions=1
> azalia_codec_init: FTYPE result = 0x00000101
> azalia_codec_init: There are 35 widgets in the audio function.
>       encodings=1<PCM>
>       PCM formats=e0560<24bit,20bit,16bit,192kHz,96kHz,48kHz,44.1kHz>
>       inamp: mute=0 size=0 steps=0 offset=0
>       outamp: mute=0 size=0 steps=0 offset=0
>       gpio: wake=0 unsol=1 gpis=0 gpos=0 gpios=3
> azalia1: dac02 wcap=41d<POWER,FORMATOV,AMPOV,OUTAMP,STEREO>
>       encodings=1<PCM>
>       PCM formats=e0060<24bit,20bit,16bit,48kHz,44.1kHz>
>       outamp: mute=0 size=2 steps=87 offset=87
> azalia1: dac03 wcap=41d<POWER,FORMATOV,AMPOV,OUTAMP,STEREO>
>       encodings=1<PCM>
>       PCM formats=e0060<24bit,20bit,16bit,48kHz,44.1kHz>
>       outamp: mute=0 size=2 steps=87 offset=87
> azalia1: vendor04 wcap=f00000
> azalia1: vendor05 wcap=f00000
> azalia1: dac06 wcap=611<POWER,DIGITAL,FORMATOV,STEREO>
>       encodings=1<PCM>
>       PCM formats=e05e0<24bit,20bit,16bit,192kHz,96kHz,88.2kHz,48kHz,44.1kHz>
> azalia1: adc07 wcap=10051b<POWER,CONNLIST,FORMATOV,AMPOV,INAMP,STEREO>
>       encodings=1<PCM>
>       PCM formats=e0560<24bit,20bit,16bit,192kHz,96kHz,48kHz,44.1kHz>
>       inamp: mute=1 size=2 steps=63 offset=23
>       connections=0x24; selected=0x24
> azalia1: adc08 wcap=10051b<POWER,CONNLIST,FORMATOV,AMPOV,INAMP,STEREO>
>       encodings=1<PCM>
>       PCM formats=e0560<24bit,20bit,16bit,192kHz,96kHz,48kHz,44.1kHz>
>       inamp: mute=1 size=2 steps=63 offset=23
>       connections=0x23; selected=0x23
> azalia1: adc09 wcap=10051b<POWER,CONNLIST,FORMATOV,AMPOV,INAMP,STEREO>
>       encodings=1<PCM>
>       PCM formats=e0560<24bit,20bit,16bit,192kHz,96kHz,48kHz,44.1kHz>
>       inamp: mute=1 size=2 steps=63 offset=23
>       connections=0x22; selected=0x22
> azalia1: vendor0a wcap=f00000
> azalia1: vendor0b wcap=f00000
> azalia1: vendor0c wcap=f00000
> azalia1: vendor0d wcap=f00000
> azalia1: vendor0e wcap=f00000
> azalia1: vendor0f wcap=f00000
> azalia1: vendor10 wcap=f00000
> azalia1: vendor11 wcap=f00000
> azalia1: black12 wcap=40040b<POWER,AMPOV,INAMP,STEREO>
>       cap=20<INPUT>
>       [15/00] color=black device=spkr conn=none conntype=1/8
>       location=rear chassis=external special=none
>       inamp: mute=0 size=39 steps=3 offset=0
> azalia1: black13 wcap=40040b<POWER,AMPOV,INAMP,STEREO>
>       cap=20<INPUT>
>       [15/00] color=black device=spkr conn=none conntype=1/8
>       location=rear chassis=external special=none
>       inamp: mute=0 size=39 steps=3 offset=0
> azalia1: unknown14 wcap=40058d<POWER,CONNLIST,UNSOL,AMPOV,OUTAMP,STEREO>
>       cap=10014<EAPD,OUTPUT,PRESENCE>
>       [01/00] color=unknown device=spkr conn=fixed conntype=analog
>       location=n/a chassis=internal special=none
>       outamp: mute=1 size=0 steps=0 offset=0
>       connections=0x2; selected=0x2
> azalia1: vendor15 wcap=f00000
> azalia1: vendor16 wcap=f00000
> azalia1: vendor17 wcap=f00000
> azalia1: black18 wcap=40048b<POWER,UNSOL,AMPOV,INAMP,STEREO>
>       cap=3724<VREF100,VREF80,VREFGND,VREF50,VREFHIZ,INPUT,PRESENCE>
>       [15/00] color=black device=spkr conn=none conntype=1/8
>       location=rear chassis=external special=none
>       inamp: mute=0 size=39 steps=3 offset=0
> azalia1: black19 wcap=40048b<POWER,UNSOL,AMPOV,INAMP,STEREO>
>       cap=3724<VREF100,VREF80,VREFGND,VREF50,VREFHIZ,INPUT,PRESENCE>
>       [03/00] color=black device=mic conn=jack conntype=1/8
>       location=right chassis=external special=none
>       inamp: mute=0 size=39 steps=3 offset=0
> azalia1: black1a wcap=40048b<POWER,UNSOL,AMPOV,INAMP,STEREO>
>       cap=3724<VREF100,VREF80,VREFGND,VREF50,VREFHIZ,INPUT,PRESENCE>
>       [15/00] color=black device=spkr conn=none conntype=1/8
>       location=rear chassis=external special=none
>       inamp: mute=0 size=39 steps=3 offset=0
> azalia1: black1b wcap=40058f<POWER,CONNLIST,UNSOL,AMPOV,OUTAMP,INAMP,STEREO>
>       
> cap=13734<EAPD,VREF100,VREF80,VREFGND,VREF50,VREFHIZ,INPUT,OUTPUT,PRESENCE>
>       [15/00] color=black device=spkr conn=none conntype=1/8
>       location=rear chassis=external special=none
>       inamp: mute=0 size=39 steps=3 offset=0
>       outamp: mute=1 size=0 steps=0 offset=0
>       connections=0x2,0x3; selected=0x2
> azalia1: vendor1c wcap=f00000
> azalia1: black1d wcap=400400<POWER>
>       cap=20<INPUT>
>       [15/00] color=black device=spkr conn=none conntype=1/8
>       location=rear chassis=external special=none
> azalia1: black1e wcap=400781<POWER,DIGITAL,CONNLIST,UNSOL,STEREO>
>       cap=14<OUTPUT,PRESENCE>
>       [15/00] color=black device=spkr conn=none conntype=1/8
>       location=rear chassis=external special=none
>       connections=0x6; selected=0x6
> azalia1: vendor1f wcap=f00000
> azalia1: vendor20 wcap=f00040<PROC>
> azalia1: black21 wcap=40058d<POWER,CONNLIST,UNSOL,AMPOV,OUTAMP,STEREO>
>       cap=1001c<EAPD,OUTPUT,HEADPHONE,PRESENCE>
>       [02/00] color=black device=hp conn=jack conntype=1/8
>       location=right chassis=external special=none
>       outamp: mute=1 size=0 steps=0 offset=0
>       connections=0x2,0x3; selected=0x2
> azalia1: mix22 wcap=20010b<CONNLIST,AMPOV,INAMP,STEREO>
>       inamp: mute=1 size=0 steps=0 offset=0
>       connections=0x18,0x19,0x1a,0x1b,0x1d,0x13; selected=0x18
> azalia1: mix23 wcap=20010b<CONNLIST,AMPOV,INAMP,STEREO>
>       inamp: mute=1 size=0 steps=0 offset=0
>       connections=0x18,0x19,0x1a,0x1b,0x1d,0x12; selected=0x18
> azalia1: sel24 wcap=300101<CONNLIST,STEREO>
>       connections=0x12,0x13; selected=0x12
> azalia_codec_sort_pins: analog out pins: 0x21->0x02
> azalia_codec_sort_pins: digital out pins:
> azalia_codec_sort_pins: analog in pins: 0x19->0x08
> azalia_codec_sort_pins: digital in pins:
> azalia1: dacgroup[0]: 03 02
> azalia1: adcgroup[0]: 08 09
> azalia1: codecs: Realtek ALC257

Reply via email to