From: GitHub issues - opened <github@alsa-project.org>
To: alsa-devel@alsa-project.org
Subject: UCM HiFi profile fails on hardware with Master volume instead of Headphone volume controls (ASUS ZenBook UX425EA)
Date: Tue, 13 Jan 2026 10:11:07 +0100 (CET) [thread overview]
Message-ID: <188a3f5b62a8a400-webhooks-bot@alsa-project.org> (raw)
In-Reply-To: <188a3f5b629de600-webhooks-bot@alsa-project.org>
alsa-project/alsa-ucm-conf issue #687 was opened from akincano:
### Hardware Information
- Laptop: ASUS ZenBook UX425EA_UX425EA
- Audio Controller: Intel Tiger Lake-LP Smart Sound Technology
- Audio Controller (PCI ID: 0x8086:0xa0c8)
- Codec: Realtek ALC294 (Vendor ID: 0x10ec0294, Subsystem ID: 0x10431cee)
- Kernel: 6.18.5.arch1-1
- Distribution: Arch Linux
### Software Versions
```bash
alsa-ucm-conf 1.2.15.2-1
sof-firmware 2025.12-1
linux 6.18.5.arch1-1
```
### Problem Description
The SOF HiFi profile fails to create speaker/headphone audio devices on this hardware. WirePlumber reports:
```bash
spa.alsa: No sink and source at HiFi: Headphones
```
The HiFi profile shows as available: no and only HDMI outputs are exposed, with no analog audio devices.
### Root Cause
**This is a UCM configuration issue**, not a kernel driver issue. The problem is that /usr/share/alsa/ucm2/HDA/HiFi-analog.conf checks for ALSA controls that don't exist on this hardware.
**ALSA controls exposed by this hardware (identical for both SOF and HDA):**
```bash
numid=3,iface=CARD,name='Speaker Phantom Jack'
numid=2,iface=MIXER,name='Master Playback Switch'
numid=1,iface=MIXER,name='Master Playback Volume'
[HDMI/IEC958 controls omitted for brevity]
```
**Controls the UCM config expects but don't exist:**
- Headphone Playback Volume ❌ (only Master Playback Volume exists)
- Headphone Playback Switch ❌ (only Master Playback Switch exists)
- Headphone Jack ❌ (only Speaker Phantom Jack exists)
**UCM config logic that fails:**
In /usr/share/alsa/ucm2/HDA/HiFi-analog.conf:
```bash
If.hpvol {
Condition {
Type ControlExists
Control "name='Headphone Playback Volume'"
}
False.Define.hpvol ""
}
If.hp {
Condition {
Type String
Empty "${var:hpvol}"
}
False.SectionDevice."Headphones" {
# ... creates headphone device
}
}
```
Because Headphone Playback Volume doesn't exist, hpvol is set to empty string, and the If.hp condition prevents the headphone device from being created.
Similarly, the jack detection logic checks for:
```bash
Define.hpjack "Headphone Jack"
If.hpjack {
Condition {
Type ControlExists
Control "iface=CARD,name='Headphone Mic Jack'"
}
# ... falls back to checking 'Front Headphone Jack'
}
```
But never checks for Speaker Phantom Jack, which is what this hardware exposes.
### Working Configuration (Legacy HDA Driver)
With the legacy snd_hda_intel driver (forced via blacklisting SOF), PulseAudio's built-in profile logic correctly handles this hardware:
**Working profile:** output:analog-stereo+input:analog-stereo
**Exposed ports:**
- analog-output-speaker: Speakers (uses Master Playback Volume/Switch)
- analog-output-headphones: Headphones (uses Master Playback Volume/Switch)
- Automatic jack detection via Speaker Phantom Jack
The legacy HDA driver works because PulseAudio has fallback logic that handles hardware with only Master volume controls, but SOF's UCM-based configuration doesn't have this fallback.
### Proposed Solution
The UCM configuration needs to be updated to handle hardware that only exposes Master Playback Volume/Switch instead of dedicated Headphone controls.
**Option 1: Add fallback logic to HiFi-analog.conf**
Check for Master Playback Volume when Headphone Playback Volume doesn't exist:
```bash
If.hpvol {
Condition {
Type ControlExists
Control "name='Headphone Playback Volume'"
}
False.If.master {
Condition {
Type ControlExists
Control "name='Master Playback Volume'"
}
True.Define.hpvol "Master"
}
}
```
Similarly for jack detection, check Speaker Phantom Jack:
```bash
If.hpjack {
Condition {
Type ControlExists
Control "iface=CARD,name='Headphone Mic Jack'"
}
True.Define.hpjack "Headphone Mic Jack"
False.If.front {
Condition {
Type ControlExists
Control "iface=CARD,name='Front Headphone Jack'"
}
True.Define.hpjack "Front Headphone Jack"
False.If.speaker {
Condition {
Type ControlExists
Control "iface=CARD,name='Speaker Phantom Jack'"
}
True.Define.hpjack "Speaker Phantom Jack"
}
}
}
```
**Option 2: Create a specific profile for this hardware**
Create a UCM profile specifically for Tiger Lake systems with Realtek ALC294 that only expose Master controls.
**Option 3: Update SOF topology**
If this is a SOF topology issue, update the topology to expose proper Headphone controls instead of just Master.
### Additional Debug Information
**Pin 0x21 configuration (headphone jack):**
```bash
Node 0x21 [Pin Complex] wcaps 0x40058d: Stereo Amp-Out
Pincap 0x0001001c: OUT HP EAPD Detect
Pin Default 0x411111f0: [N/A] Speaker at Ext Rear
Misc = NO_PRESENCE
Pin-ctls: 0x00:
Unsolicited: tag=00, enabled=0
```
The pin is capable of jack detection (EAPD Detect in capabilities) but is misconfigured as "N/A" with "NO_PRESENCE". However, the jack detection still works via the Speaker Phantom Jack ALSA control.
**Full codec information:** Available upon request
**Full WirePlumber logs:** Available upon request
### Impact
This affects all ASUS ZenBook UX425EA users (and potentially other laptops with similar hardware configurations) running SOF. Users must either:
1. Use pro-audio profile (no automatic headphone/speaker switching)
2. Blacklist SOF and force legacy HDA driver (not a long-term solution)
### Related Issues
This was initially reported in #686 which was closed as a kernel issue, but further investigation revealed it's actually a UCM configuration problem. The kernel driver is exposing the ALSA controls correctly; the UCM config just doesn't know how to handle this hardware configuration.
Issue URL : https://github.com/alsa-project/alsa-ucm-conf/issues/687
Repository URL: https://github.com/alsa-project/alsa-ucm-conf
parent reply other threads:[~2026-01-13 9:13 UTC|newest]
Thread overview: expand[flat|nested] mbox.gz Atom feed
[parent not found: <188a3f5b629de600-webhooks-bot@alsa-project.org>]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=188a3f5b62a8a400-webhooks-bot@alsa-project.org \
--to=github@alsa-project.org \
--cc=alsa-devel@alsa-project.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox