Fix onboard audio: apply ALSA UCM HiFi verb before Pd start
Validate and Test / validate-patches (push) Failing after 13s

- Add alsaucm -c hw:0 set _verb HiFi to start-synth.sh (onboard mode)
- Add UCM verb to install.sh
- Add UCM verb to justfile fix-ucm recipe
- Without this, the DSP audio routing is not configured and no sound
  reaches the headphone output
This commit is contained in:
2026-06-24 17:31:00 -07:00
parent 191c70fd18
commit d4856804ff
3 changed files with 45 additions and 2 deletions
+19
View File
@@ -9,10 +9,29 @@ for svc in "${SERVICES[@]}"; do
sudo cp "$REPO/system/$svc.service" /etc/systemd/system/ sudo cp "$REPO/system/$svc.service" /etc/systemd/system/
done done
# Apply UCM HiFi verb to configure DSP audio routing
if command -v alsaucm &>/dev/null; then
alsaucm -c hw:0 set _verb HiFi && echo "[OK] UCM HiFi verb applied"
fi
# Fix UCM bug (must survive OS updates) # Fix UCM bug (must survive OS updates)
FILE=/usr/share/alsa/ucm2/codecs/qcom-lpass/rx-macro/HeadphoneEnableSeq.conf FILE=/usr/share/alsa/ucm2/codecs/qcom-lpass/rx-macro/HeadphoneEnableSeq.conf
NEED_FIX=0
# Remove invalid RX HPH Mode line
if grep -q "RX HPH Mode" "$FILE" 2>/dev/null; then if grep -q "RX HPH Mode" "$FILE" 2>/dev/null; then
sudo sed -i '/RX HPH Mode/d' "$FILE" sudo sed -i '/RX HPH Mode/d' "$FILE"
NEED_FIX=1
fi
# Add missing RX INT0_1/INT1_1 INTERP controls (blocks audio on some boards)
if ! grep -q "RX INT0_1 INTERP" "$FILE" 2>/dev/null; then
echo ' cset "name=RX INT0_1 INTERP" "RX INT0_1 MIX1"' | sudo tee -a "$FILE" >/dev/null
NEED_FIX=1
fi
if ! grep -q "RX INT1_1 INTERP" "$FILE" 2>/dev/null; then
echo ' cset "name=RX INT1_1 INTERP" "RX INT1_1 MIX1"' | sudo tee -a "$FILE" >/dev/null
NEED_FIX=1
fi
if [ "$NEED_FIX" = "1" ]; then
echo "[OK] UCM HeadphoneEnableSeq patched" echo "[OK] UCM HeadphoneEnableSeq patched"
fi fi
+18 -2
View File
@@ -149,8 +149,24 @@ reboot:
# Must run once after OS updates or first install. # Must run once after OS updates or first install.
fix-ucm: fix-ucm:
@ssh {{SSH_OPTS}} "{{BOARD_USER}}@{{BOARD_HOST}}" "\ @ssh {{SSH_OPTS}} "{{BOARD_USER}}@{{BOARD_HOST}}" "\
if grep -q 'RX HPH Mode' /usr/share/alsa/ucm2/codecs/qcom-lpass/rx-macro/HeadphoneEnableSeq.conf 2>/dev/null; then \ echo '{{BOARD_PASS}}' | sudo -S alsaucm -c hw:0 set _verb HiFi 2>/dev/null && \
echo '{{BOARD_PASS}}' | sudo -S sed -i '/RX HPH Mode/d' /usr/share/alsa/ucm2/codecs/qcom-lpass/rx-macro/HeadphoneEnableSeq.conf && \ echo '[OK] UCM verb applied' || \
echo '[WARN] UCM verb failed' && \
FILE=/usr/share/alsa/ucm2/codecs/qcom-lpass/rx-macro/HeadphoneEnableSeq.conf && \
FIXED=0 && \
if grep -q 'RX HPH Mode' \"\$FILE\" 2>/dev/null; then \
echo '{{BOARD_PASS}}' | sudo -S sed -i '/RX HPH Mode/d' \"\$FILE\" && \
FIXED=1; \
fi && \
if ! grep -q 'RX INT0_1 INTERP' \"\$FILE\" 2>/dev/null; then \
echo ' cset \"name=RX INT0_1 INTERP\" \"RX INT0_1 MIX1\"' | sudo tee -a \"\$FILE\" >/dev/null && \
FIXED=1; \
fi && \
if ! grep -q 'RX INT1_1 INTERP' \"\$FILE\" 2>/dev/null; then \
echo ' cset \"name=RX INT1_1 INTERP\" \"RX INT1_1 MIX1\"' | sudo tee -a \"\$FILE\" >/dev/null && \
FIXED=1; \
fi && \
if [ \"\$FIXED\" = \"1\" ]; then \
sudo systemctl restart wireplumber && \ sudo systemctl restart wireplumber && \
echo '[OK] UCM HeadphoneEnableSeq patched'; \ echo '[OK] UCM HeadphoneEnableSeq patched'; \
else \ else \
+8
View File
@@ -64,6 +64,14 @@ fi
if [ "$MODE" = "onboard" ] || [ "$MODE" = "i2s" ]; then if [ "$MODE" = "onboard" ] || [ "$MODE" = "i2s" ]; then
info "Mode: Onboard audio (PMIC headphone / line out on JMISC)" info "Mode: Onboard audio (PMIC headphone / line out on JMISC)"
AUDIO_OPTS=(-audiooutdev 0 -inchannels 0 -outchannels 1) AUDIO_OPTS=(-audiooutdev 0 -inchannels 0 -outchannels 1)
# Apply ALSA UCM HiFi verb to configure DSP routing (required for audio)
if command -v alsaucm &>/dev/null; then
alsaucm -c hw:0 set _verb HiFi 2>/dev/null && \
info " UCM HiFi verb applied" || \
info " UCM HiFi verb failed"
else
info " alsaucm not found — skipping UCM config"
fi
fi fi
if [ "$MODE" = "loopback" ]; then if [ "$MODE" = "loopback" ]; then