Files

6.0 KiB

Audio on hp-chell (KDE neon)

Working state (verified 2026-09-27): speakers, headset jack and internal mic work under neon. PipeWire/WirePlumber shows Built-in Audio Speaker and Built-in Audio Internal Microphone, and the headset appears when something is plugged in. None of this works out of the box. It took the fixes below, all applied 2026-03-05, reconstructed on 2026-09-27 from ~/.bash_history and file timestamps.

Hardware

HP Chromebook 13 G1 ("chell", Skylake). The audio DSP is Intel Skylake SST, driven by the kernel's avs driver (snd_soc_avs), with three board-specific machine drivers. Each one is its own ALSA card:

Card Driver What
avs_ssm4567 snd_soc_avs_ssm4567 speakers: 2x ADI SSM4567 amps
avs_nau8825 snd_soc_avs_nau8825 headset jack: Nuvoton NAU88L25 codec
avs_dmic snd_soc_avs_dmic internal digital mic
avs_probe_mb snd_soc_avs_probe DSP debug probe, not a real device

The cards report the long name Google-Chell-1.0.

Speaker safety: the upstream script disables speakers on Chromebooks with a MAX98357A amp (no volume limiter, so it can blow the speakers). Chell uses SSM4567, not MAX98357A, so that doesn't apply and the speakers are enabled.

The fixes

1. WeirdTreeThing's chromebook-linux-audio script

Checkout: ~/github/chromebook-linux-audio (https://github.com/WeirdTreeThing/chromebook-linux-audio, shallow clone at 8c7e15e, 2026-02-16). Run as sudo ./setup-audio -b chell. -b is the branch of the UCM repo to clone, and there's no chell branch; a plain ./setup-audio is what's intended. For a Skylake board (skl/kbl/apl) it:

  • Switches the DSP driver to avs: /etc/modprobe.d/snd-avs.conf
    options snd-intel-dspcfg dsp_driver=4
    options snd-soc-avs ignore_fw_version=1
    options snd-soc-avs obsolete_card_names=1
    
    dsp_driver=4 selects avs. Without it snd-intel-dspcfg picks legacy HDA or SOF, and neither works on chell. obsolete_card_names=1 gives the avs_ssm4567-style card names that the UCM profiles below match on.
  • Installs Chromebook UCM profiles: clones https://github.com/WeirdTreeThing/alsa-ucm-conf-cros and copies ucm2/ into /usr/share/alsa/ucm2/, and overrides/ into /usr/share/alsa/ucm2/conf.d/. The ones this board uses are conf.d/avs_ssm4567/, conf.d/avs_nau8825/ and conf.d/avs_dmic/ (avs_ssm4567/HiFi.conf sets amp boost, the master volumes at 219, and Left/Right Speaker Switch).
  • Adds WirePlumber headroom: /etc/wireplumber/wireplumber.conf.d/51-increase-headroom.conf sets api.alsa.headroom = 2048 on all alsa_output.* nodes (the script says it fixes instability and crashes on these DSPs).
  • Runs alsactl init.

2. Duplicate modprobe option (harmless)

/etc/modprobe.d/inteldsp.conf: options snd-intel-dspcfg dsp_driver=4, written by hand a few minutes before the script ran. It duplicates the first line of snd-avs.conf. You can delete it.

3. AVS topology files, downloaded by hand

The avs driver needs a per-board topology blob for each machine driver. Ubuntu's linux-firmware-intel-misc ships only the base DSP firmware (/lib/firmware/intel/avs/skl/dsp_basefw.bin.zst plus one module), not the topologies, and the script doesn't provide them either. They were fetched straight from upstream linux-firmware:

cd /lib/firmware/intel/avs/
BASE=https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/plain/intel/avs
sudo wget $BASE/ssm4567-tplg.bin $BASE/nau8825-tplg.bin $BASE/dmic-tplg.bin

Installed: ssm4567-tplg.bin, nau8825-tplg.bin and dmic-tplg.bin (not owned by any package, so apt won't update or remove them). The history also shows hda-80862809-tplg.bin and hda-8086-generic-tplg.bin being fetched, but they aren't present now and aren't needed; chell has no HDA codec.

4. UCM Syntax 7 → Syntax 6

The cros UCM repo writes its files as Syntax 7, but neon's alsa-lib (libasound2t64 1.2.11) only understands up to Syntax 6, so alsaucm -c avs_ssm4567 list _verbs failed and PipeWire fell back to raw, unusable profiles. Fixed with:

sudo find /usr/share/alsa/ucm2/ -type f -exec sed -i 's/Syntax 7/Syntax 6/g' {} +

As of 2026-09-27 there are 0 Syntax 7 files and dpkg -V alsa-ucm-conf reports no modified package files, so the sed only hit the cros files. If the cros UCM is ever re-copied (re-running setup-audio, or cp -r alsa-ucm-conf-cros/ucm2/*), re-run this sed, unless alsa-lib has been upgraded to a version that accepts Syntax 7.

Then systemctl --user restart wireplumber pipewire pipewire-pulse (or reboot).

Reapplying on a fresh neon install

# 1. script: avs driver, cros UCM, wireplumber headroom
git clone --depth 1 https://github.com/WeirdTreeThing/chromebook-linux-audio
cd chromebook-linux-audio && sudo ./setup-audio

# 2. topologies (not in Ubuntu's linux-firmware packages)
BASE=https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/plain/intel/avs
cd /lib/firmware/intel/avs && sudo wget $BASE/ssm4567-tplg.bin $BASE/nau8825-tplg.bin $BASE/dmic-tplg.bin

# 3. UCM syntax downgrade for alsa-lib 1.2.11
sudo find /usr/share/alsa/ucm2/ -type f -exec sed -i 's/Syntax 7/Syntax 6/g' {} +

sudo reboot

Checks: aplay -l should list avs_ssm4567 / avs_nau8825, alsaucm -c avs_ssm4567 list _verbs should print HiFi, and wpctl status should show the Speaker sink and the Internal Microphone source.

FydeOS on the eMMC has no audio

Seen 2026-09-27, not investigated yet. The neon fixes don't carry over directly. FydeOS is ChromiumOS: a read-only verified rootfs, CRAS instead of PipeWire, and its own kernel and UCM. Things to check from a FydeOS shell (developer mode, or crosh → shell):

  • which DSP driver loaded (lsmod | grep -E 'avs|sof|skl', dmesg) and whether aplay -l shows any cards;
  • whether /lib/firmware/intel/avs/*-tplg.bin exist there;
  • whether its UCM has avs_ssm4567 etc. (/usr/share/alsa/ucm2). The same three pieces (driver selection, topologies, UCM) are the likely gaps.