Skip to content

ALC298 (Samsung Galaxy Book3 Ultra NP960XFH): speakers silent after s2idle resume — SOF DSP audio path broken #5730

@KiloHertzian

Description

@KiloHertzian

Summary

Internal speakers work after cold boot but go completely silent after s2idle suspend/resume. Only a full reboot restores audio. The problem has two layers: (1) the kernel's ALC298 V2 4-amp fixup only runs at probe time, not on resume, and (2) the SOF DSP itself fails to re-establish the audio path after resume — even manually replaying the amp init does not restore sound.

Hardware

Component Detail
Laptop Samsung Galaxy Book 960XFH (NP960XFH_XA1US)
CPU 13th Gen Intel i7-13700H (Raptor Lake)
Codec Realtek ALC298, Vendor 0x10ec0298, Subsystem 0x144dc1cc
Driver SOF (sof-audio-pci-intel-tgl) via snd_soc_skl_hda_dsp
SOF FW intel/sof/sof-rpl.ri version 2:2:0-57864
Topology intel/sof-tplg/sof-hda-generic-2ch.tplg
Kernel 6.19.11-1-cachyos (also observed on 6.19.10)
Suspend mode s2idle ([s2idle] deep)
Distro CachyOS (Arch-based), PipeWire 1.6.3

Steps to Reproduce

  1. Cold boot — internal speakers work, speaker-test -c 2 -t sine -l 1 produces audio
  2. Suspend (s2idle): close lid or systemctl suspend
  3. Resume: open lid
  4. Attempt playback — completely silent

Observed Behavior After Resume

HDA codec state

Pin 0x14 (internal speaker, Fixed) shows hardware mute after resume:

Node 0x14 [Pin Complex] wcaps 0x40050d: Stereo Amp-Out
  Amp-Out vals:  [0x80 0x80]   ← hardware-muted

Pin 0x17 (kernel's active speaker line_out) is unmuted but no audio reaches speakers:

Node 0x17 [Pin Complex] wcaps 0x40058d: Stereo Amp-Out
  Amp-Out vals:  [0x00 0x00]

SOF DSP state

  • PCM open returns -112 (EHOSTDOWN) immediately after resume
  • After PipeWire restart, PCM opens successfully but no audio reaches speakers
  • PCI runtime_status may show suspended even during active playback attempt
  • aplay -D hw:0,0 /usr/share/sounds/... also produces no audio (rules out PipeWire)

What was tried (none restore audio)

# Action Result
1 Unmute + enable pin 0x14 via hda-verb No effect
2 Full V2 4-amp init via hda-verb (coefficients on Node 0x20 for NIDs 0x38, 0x39, 0x3C, 0x3D) Coefficients written OK, still no sound
3 Restart PipeWire + WirePlumber PCM opens, still silent
4 Amp init while audio streaming No sound
5 Kill PipeWire + modprobe -r + modprobe SOF modules Module remove fails (device in use) or reload doesn't restore
6 Direct ALSA playback (aplay -D hw:0,0) Silent — hardware-level issue
7 PCI remove + rescan (echo 1 > .../remove; echo 1 > .../rescan) Restores codec detection but not audio; reboot still needed

Root Cause Analysis

Layer 1: Kernel V2 fixup only runs at probe

The Samsung 4-amp quirk (ALC298_FIXUP_SAMSUNG_AMP_V2_4_AMPS, SSID 144d:c1cc) initializes amp coefficients via Node 0x20 only at HDA_FIXUP_ACT_PROBE:

// sound/pci/hda/patch_realtek.c
static void alc298_fixup_samsung_amp_v2_4_amps(struct hda_codec *codec,
            const struct hda_fixup *fix, int action)
{
    if (action == HDA_FIXUP_ACT_PROBE)   // NOT on resume (HDA_FIXUP_ACT_INIT)
        alc298_samsung_v2_init_amps(codec, 4);
}

After s2idle, the amp coefficient state is lost and never re-initialized.

Layer 2: SOF DSP audio path is broken

Even after manually replaying the exact amp init sequence via hda-verb, audio does not work. The SOF DSP-to-codec link appears broken:

  • The initial PCM open failure (EHOSTDOWN) suggests the SOF DSP did not resume correctly
  • Even after recovery (PipeWire restart, module reload), audio frames do not reach the codec
  • This is not just a missing amp init — the entire DSP pipeline is non-functional after resume

Boot Log (relevant lines)

snd_soc_avs 0000:00:1f.3: Digital mics found on Skylake+ platform, using SOF driver
sof-audio-pci-intel-tgl 0000:00:1f.3: DSP detected with PCI class/subclass/prog-if 0x040100
sof-audio-pci-intel-tgl 0000:00:1f.3: hda codecs found, mask 5
sof-audio-pci-intel-tgl 0000:00:1f.3: using HDA machine driver skl_hda_dsp_generic now
sof-audio-pci-intel-tgl 0000:00:1f.3: Firmware file: intel/sof/sof-rpl.ri
sof-audio-pci-intel-tgl 0000:00:1f.3: Firmware info: version 2:2:0-57864
sof-audio-pci-intel-tgl 0000:00:1f.3: Firmware: ABI 3:22:1 Kernel ABI 3:23:1
snd_hda_codec_alc269 ehdaudio0D0: ALC298: picked fixup for PCI SSID 144d:c1cc
snd_hda_codec_alc269 ehdaudio0D0: autoconfig for ALC298: line_outs=1 (0x17) type:speaker

Additional Notes

  • On one occasion after a forced reboot (caused by PipeWire D-state hang during shutdown on dead SOF device), the ALC298 codec disappeared entirely — codec mask became 4 (HDMI only) instead of 5. PCI remove+rescan recovered codec detection, but a full reboot was needed to restore audio.
  • No custom modprobe.d configs (only nvidia.conf), no custom audio systemd services — stock SOF configuration.
  • Regression window appears to be kernel 6.19.7–6.19.10 (audio previously survived suspend on earlier kernels, exact version not recorded).

Expected Behavior

Speakers should produce audio after s2idle resume without requiring a reboot. The SOF DSP should properly resume its audio pipeline, and the ALC298 V2 amp fixup should re-run on resume.

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions