All of lore.kernel.org
 help / color / mirror / Atom feed
* Re: Missing Cirrus CS35L56 firmware for Lenovo Xiaoxin Pro 14 ASP10 (SSID 17aa:3912) causes distorted/crackling audio
@ 2026-08-20  4:54 Viktor Menshin
  0 siblings, 0 replies; 3+ messages in thread
From: Viktor Menshin @ 2026-08-20  4:54 UTC (permalink / raw)
  To: alsa-devel; +Cc: tiwai

Hi,

Follow-up to my earlier report, with a correction and a partial fix.

Correction: I initially assumed a Cirrus Logic smart amp (ACPI HID
CIRQ1080) was involved and that CS35L56 firmware was missing. That was
wrong - CIRQ1080 is actually a Cirrus touch controller (touchpad), not an
audio amplifier. There is no Cirrus amp ACPI device on this system at all
(no CSC3551/CSC3556 HID present). Sorry for the noise on that front.

What I've found instead: the codec falls back to the generic "17aa:0000"
Lenovo pin fixup (no entry for SSID 17aa:3912 in patch_realtek.c), and the
ALC287 vendor-specific processing coefficients (node 0x20) are left at
generic/uninitialized defaults. The Windows Realtek driver programs a
model-specific coefficient table into this node at init that the generic
Linux fallback never applies.

To find the actual values, I used VFIO passthrough to hand the physical
HD Audio controller (0000:c2:00.6, 1022:15e3) to a Windows 10 guest
running the stock Realtek driver, logged CORB verb traffic with a patched
QEMU, and extracted the SET_COEF_INDEX / SET_PROC_COEF sequence for node
0x20 using https://github.com/ryanprescott/realtek-verb-tools
(wiki: https://github.com/ryanprescott/realtek-verb-tools/wiki/How-to-sniff-verbs-from-a-Windows-sound-driver)

Headphones - fixed. A single coefficient write completely eliminates the
crackling/distortion on the headphone output:

  hda-verb /dev/snd/hwC1D0 0x20 SET_COEF_INDEX 0x36
  hda-verb /dev/snd/hwC1D0 0x20 SET_PROC_COEF 0x77d7

I've verified this is stable across reboots and under load.

Internal speakers - not fixed. I captured a much larger coefficient table
from a speaker-only session (headphones unplugged, 255 index/value pairs
on node 0x20, representing what looks like the driver's full cold-init
pass) and replayed it via hda-verb. This does not resolve the speaker
crackling.

Attached below:
1. Confirmed-working single coefficient write for headphones
2. The larger speaker-session table I tried, included for reference even
   though it doesn't fix the issue.

System info (unchanged from prior report): Lenovo Xiaoxin Pro 14 ASP10
(83LR), AMD Ryzen AI 9 365, ALC287 codec, SSID 17aa:3912, currently
running Linux 7.1.6-arch1-1.

Thanks,
Viktor Menshin
# Confirmed working fix for headphone crackling on Lenovo Xiaoxin Pro 14 ASP10
# (SSID 17aa:3912), Realtek ALC287, node 0x20 (vendor processing coefficients)

hda-verb /dev/snd/hwC1D0 0x20 SET_COEF_INDEX 0x36
hda-verb /dev/snd/hwC1D0 0x20 SET_PROC_COEF 0x77d7

# As a kernel-style fixup:
#
# static void alc287_fixup_lenovo_xiaoxin_pro14_asp10_hp(struct hda_codec *codec,
#                                                          const struct hda_fixup *fix, int action)
# {
#         if (action != HDA_FIXUP_ACT_INIT)
#                 return;
#
#         alc_write_coef_idx(codec, 0x36, 0x77d7);
# }

--- speaker-session 255-coefficient table (does NOT fix speaker crackling) ---

#!/bin/bash
# Full init table - first occurrence of each coefficient index, from cold speaker-path start
DEV=/dev/snd/hwC1D0

hda-verb $DEV 0x20 SET_COEF_INDEX 0x0
hda-verb $DEV 0x20 SET_PROC_COEF 0x2
hda-verb $DEV 0x20 SET_COEF_INDEX 0x1
hda-verb $DEV 0x20 SET_PROC_COEF 0xaaaa
hda-verb $DEV 0x20 SET_COEF_INDEX 0x2
hda-verb $DEV 0x20 SET_PROC_COEF 0x8aaa
hda-verb $DEV 0x20 SET_COEF_INDEX 0x3
hda-verb $DEV 0x20 SET_PROC_COEF 0xf042
hda-verb $DEV 0x20 SET_COEF_INDEX 0x4
hda-verb $DEV 0x20 SET_PROC_COEF 0xaa89
hda-verb $DEV 0x20 SET_COEF_INDEX 0x5
hda-verb $DEV 0x20 SET_PROC_COEF 0x700
hda-verb $DEV 0x20 SET_COEF_INDEX 0x6
hda-verb $DEV 0x20 SET_PROC_COEF 0x6115
hda-verb $DEV 0x20 SET_COEF_INDEX 0x7
hda-verb $DEV 0x20 SET_PROC_COEF 0x200
hda-verb $DEV 0x20 SET_COEF_INDEX 0x8
hda-verb $DEV 0x20 SET_PROC_COEF 0x4a37
hda-verb $DEV 0x20 SET_COEF_INDEX 0x9
hda-verb $DEV 0x20 SET_PROC_COEF 0x8000
hda-verb $DEV 0x20 SET_COEF_INDEX 0xa
hda-verb $DEV 0x20 SET_PROC_COEF 0x7770
hda-verb $DEV 0x20 SET_COEF_INDEX 0xb
hda-verb $DEV 0x20 SET_PROC_COEF 0x7779
hda-verb $DEV 0x20 SET_COEF_INDEX 0xc
hda-verb $DEV 0x20 SET_PROC_COEF 0x816f
hda-verb $DEV 0x20 SET_COEF_INDEX 0xd
hda-verb $DEV 0x20 SET_PROC_COEF 0xa023
hda-verb $DEV 0x20 SET_COEF_INDEX 0xe
hda-verb $DEV 0x20 SET_PROC_COEF 0x65c0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xf
hda-verb $DEV 0x20 SET_PROC_COEF 0x2a2
hda-verb $DEV 0x20 SET_COEF_INDEX 0x10
hda-verb $DEV 0x20 SET_PROC_COEF 0x320
hda-verb $DEV 0x20 SET_COEF_INDEX 0x11
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x12
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x13
hda-verb $DEV 0x20 SET_PROC_COEF 0x2200
hda-verb $DEV 0x20 SET_COEF_INDEX 0x14
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x15
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x16
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x17
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x18
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x19
hda-verb $DEV 0x20 SET_PROC_COEF 0x2c91
hda-verb $DEV 0x20 SET_COEF_INDEX 0x1a
hda-verb $DEV 0x20 SET_PROC_COEF 0x8c83
hda-verb $DEV 0x20 SET_COEF_INDEX 0x1b
hda-verb $DEV 0x20 SET_PROC_COEF 0xa6b
hda-verb $DEV 0x20 SET_COEF_INDEX 0x1c
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x1d
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x1e
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x1f
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x20
hda-verb $DEV 0x20 SET_PROC_COEF 0x1000
hda-verb $DEV 0x20 SET_COEF_INDEX 0x21
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x22
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x23
hda-verb $DEV 0x20 SET_PROC_COEF 0x8804
hda-verb $DEV 0x20 SET_COEF_INDEX 0x24
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x25
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x26
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x27
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x28
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x29
hda-verb $DEV 0x20 SET_PROC_COEF 0x3000
hda-verb $DEV 0x20 SET_COEF_INDEX 0x2a
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x2b
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x2c
hda-verb $DEV 0x20 SET_PROC_COEF 0xf00
hda-verb $DEV 0x20 SET_COEF_INDEX 0x2d
hda-verb $DEV 0x20 SET_PROC_COEF 0x1f4f
hda-verb $DEV 0x20 SET_COEF_INDEX 0x2e
hda-verb $DEV 0x20 SET_PROC_COEF 0x290e
hda-verb $DEV 0x20 SET_COEF_INDEX 0x2f
hda-verb $DEV 0x20 SET_PROC_COEF 0xef57
hda-verb $DEV 0x20 SET_COEF_INDEX 0x30
hda-verb $DEV 0x20 SET_PROC_COEF 0x9007
hda-verb $DEV 0x20 SET_COEF_INDEX 0x31
hda-verb $DEV 0x20 SET_PROC_COEF 0x80c0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x32
hda-verb $DEV 0x20 SET_PROC_COEF 0x50a8
hda-verb $DEV 0x20 SET_COEF_INDEX 0x33
hda-verb $DEV 0x20 SET_PROC_COEF 0x8580
hda-verb $DEV 0x20 SET_COEF_INDEX 0x34
hda-verb $DEV 0x20 SET_PROC_COEF 0xa281
hda-verb $DEV 0x20 SET_COEF_INDEX 0x35
hda-verb $DEV 0x20 SET_PROC_COEF 0x8daa
hda-verb $DEV 0x20 SET_COEF_INDEX 0x36
hda-verb $DEV 0x20 SET_PROC_COEF 0x77d7
hda-verb $DEV 0x20 SET_COEF_INDEX 0x37
hda-verb $DEV 0x20 SET_PROC_COEF 0xfe05
hda-verb $DEV 0x20 SET_COEF_INDEX 0x38
hda-verb $DEV 0x20 SET_PROC_COEF 0x7909
hda-verb $DEV 0x20 SET_COEF_INDEX 0x39
hda-verb $DEV 0x20 SET_PROC_COEF 0x330a
hda-verb $DEV 0x20 SET_COEF_INDEX 0x3a
hda-verb $DEV 0x20 SET_PROC_COEF 0x10
hda-verb $DEV 0x20 SET_COEF_INDEX 0x3b
hda-verb $DEV 0x20 SET_PROC_COEF 0x60d9
hda-verb $DEV 0x20 SET_COEF_INDEX 0x3c
hda-verb $DEV 0x20 SET_PROC_COEF 0xf135
hda-verb $DEV 0x20 SET_COEF_INDEX 0x3d
hda-verb $DEV 0x20 SET_PROC_COEF 0xc2ba
hda-verb $DEV 0x20 SET_COEF_INDEX 0x3e
hda-verb $DEV 0x20 SET_PROC_COEF 0xa928
hda-verb $DEV 0x20 SET_COEF_INDEX 0x3f
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x40
hda-verb $DEV 0x20 SET_PROC_COEF 0x8800
hda-verb $DEV 0x20 SET_COEF_INDEX 0x41
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x42
hda-verb $DEV 0x20 SET_PROC_COEF 0x2000
hda-verb $DEV 0x20 SET_COEF_INDEX 0x43
hda-verb $DEV 0x20 SET_PROC_COEF 0x3d97
hda-verb $DEV 0x20 SET_COEF_INDEX 0x44
hda-verb $DEV 0x20 SET_PROC_COEF 0x4900
hda-verb $DEV 0x20 SET_COEF_INDEX 0x45
hda-verb $DEV 0x20 SET_PROC_COEF 0x5289
hda-verb $DEV 0x20 SET_COEF_INDEX 0x46
hda-verb $DEV 0x20 SET_PROC_COEF 0xcc4
hda-verb $DEV 0x20 SET_COEF_INDEX 0x47
hda-verb $DEV 0x20 SET_PROC_COEF 0xa47a
hda-verb $DEV 0x20 SET_COEF_INDEX 0x48
hda-verb $DEV 0x20 SET_PROC_COEF 0xd049
hda-verb $DEV 0x20 SET_COEF_INDEX 0x49
hda-verb $DEV 0x20 SET_PROC_COEF 0x49
hda-verb $DEV 0x20 SET_COEF_INDEX 0x4a
hda-verb $DEV 0x20 SET_PROC_COEF 0x2010
hda-verb $DEV 0x20 SET_COEF_INDEX 0x4b
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x4c
hda-verb $DEV 0x20 SET_PROC_COEF 0x65c
hda-verb $DEV 0x20 SET_COEF_INDEX 0x4d
hda-verb $DEV 0x20 SET_PROC_COEF 0x7fff
hda-verb $DEV 0x20 SET_COEF_INDEX 0x4e
hda-verb $DEV 0x20 SET_PROC_COEF 0x7fff
hda-verb $DEV 0x20 SET_COEF_INDEX 0x4f
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x50
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x51
hda-verb $DEV 0x20 SET_PROC_COEF 0x5f5f
hda-verb $DEV 0x20 SET_COEF_INDEX 0x52
hda-verb $DEV 0x20 SET_PROC_COEF 0x100
hda-verb $DEV 0x20 SET_COEF_INDEX 0x53
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x54
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x55
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x56
hda-verb $DEV 0x20 SET_PROC_COEF 0xfd00
hda-verb $DEV 0x20 SET_COEF_INDEX 0x57
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x58
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x59
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x5a
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x5b
hda-verb $DEV 0x20 SET_PROC_COEF 0x777
hda-verb $DEV 0x20 SET_COEF_INDEX 0x5c
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x5d
hda-verb $DEV 0x20 SET_PROC_COEF 0x6000
hda-verb $DEV 0x20 SET_COEF_INDEX 0x5e
hda-verb $DEV 0x20 SET_PROC_COEF 0x4000
hda-verb $DEV 0x20 SET_COEF_INDEX 0x5f
hda-verb $DEV 0x20 SET_PROC_COEF 0x6200
hda-verb $DEV 0x20 SET_COEF_INDEX 0x60
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x61
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x62
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x63
hda-verb $DEV 0x20 SET_PROC_COEF 0xc000
hda-verb $DEV 0x20 SET_COEF_INDEX 0x64
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x65
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x66
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x67
hda-verb $DEV 0x20 SET_PROC_COEF 0x3000
hda-verb $DEV 0x20 SET_COEF_INDEX 0x68
hda-verb $DEV 0x20 SET_PROC_COEF 0x1
hda-verb $DEV 0x20 SET_COEF_INDEX 0x69
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x6a
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x6b
hda-verb $DEV 0x20 SET_PROC_COEF 0xa394
hda-verb $DEV 0x20 SET_COEF_INDEX 0x6c
hda-verb $DEV 0x20 SET_PROC_COEF 0x7fff
hda-verb $DEV 0x20 SET_COEF_INDEX 0x6d
hda-verb $DEV 0x20 SET_PROC_COEF 0x7000
hda-verb $DEV 0x20 SET_COEF_INDEX 0x6e
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x6f
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x70
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x71
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x72
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x73
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x74
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x75
hda-verb $DEV 0x20 SET_PROC_COEF 0x4101
hda-verb $DEV 0x20 SET_COEF_INDEX 0x76
hda-verb $DEV 0x20 SET_PROC_COEF 0x8300
hda-verb $DEV 0x20 SET_COEF_INDEX 0x77
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x78
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x79
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x7a
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x7b
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x7c
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x7d
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x7e
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x7f
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x80
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x81
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x82
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x83
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x84
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x85
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x86
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x87
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x88
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x89
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x8a
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x8b
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x8c
hda-verb $DEV 0x20 SET_PROC_COEF 0xff80
hda-verb $DEV 0x20 SET_COEF_INDEX 0x8d
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x8e
hda-verb $DEV 0x20 SET_PROC_COEF 0x2
hda-verb $DEV 0x20 SET_COEF_INDEX 0x8f
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x90
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x91
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x92
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x93
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x94
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x95
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x96
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x97
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x98
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x99
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x9a
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x9b
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x9c
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x9d
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x9e
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0x9f
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xa0
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xa1
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xa2
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xa3
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xa4
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xa5
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xa6
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xa7
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xa8
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xa9
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xaa
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xab
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xac
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xad
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xae
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xaf
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xb0
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xb1
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xb2
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xb3
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xb4
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xb5
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xb6
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xb7
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xb8
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xb9
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xba
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xbb
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xbc
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xbd
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xbe
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xbf
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xc0
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xc1
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xc2
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xc3
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xc4
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xc5
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xc6
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xc7
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xc8
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xc9
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xca
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xcb
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xcc
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xcd
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xce
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xcf
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xd0
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xd1
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xd2
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xd3
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xd4
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xd5
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xd6
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xd7
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xd8
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xd9
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xda
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xdb
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xdc
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xdd
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xde
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xdf
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xe0
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xe1
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xe2
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xe3
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xe4
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xe5
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xe6
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xe7
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xe8
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xe9
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xea
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xeb
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xec
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xed
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xee
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xef
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xf0
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xf1
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xf2
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xf3
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xf4
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xf5
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xf6
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xf7
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xf8
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xf9
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xfa
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xfb
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xfc
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xfd
hda-verb $DEV 0x20 SET_PROC_COEF 0x0
hda-verb $DEV 0x20 SET_COEF_INDEX 0xfe
hda-verb $DEV 0x20 SET_PROC_COEF 0x0

^ permalink raw reply	[flat|nested] 3+ messages in thread
* Missing Cirrus CS35L56 firmware for Lenovo Xiaoxin Pro 14 ASP10 (SSID 17aa:3912) causes distorted/crackling audio
@ 2026-08-09  7:35 Viktor Menshin
  2026-08-12 10:01 ` Stuart Henderson
  0 siblings, 1 reply; 3+ messages in thread
From: Viktor Menshin @ 2026-08-09  7:35 UTC (permalink / raw)
  To: alsa-devel; +Cc: tiwai

Hi,

I'm running Linux on a Lenovo Xiaoxin Pro 14 ASP10 (83LR), an AMD Ryzen AI 9 365
(Strix Point) laptop. Audio through both the internal speakers and the
headphone jack is heavily distorted/crackling on every kernel and distro I've
tried (self-built 6.19-arch1, current 7.1.6-arch1-1 on EndeavourOS, and a
Fedora live image).

The same distortion is present on Windows before installing the Realtek
driver package, which suggests the issue is a missing/incorrect vendor
configuration rather than something purely Linux-side.

System info:
$ uname -a
Linux riper-83lr 7.1.6-arch1-1 #1 SMP PREEMPT_DYNAMIC Tue, 04 Aug 2026 11:19:27 +0000 x86_64 GNU/Linux

$ lspci -nnk | grep -iA3 audio
c2:00.1 Audio device [0403]: Advanced Micro Devices, Inc. [AMD/ATI] Radeon High Definition Audio Controller [1002:1640]
	Subsystem: Lenovo Device [17aa:3852]
	Kernel driver in use: snd_hda_intel
	Kernel modules: snd_hda_intel
--
c2:00.5 Multimedia controller [0480]: Advanced Micro Devices, Inc. [AMD] Audio Coprocessor [1022:15e2] (rev 70)
	Subsystem: Lenovo Device [17aa:38c1]
	Kernel driver in use: snd_acp_pci
	Kernel modules: snd_pci_acp3x, snd_rn_pci_acp3x, snd_pci_acp5x, snd_pci_acp6x, snd_acp_pci, snd_pci_ps, snd_sof_amd_renoir, snd_sof_amd_rembrandt, snd_sof_amd_vangogh, snd_sof_amd_acp63, snd_sof_amd_acp70
c2:00.6 Audio device [0403]: Advanced Micro Devices, Inc. [AMD] Ryzen HD Audio Controller [1022:15e3]
	Subsystem: Lenovo Device [17aa:38b2]
	Kernel driver in use: snd_hda_intel
	Kernel modules: snd_hda_intel

Codec: Realtek ALC287, Subsystem ID 17aa:3912 (reported by /proc/asound/card1/codec#0)
Amplifier: Cirrus Logic amp present via ACPI HID CIRQ1080

Relevant dmesg (fixup selection):
[    7.206943] snd_hda_codec_alc269 hdaudioC1D0: ALC287: picked fixup  for PCI SSID 17aa:0000
[    7.207280] snd_hda_codec_alc269 hdaudioC1D0: autoconfig for ALC287: line_outs=1 (0x14/0x0/0x0/0x0/0x0) type:speaker
[    7.207282] snd_hda_codec_alc269 hdaudioC1D0:    speaker_outs=0 (0x0/0x0/0x0/0x0/0x0)
[    7.207283] snd_hda_codec_alc269 hdaudioC1D0:    hp_outs=1 (0x21/0x0/0x0/0x0/0x0)
[    7.207284] snd_hda_codec_alc269 hdaudioC1D0:    inputs:
[    7.207285] snd_hda_codec_alc269 hdaudioC1D0:      Mic=0x19

The codec falls back to the generic "17aa:0000" Lenovo fixup, since there is
no specific quirk entry for SSID 17aa:3912 in patch_realtek.c.

The snd_hda_scodec_cs35l56 module is present in the kernel tree and loads
successfully when probed manually via modprobe, but produces no dmesg output
at all — no firmware-related errors and no successful init messages either.
It is not auto-loaded/bound on boot (lsmod shows nothing for cs35l56 without
manual modprobe).

Checking linux-firmware, there are many SSID-specific Cirrus CS35L56
firmware files under /usr/lib/firmware/cirrus/, including neighboring SSIDs
such as 17aa3910 and 17aa3911, but nothing for 17aa3912:

$ find /usr/lib/firmware/cirrus -iname "*17aa3912*"
(no output)

As a test, I temporarily copied the 17aa3911 firmware files
(cs35l56-b0-dsp1-misc-17aa3911-spkid0.wmfw.zst and the matching amp1/amp2
.bin.zst files) and renamed them to 17aa3912, rebuilt the initramfs, and
rebooted. This did not fix the distortion, which is expected since amp
calibration data is board/speaker-specific and not interchangeable between
models. I've since removed these test files.

I've also ruled out several other possible causes:
- hdajackretask pin overrides — no effect
- snd_hda_intel position_fix=1/2/3 — no effect
- PipeWire buffer/quantum tuning (quantum 1024/512/2048) — no effect
- Forcing S16LE format in WirePlumber to avoid resampling — no effect
- Testing with plain aplay directly against ALSA (bypassing PipeWire
  entirely, with an increased buffer/period size) — still distorted
- The distortion is present continuously during playback on both speakers
  and headphones equally, not tied to idle/wake power transitions

Given the codec pin configuration looks sane (attached below) and the amp
module is present in the kernel but never successfully probed, I believe the
missing piece is CS35L56 firmware/calibration data specific to SSID
17aa:3912 for this laptop model.

Is it possible to get Cirrus Logic firmware submitted for this SSID, or
could you point me toward the right process/contact to request it? Happy to
gather any additional diagnostics needed (full alsa-info.sh dump, acpidump,
etc).

Thanks,
Viktor Menshin

--- Full codec dump: cat /proc/asound/card1/codec#0 ---

Codec: Realtek ALC287
Address: 0
AFG Function Id: 0x1 (unsol 1)
Vendor Id: 0x10ec0287
Subsystem Id: 0x17aa3912
Revision Id: 0x100002
No Modem Function Group found
Default PCM:
    rates [0x560]: 44100 48000 96000 192000
    bits [0xe]: 16 20 24
    formats [0x1]: PCM
Default Amp-In caps: N/A
Default Amp-Out caps: N/A
State of AFG node 0x01:
  Power states:  D0 D1 D2 D3 D3cold CLKSTOP EPSS
  Power: setting=D0, actual=D0
GPIO: io=5, o=0, i=0, unsolicited=1, wake=0
  IO[0]: enable=0, dir=0, wake=0, sticky=0, data=0, unsol=0
  IO[1]: enable=0, dir=0, wake=0, sticky=0, data=0, unsol=0
  IO[2]: enable=0, dir=0, wake=0, sticky=0, data=0, unsol=0
  IO[3]: enable=0, dir=0, wake=0, sticky=0, data=0, unsol=0
  IO[4]: enable=0, dir=0, wake=0, sticky=0, data=0, unsol=0
Node 0x02 [Audio Output] wcaps 0x41d: Stereo Amp-Out
  Control: name="Speaker Playback Volume", index=0, device=0
    ControlAmp: chs=3, dir=Out, idx=0, ofs=0
  Amp-Out caps: ofs=0x57, nsteps=0x57, stepsize=0x02, mute=0
  Amp-Out vals:  [0x38 0x38]
  Converter: stream=0, channel=0
  PCM:
    rates [0x40]: 48000
    bits [0xe]: 16 20 24
    formats [0x1]: PCM
  Power states:  D0 D1 D2 D3 EPSS
  Power: setting=D0, actual=D0
Node 0x03 [Audio Output] wcaps 0x41d: Stereo Amp-Out
  Control: name="Headphone Playback Volume", index=0, device=0
    ControlAmp: chs=3, dir=Out, idx=0, ofs=0
  Device: name="ALC287 Analog", type="Audio", device=0
  Amp-Out caps: ofs=0x57, nsteps=0x57, stepsize=0x02, mute=0
  Amp-Out vals:  [0x57 0x57]
  Converter: stream=0, channel=0
  PCM:
    rates [0x40]: 48000
    bits [0xe]: 16 20 24
    formats [0x1]: PCM
  Power states:  D0 D1 D2 D3 EPSS
  Power: setting=D0, actual=D0
Node 0x04 [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x05 [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x06 [Audio Output] wcaps 0x411: Stereo
  Converter: stream=0, channel=0
  PCM:
    rates [0x40]: 48000
    bits [0xe]: 16 20 24
    formats [0x1]: PCM
  Power states:  D0 D1 D2 D3 EPSS
  Power: setting=D0, actual=D0
Node 0x07 [Audio Input] wcaps 0x10051b: Stereo Amp-In
  Amp-In caps: ofs=0x17, nsteps=0x3f, stepsize=0x02, mute=1
  Amp-In vals:  [0x97 0x97]
  Converter: stream=0, channel=0
  SDI-Select: 0
  PCM:
    rates [0x40]: 48000
    bits [0xe]: 16 20 24
    formats [0x1]: PCM
  Power states:  D0 D1 D2 D3 EPSS
  Power: setting=D0, actual=D0
  Connection: 1
     0x24
Node 0x08 [Audio Input] wcaps 0x10051b: Stereo Amp-In
  Control: name="Capture Volume", index=0, device=0
    ControlAmp: chs=3, dir=In, idx=0, ofs=0
  Control: name="Capture Switch", index=0, device=0
    ControlAmp: chs=3, dir=In, idx=0, ofs=0
  Device: name="ALC287 Analog", type="Audio", device=0
  Amp-In caps: ofs=0x17, nsteps=0x3f, stepsize=0x02, mute=1
  Amp-In vals:  [0x3f 0x3f]
  Converter: stream=0, channel=0
  SDI-Select: 0
  PCM:
    rates [0x560]: 44100 48000 96000 192000
    bits [0xe]: 16 20 24
    formats [0x1]: PCM
  Power states:  D0 D1 D2 D3 EPSS
  Power: setting=D0, actual=D0
  Connection: 1
     0x23
Node 0x09 [Audio Input] wcaps 0x10051b: Stereo Amp-In
  Amp-In caps: ofs=0x17, nsteps=0x3f, stepsize=0x02, mute=1
  Amp-In vals:  [0x97 0x97]
  Converter: stream=0, channel=0
  SDI-Select: 0
  PCM:
    rates [0x560]: 44100 48000 96000 192000
    bits [0xe]: 16 20 24
    formats [0x1]: PCM
  Power states:  D0 D1 D2 D3 EPSS
  Power: setting=D0, actual=D0
  Connection: 1
     0x22
Node 0x0a [Audio Input] wcaps 0x10051b: Stereo Amp-In
  Amp-In caps: ofs=0x17, nsteps=0x3f, stepsize=0x02, mute=1
  Amp-In vals:  [0x97 0x97]
  Converter: stream=0, channel=0
  SDI-Select: 0
  PCM:
    rates [0x40]: 48000
    bits [0xe]: 16 20 24
    formats [0x1]: PCM
  Power states:  D0 D1 D2 D3 EPSS
  Power: setting=D0, actual=D0
  Connection: 1
     0x25
Node 0x0b [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x0c [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x0d [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x0e [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x0f [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x10 [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x11 [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x12 [Pin Complex] wcaps 0x40040b: Stereo Amp-In
  Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0
  Amp-In vals:  [0x00 0x00]
  Pincap 0x00000020: IN
  Pin Default 0x411111f0: [N/A] Speaker at Ext Rear
    Conn = 1/8, Color = Black
    DefAssociation = 0xf, Sequence = 0x0
    Misc = NO_PRESENCE
  Pin-ctls: 0x00:
  Power states:  D0 D1 D2 D3 EPSS
  Power: setting=D0, actual=D0
Node 0x13 [Pin Complex] wcaps 0x40040b: Stereo Amp-In
  Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0
  Amp-In vals:  [0x00 0x00]
  Pincap 0x00000020: IN
  Pin Default 0x40000000: [N/A] Line Out at Ext N/A
    Conn = Unknown, Color = Unknown
    DefAssociation = 0x0, Sequence = 0x0
  Pin-ctls: 0x00:
  Power states:  D0 D1 D2 D3 EPSS
  Power: setting=D0, actual=D0
Node 0x14 [Pin Complex] wcaps 0x40058d: Stereo Amp-Out
  Control: name="Speaker Playback Switch", index=0, device=0
    ControlAmp: chs=3, dir=Out, idx=0, ofs=0
  Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
  Amp-Out vals:  [0x80 0x80]
  Pincap 0x00010014: OUT EAPD Detect
  EAPD 0x2: EAPD
  Pin Default 0x90170110: [Fixed] Speaker at Int N/A
    Conn = Analog, Color = Unknown
    DefAssociation = 0x1, Sequence = 0x0
    Misc = NO_PRESENCE
  Pin-ctls: 0x40: OUT
  Unsolicited: tag=00, enabled=0
  Power states:  D0 D1 D2 D3 EPSS
  Power: setting=D0, actual=D0
  Connection: 1
     0x02
Node 0x15 [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x16 [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x17 [Pin Complex] wcaps 0x40058d: Stereo Amp-Out
  Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
  Amp-Out vals:  [0x80 0x80]
  Pincap 0x0000001c: OUT HP Detect
  Pin Default 0x411111f0: [N/A] Speaker at Ext Rear
    Conn = 1/8, Color = Black
    DefAssociation = 0xf, Sequence = 0x0
    Misc = NO_PRESENCE
  Pin-ctls: 0x00:
  Unsolicited: tag=00, enabled=0
  Power states:  D0 D1 D2 D3 EPSS
  Power: setting=D0, actual=D0
  Connection: 4
     0x02* 0x03 0x06 0x08
Node 0x18 [Pin Complex] wcaps 0x40048b: Stereo Amp-In
  Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0
  Amp-In vals:  [0x00 0x00]
  Pincap 0x00000024: IN Detect
  Pin Default 0x411111f0: [N/A] Speaker at Ext Rear
    Conn = 1/8, Color = Black
    DefAssociation = 0xf, Sequence = 0x0
    Misc = NO_PRESENCE
  Pin-ctls: 0x00:
  Unsolicited: tag=00, enabled=0
  Power states:  D0 D1 D2 D3 EPSS
  Power: setting=D0, actual=D0
Node 0x19 [Pin Complex] wcaps 0x40048b: Stereo Amp-In
  Control: name="Mic Boost Volume", index=0, device=0
    ControlAmp: chs=3, dir=In, idx=0, ofs=0
  Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0
  Amp-In vals:  [0x03 0x03]
  Pincap 0x00003724: IN Detect
    Vref caps: HIZ 50 GRD 80 100
  Pin Default 0x04a11040: [Jack] Mic at Ext Right
    Conn = 1/8, Color = Black
    DefAssociation = 0x4, Sequence = 0x0
  Pin-ctls: 0x24: IN VREF_80
  Unsolicited: tag=02, enabled=1
  Power states:  D0 D1 D2 D3 EPSS
  Power: setting=D0, actual=D0
Node 0x1a [Pin Complex] wcaps 0x40048b: Stereo Amp-In
  Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0
  Amp-In vals:  [0x00 0x00]
  Pincap 0x00003724: IN Detect
    Vref caps: HIZ 50 GRD 80 100
  Pin Default 0x411111f0: [N/A] Speaker at Ext Rear
    Conn = 1/8, Color = Black
    DefAssociation = 0xf, Sequence = 0x0
    Misc = NO_PRESENCE
  Pin-ctls: 0x00: VREF_HIZ
  Unsolicited: tag=00, enabled=0
  Power states:  D0 D1 D2 D3 EPSS
  Power: setting=D0, actual=D0
Node 0x1b [Pin Complex] wcaps 0x40058f: Stereo Amp-In Amp-Out
  Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0
  Amp-In vals:  [0x00 0x00]
  Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
  Amp-Out vals:  [0x80 0x80]
  Pincap 0x00013734: IN OUT EAPD Detect
    Vref caps: HIZ 50 GRD 80 100
  EAPD 0x2: EAPD
  Pin Default 0x411111f0: [N/A] Speaker at Ext Rear
    Conn = 1/8, Color = Black
    DefAssociation = 0xf, Sequence = 0x0
    Misc = NO_PRESENCE
  Pin-ctls: 0x00: VREF_HIZ
  Unsolicited: tag=00, enabled=0
  Power states:  D0 D1 D2 D3 EPSS
  Power: setting=D0, actual=D0
  Connection: 2
     0x02* 0x03
Node 0x1c [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x1d [Pin Complex] wcaps 0x400400: Mono
  Pincap 0x00000020: IN
  Pin Default 0x40600001: [N/A] Modem Line at Ext N/A
    Conn = Unknown, Color = Unknown
    DefAssociation = 0x0, Sequence = 0x1
  Pin-ctls: 0x20: IN
  Power states:  D0 D1 D2 D3 EPSS
  Power: setting=D0, actual=D0
Node 0x1e [Pin Complex] wcaps 0x400501: Stereo
  Pincap 0x00000010: OUT
  Pin Default 0x411111f0: [N/A] Speaker at Ext Rear
    Conn = 1/8, Color = Black
    DefAssociation = 0xf, Sequence = 0x0
    Misc = NO_PRESENCE
  Pin-ctls: 0x40: OUT
  Power states:  D0 D1 D2 D3 EPSS
  Power: setting=D0, actual=D0
  Connection: 1
     0x06
Node 0x1f [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x20 [Vendor Defined Widget] wcaps 0xf00040: Mono
  Processing caps: benign=0, ncoeff=142
Node 0x21 [Pin Complex] wcaps 0x40058d: Stereo Amp-Out
  Control: name="Headphone Playback Switch", index=0, device=0
    ControlAmp: chs=3, dir=Out, idx=0, ofs=0
  Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
  Amp-Out vals:  [0x00 0x00]
  Pincap 0x0001001c: OUT HP EAPD Detect
  EAPD 0x2: EAPD
  Pin Default 0x04211020: [Jack] HP Out at Ext Right
    Conn = 1/8, Color = Black
    DefAssociation = 0x2, Sequence = 0x0
  Pin-ctls: 0xc0: OUT HP
  Unsolicited: tag=01, enabled=1
  Power states:  D0 D1 D2 D3 EPSS
  Power: setting=D0, actual=D0
  Connection: 2
     0x02 0x03*
Node 0x22 [Audio Mixer] wcaps 0x20010b: Stereo Amp-In
  Amp-In caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
  Amp-In vals:  [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80]
  Connection: 5
     0x19 0x1a 0x1b 0x1d 0x13
Node 0x23 [Audio Mixer] wcaps 0x20010b: Stereo Amp-In
  Amp-In caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
  Amp-In vals:  [0x00 0x00] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80]
  Connection: 5
     0x19 0x1a 0x1b 0x1d 0x12
Node 0x24 [Audio Selector] wcaps 0x300101: Stereo
  Connection: 3
     0x12* 0x13 0x18
Node 0x25 [Audio Selector] wcaps 0x300101: Stereo
  Connection: 2
     0x12* 0x13

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2026-08-20  4:55 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-20  4:54 Missing Cirrus CS35L56 firmware for Lenovo Xiaoxin Pro 14 ASP10 (SSID 17aa:3912) causes distorted/crackling audio Viktor Menshin
  -- strict thread matches above, loose matches on Subject: below --
2026-08-09  7:35 Viktor Menshin
2026-08-12 10:01 ` Stuart Henderson

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.