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.confoptions snd-intel-dspcfg dsp_driver=4 options snd-soc-avs ignore_fw_version=1 options snd-soc-avs obsolete_card_names=1dsp_driver=4selectsavs. Without itsnd-intel-dspcfgpicks legacy HDA or SOF, and neither works on chell.obsolete_card_names=1gives theavs_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/, andoverrides/into/usr/share/alsa/ucm2/conf.d/. The ones this board uses areconf.d/avs_ssm4567/,conf.d/avs_nau8825/andconf.d/avs_dmic/(avs_ssm4567/HiFi.confsets amp boost, the master volumes at 219, andLeft/Right Speaker Switch). - Adds WirePlumber headroom:
/etc/wireplumber/wireplumber.conf.d/51-increase-headroom.confsetsapi.alsa.headroom = 2048on allalsa_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 whetheraplay -lshows any cards; - whether
/lib/firmware/intel/avs/*-tplg.binexist there; - whether its UCM has
avs_ssm4567etc. (/usr/share/alsa/ucm2). The same three pieces (driver selection, topologies, UCM) are the likely gaps.