Jump to content

Recommended Posts

Posted

Fairly sure the current build either includes an incorrect or no ucm config for HDMI Audio support; I've seen other builds eg rock itx have this issue but I believe this may be a potential issue for the q6a build if anyone experiences there is a solution -

 

1. Install alsa-ucm-conf

sudo apt install -y alsa-ucm-conf

 

2. Download configs

 cd /tmp
curl -sL "https://github.com/alsa-project/alsa-ucm-conf/archive/refs/heads/master.tar.gz" | tar xz

 

3. Copy QCS6490 configs
 

sudo cp -r alsa-ucm-conf-master/ucm2/Qualcomm/qcs6490 /usr/share/alsa/ucm2/Qualcomm/
sudo cp -r alsa-ucm-conf-master/ucm2/conf.d/qcs6490 /usr/share/alsa/ucm2/conf.d/

4. Copy library & codec files

sudo cp -r alsa-ucm-conf-master/ucm2/lib /usr/share/alsa/ucm2/
sudo cp -r alsa-ucm-conf-master/ucm2/codecs /usr/share/alsa/ucm2


5. Restart PulseAudio

systemctl --user restart pulseaudio

 

6. Verify HDMI audio is detected

pactl list sinks short

 

If this did not work i probably just made your issue harder to fix; However if this did work congrats enjoy not having a mute computer.

Posted

This recipe does not work for me. Could you please explain in more detail which exact Armbian image you are using and what exactly needs to be done to get the sound working?

 

Posted (edited)

This is not working for me either. I had audio initially working with the "Radxa OS" (Ubuntu 24.04), but after a few reboots, seems to lose audio and reverts to "Dummy Output" audio placeholder for the Output Device. No luck at all with sound on Armbian even after following the instructions laid out here. Would be nice to get audio working reliably for the Q6A on Armbian as its my favorite SBC to date, but no sound is a show stopper.

Edited by Mr Roboto
Posted

To get audio working on the Radxa Dragon (QCS6490) when the standard UCM (Use Case Manager) fails, you have to bypass the "official" path and manually bridge the hardware to the software.

Here is the complete summary of the "manual bridge" method developed. I installed Armbian 25.11.1 Edge Image and below is how I fixed HDMI Audio.

 

Step 1: Create the Hardware Bridge Script

This script manually flips the hardware switches in the Qualcomm DSP that route audio to the HDMI/DisplayPort pins.

File: /usr/local/bin/fix-hdmi-audio.sh Command: sudo nano /usr/local/bin/fix-hdmi-audio.sh

Bash

#!/bin/bash

# Wait for hardware to initialize

sleep 2

# Open the HDMI/DP Audio Bridge

amixer -c 0 cset name='DISPLAY_PORT_RX_0 Audio Mixer MultiMedia1' 1

# Set initial hardware volume

amixer -c 0 cset name='stream0.vol_ctrl0 MultiMedia1 Playback Volu' 75%

Make it executable: sudo chmod +x /usr/local/bin/fix-hdmi-audio.sh

Step 2: Create the Systemd Service

This ensures the hardware switches are flipped automatically every time the board boots up.

File: /etc/systemd/system/hdmi-audio.service Command: sudo nano /etc/systemd/system/hdmi-audio.service

Ini, TOML

[Unit]

Description=Fix HDMI Audio Routing

After=sound.target

 

[Service]

Type=oneshot

ExecStart=/usr/local/bin/fix-hdmi-audio.sh

RemainAfterExit=yes

 

[Install]

WantedBy=multi-user.target

Enable it:

Bash

sudo systemctl daemon-reload

sudo systemctl enable hdmi-audio.service

Step 3: Configure the Desktop Audio Sink

Since the system's "Built-in Audio" often defaults to a "Dummy Output" when UCM is broken, we force PulseAudio to create a manual "Sink" pointing directly to the hardware.

File: /etc/pulse/default.pa Command: sudo nano /etc/pulse/default.pa

Add these lines to the very bottom of the file:

Plaintext

# Manually bridge PulseAudio to the working hardware path

load-module module-alsa-sink device=plughw:0,0 sink_name=Manual_HDMI sink_properties=device.description=HDMI_Audio_Output

set-default-sink Manual_HDMI

Step 4: Clean Up UCM (Optional but Recommended)

To stop the "HDMI Audio failure" warnings during boot, you can ensure your UCM files are at least syntactically correct, even if the system ignores them.

File: /usr/share/alsa/ucm2/QCS6490RadxaDra/HiFi.conf

Plaintext

Syntax 2

SectionDevice."HDMI" {

    Comment "HDMI Output"

    Value {

        PlaybackPriority 200

        PlaybackPCM "hw:0,0"

    }

}

SectionVerb {

    EnableSequence []

    DisableSequence []

}

 

Summary of the Audio Path

By following these steps, you have constructed the following data flow:

Hardware: Qualcomm DSP (Card 0, Device 0).

Bridge: amixer opens the path from the CPU to the HDMI port.

ALSA: Provides the plughw:0,0 interface.

PulseAudio: Grabs that interface and names it "HDMI_Audio_Output."

Applications: YouTube/Browsers send audio to the "Default Sink," which is now your working HDMI path.

Now I will put all these commands into a single "one-click" shell script so you can save it as a backup for future installs?

The Radxa Dragon Audio "One-Click" Fix

Create the file: nano fix_audio.sh

Paste the code below.

 

Run it: chmod +x fix_audio.sh && sudo ./fix_audio.sh

Bash

#!/bin/bash

 

echo "🚀 Starting Radxa Dragon QCS6490 Audio Fix..."

 

# 1. Create the Hardware Bridge Script

echo "🔧 Creating hardware bridge script..."

cat <<EOF | sudo tee /usr/local/bin/fix-hdmi-audio.sh > /dev/null

#!/bin/bash

# Wait for hardware to initialize

sleep 2

# Open the HDMI/DP Audio Bridge

amixer -c 0 cset name='DISPLAY_PORT_RX_0 Audio Mixer MultiMedia1' 1

# Set initial hardware volume

amixer -c 0 cset name='stream0.vol_ctrl0 MultiMedia1 Playback Volu' 75%

EOF

 

sudo chmod +x /usr/local/bin/fix-hdmi-audio.sh

 

# 2. Create the Systemd Service

echo "⚙️  Creating boot-time service..."

cat <<EOF | sudo tee /etc/systemd/system/hdmi-audio.service > /dev/null

[Unit]

Description=Fix HDMI Audio Routing

After=sound.target

 

[Service]

Type=oneshot

ExecStart=/usr/local/bin/fix-hdmi-audio.sh

RemainAfterExit=yes

 

[Install]

WantedBy=multi-user.target

EOF

 

# 3. Enable and Start the Service

sudo systemctl daemon-reload

sudo systemctl enable hdmi-audio.service

sudo systemctl start hdmi-audio.service

 

# 4. Configure PulseAudio Sink

echo "🔉 Configuring PulseAudio/PipeWire sink..."

PA_CONFIG="/etc/pulse/default.pa"

if [ -f "$PA_CONFIG" ]; then

    # Check if we already added the fix to avoid duplicates

    if ! grep -q "Manual_HDMI" "$PA_CONFIG"; then

        cat <<EOF | sudo tee -a "$PA_CONFIG" > /dev/null

 

# Manually bridge PulseAudio to the working hardware path

load-module module-alsa-sink device=plughw:0,0 sink_name=Manual_HDMI sink_properties=device.description=HDMI_Audio_Output

set-default-sink Manual_HDMI

EOF

    fi

else

    echo "⚠️ Warning: /etc/pulse/default.pa not found. You may need to manualy add the sink to your specific sound server config."

fi

 

echo " Success! Please reboot to finalize settings."

echo "   After reboot, select 'HDMI_Audio_Output' in Sound Settings if it doesn't auto-switch."

Why this works for your specific board:

This script performs a "Direct Injection." Instead of asking the operating system to figure out where the audio goes (which fails because the Qualcomm UCM profiles are currently buggy), it tells the hardware exactly which gate to open and tells the software exactly which "sink" to pour the audio into.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...

Important Information

Terms of Use - Privacy Policy - Guidelines