DEV Community

Ankit Khandelwal
Ankit Khandelwal

Posted on

ROG Flow Z13 2025 Linux Audio Quality Investigation

The ASUS ROG Flow Z13 2025 (GZ302EA) experiences significantly lower speaker volume and quality on Linux (Fedora 43) compared to Windows.

This investigation identified the root cause: missing hardware-specific Cirrus amplifier firmware tuning files that tell the speaker amplifiers how to operate at optimal gain levels. The firmware files do exist in the system (0x1043:0x1fb3), but the kernel is not loading them correctly due to missing device quirks.

Status: Z13 2025 is one of the first models where this firmware exists upstream but lacks kernel integration. This is fixable through kernel patching and firmware extraction from Windows.


The Audio Hardware Architecture

Z13 2025 Audio Chain

Your laptop uses a dual-stage audio system:

  1. Realtek ALC294 Codec (Audio Link Controller)

    • Primary codec handling audio encoding/decoding
    • Detected as: c4:00.6 Audio device [0403]: Family 17h/19h/1ah HD Audio Controller
    • Subsystem ID: 0x1043:0x1fb3
  2. Cirrus Logic CS35L41 Amplifiers (Dual speakers, left and right)

    • HDA device: i2c-CSC3551:00-cs35l41-hda.0 (left speaker)
    • HDA device: i2c-CSC3551:00-cs35l41-hda.1 (right speaker)
    • Connected via I2C bus
    • Each has its own DSP (Digital Signal Processor) for audio enhancement
    • Firmware revision: v0.58.0 (speaker protection profile)

This architecture is typical for ASUS ROG laptops (also used in ROG Flow X13, ROG Zephyrus, etc.).


Root Cause: Missing Firmware Gain Calibration

What's Happening Right Now

System is correctly detecting and loading amplifier firmware, but it's using generic default firmware:

[7.474579] cs35l41-hda i2c-CSC3551:00-cs35l41-hda.0: Falling back to default firmware.
[7.937917] cs35l41-hda i2c-CSC3551:00-cs35l41-hda.0: DSP1: Firmware: 400a4 vendor: 0x2 v0.58.0
[7.964301] cs35l41-hda i2c-CSC3551:00-cs35l41-hda.0: Firmware Loaded - Type: spk-prot, Gain: 17
Enter fullscreen mode Exit fullscreen mode

Key observation: "Gain: 17" — This is a conservative default gain setting designed for maximum speaker protection but minimum volume output.

Why Windows is Louder

Windows Dolby drivers use ASUS-tuned gain settings (likely Gain: 20-24) that are hardware-specific. These settings:

  • Are stored in Windows driver firmware tuning files
  • Know the exact speaker impedance and acoustic characteristics
  • Are optimized for exact speaker hardware
  • Are NOT available to Linux yet (kernel doesn't know about them)

The Firmware Files DO Exist

The investigation confirmed this crucial finding:

-rw-r--r--. 1 root root   2292 Oct 21 05:30 cs35l41-dsp1-spk-prot-10431fb3-spkid0-l0.bin.xz
-rw-r--r--. 1 root root   2288 Oct 21 05:30 cs35l41-dsp1-spk-prot-10431fb3-spkid0-r0.bin.xz
lrwxrwxrwx. 1 root root     47 Oct 21 05:30 cs35l41-dsp1-spk-prot-10431fb3-spkid1-l0.bin.xz
lrwxrwxrwx. 1 root root     51 Oct 21 05:30 cs35l41-dsp1-spk-prot-10431fb3.wmfw.xz
Enter fullscreen mode Exit fullscreen mode

This is significant: The linux-firmware repository already includes firmware tuning files for the exact subsystem ID (0x1043:0x1fb3). These files were added by the open-source community through reverse engineering or ASUS contribution.

The problem: The Linux kernel (6.18.0) doesn't have a device quirk that tells it to load these specific files for the Z13 2025. It falls back to generic firmware instead.


Why Software Solutions (EasyEffects) Aren't Enough

I tested EasyEffects presets and found them insufficient. This is expected because:

Audio Processing Layer Function Windows/Dolby Linux (Current) Linux with Presets
DSP Firmware (Hardware) Amplifier tuning, speaker protection, gain calibration ✓ Optimized tuning ✗ Generic (Gain 17) ✗ Generic (Gain 17)
Software Equalization Bass, treble, presence adjustments Dolby processing EasyEffects plugins EasyEffects plugins
Loudness Perception Dynamic range compression Dolby algorithm Compressor plugin Compressor plugin

EasyEffects recreates layers 2 and 3 but cannot overcome the hardware gain limitation in layer 1. We're still limited by Gain: 17 at the amplifier level. Boosting software on top of that creates digital clipping and quality degradation.

Analogy: EasyEffects is like turning up the volume knob when your speakers are physically set to 30% power. It helps, but you can't exceed the hardware ceiling without clipping.


Investigation Findings

Initial Diagnosis

  1. Problem Statement: Audio quality significantly lower on Linux vs Windows on ROG Flow Z13 2025
  2. Initial Hypothesis: Drivers not ported or firmware missing
  3. Finding: Cirrus CS35L41 amplifiers ARE detected and partially working
  4. ALSA Mixer Status: All software volume controls at maximum (87/87, 254/255, 99%)
  5. Conclusion: Software volume controls are not the bottleneck

Firmware Investigation

  1. Kernel Version Check: 6.18.0-0.rc4 (vanilla Fedora 43)
  2. Subsystem ID: 0x1043:0x1fb3 not found in current kernel quirks
  3. Firmware Status: Generic firmware with Gain: 17 being loaded
  4. Important Discovery: Custom firmware files for 0x1043:0x1fb3 exist in /lib/firmware/cirrus/
# Z13 2025 subsystem ID firmware files found:
cs35l41-dsp1-spk-prot-10431fb3-spkid0-l0.bin.xz    (left speaker, config 0)
cs35l41-dsp1-spk-prot-10431fb3-spkid0-r0.bin.xz    (right speaker, config 0)
cs35l41-dsp1-spk-prot-10431fb3-spkid1-l0.bin.xz    (left speaker, config 1 - symlink)
cs35l41-dsp1-spk-prot-10431fb3-spkid1-r0.bin.xz    (right speaker, config 1 - symlink)
cs35l41-dsp1-spk-prot-10431fb3.wmfw.xz             (shared firmware)
Enter fullscreen mode Exit fullscreen mode
  1. Critical Realization: The firmware files are already in the system, but the kernel doesn't know your Z13 2025 exists. It's using a different fallback path.

Solution Pathways Identified

Path A: Extract Windows Tuning Files (Most Direct)

  • Extract firmware from Windows installation
  • Contains higher gain settings specific to the speakers

Path B: Add Kernel Quirk (Permanent)

  • Create kernel patch to add Z13 2025 to supported device list
  • Tells kernel to use existing firmware files correctly

Technical Deep Dive: What Needs to Happen

Current Kernel Behavior

The kernel cs35l41-hda driver has this decision tree:

Device detected (0x1043:0x1fb3)
    ↓
Check if subsystem ID in hda_quirks.c
    ├─ YES → Load device-specific firmware and settings
    └─ NO  → Load generic firmware (Gain: 17)
              ↓
         Try to find matching firmware files
         ├─ FILES EXIST
         └─ Files exist but with generic settings
Enter fullscreen mode Exit fullscreen mode

For the Z13 2025, the kernel reaches the "NO" branch because your subsystem ID is missing from hda_quirks.c. The firmware files exist but are generic.

Required Fix: Add Device Quirk

The Linux kernel needs this entry in sound/pci/hda/hda_quirks.c:

SND_PCI_QUIRK(0x1043, 0x1fb3, "ASUS ROG Flow Z13 GZ302", ALC245_FIXUP_CS35L41_SPI_2),
Enter fullscreen mode Exit fullscreen mode

This single line tells the kernel:

  • Vendor ID: 0x1043 (ASUS)
  • Device ID: 0x1fb3 (Z13 subsystem)
  • Model name: ASUS ROG Flow Z13 GZ302
  • Fix to apply: Use ALC245_FIXUP_CS35L41_SPI_2 settings

With this line added, the kernel will:

  1. Recognize the device explicitly
  2. Load firmware files with the 10431fb3 naming pattern
  3. Apply correct amplifier gain settings
  4. Load speaker protection profiles

Reference Commands

For future troubleshooting:

# Check current firmware being used
sudo dmesg | grep -i "cs35l41.*firmware\|gain"

# Verify firmware files for your Z13
ls -la /lib/firmware/cirrus/cs35l41-dsp1-spk-prot-10431fb3*

# Check ALSA mixer levels
amixer -c1 scontents | grep -A 5 "Speaker\|Master\|PCM"

# Monitor audio load in real-time
watch -n 1 'sudo dmesg | tail -5'

# Extract hardware info for reporting
sudo alsa-info.sh > alsa-info.log
Enter fullscreen mode Exit fullscreen mode

Top comments (0)