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
