Skip to content

[BUG] No Audio - Built-in speakers silent on MSI Stealth 16 AI+ (Intel Panther Lake / Dual RT1320 SoundWire) #5925

Open

Description

@rjbarcon

Describe the bug:

  • No audio output from internal built-in speakers on an MSI Stealth 16 AI+ B3WH (Intel Panther Lake platform) running on Bazzite and CachyOS (Linux Distros).
  • Previously, the speakers works on Windows 11.
  • The kernel fails to find a matching SoundWire machine driver for the ACPI configuration reported by the hardware:
    • Link 2: Dual Realtek ALC1320 Smart Amps (mfg_id 0x025d, part_id 0x1320)
    • Link 3: Realtek ALC713 Headset Codec / DMIC (mfg_id 0x025d, part_id 0x0713)
      As a result, the driver falls back to default function topologies and loads intel/sof-ipc4-tplg/sof-sdca-1amp-id2.tplg. Because this loaded topology binary is configured for a single amplifier rather than the dual ALC1320 setup on this motherboard (cfg-amp:2), the physical speaker amplifiers are not driven properly, resulting in complete silence from internal speakers.

Workarounds / Diagnostics Attempted:

  • Attempted kernel arguments (snd_intel_dspcfg.dsp_driver=3, snd_sof_intel_hda_common.sof_debug=1, snd_sof_sdw.quirk=*).
  • Tested on Kernel 7.2.1-ogc4.1 (Bazzite/Fedora) and 7.3.0-rc1 (CachyOS).
  • Inspected ALSA mixer controls (alsamixer / amixer): rt1320-1 and rt1320-2 switches/terminals (OT23 L/R) are unmuted and set to 100% volume, but no sound is produced.
  • Headset 3.5mm jack works via sof-sdca-jack-id0.tplg

To Reproduce:

  1. Boot Linux (tested on kernels 7.2.1 and 7.3.0-rc1) on an MSI Stealth 16 AI+ B3WH (MS-2631).
  2. Check dmesg | grep -iE "sof|soundwire" to confirm missing machine driver entry and fallback topology loading.
  3. Select "Speaker" output device in KDE Settings / PipeWire.
  4. Play any audio file or speaker test track.
  5. Result: No sound is output from internal speakers.

Reproduction Rate:

  • 100% (All the time across cold boots, reboots, kernel versions 7.2.1 to 7.3.0-rc1, and distributions).

Expected behavior:

  • The SOF SoundWire machine driver should match the ACPI table layout for Link 2 (Dual RT1320) + Link 3 (RT713) and load a valid dual-amp SDCA topology file to drive both internal speaker amplifiers.

Impact:

  • High / Showstopper for built-in speaker playback (forces reliance on headphones/Bluetooth).

Environment:

  1. Branch name and commit hash of the 2 repositories: sof (firmware/topology) and linux (kernel driver).
    • Kernel: 7.2.1-ogc4.1.fc44.x86_64 on Bazzite & 7.3.0-rc1-1-cachyos-rc on CachyOS
    • SOF Firmware Version: 2.14.1.1 (intel/sof-ipc4/ptl/sof-ptl.ri)
  2. Name of the topology file
    • Topology Loaded (Fallback): intel/sof-ipc4-tplg/sof-sdca-1amp-id2.tplg
    • Expected Topology: Dual-Amp topology map for Panther Lake RT1320 (Link 2) + RT713 (Link 3)
  3. Name of the platform(s) on which the bug is observed.
    • Platform: Intel Panther Lake (sof-audio-pci-intel-ptl, PCI 8086:e328)
    • System Model: MSI Stealth 16 AI+ B3WH (Board: MS-2631, BIOS: E2631IMS.10F)

Activity

  1. bardliao commented on Sep 8, 2026

    @bardliao
    Collaborator

    There is no amp function on rt713 codec. It is correct to use sof-sdca-1amp-id2.tplg. The '1amp` means the amps are on 1 sdw bus which is your case.

  2. rjbarcon commented on Sep 8, 2026

    @rjbarcon
    Author

    Hi @bardliao and @abonislawski... I'm still investigating this issue with the help of ChatGPT 5.6 Sol.
    Pardon me as I'm a web-app developer (typescript & dotnet) and still learning how linux & low-level system works...


    @bardliao , I had originally assumed sof-sdca-1amp-id2.tplg meant there was only one physical amp, but based on the investigation I’ve been doing with help from ChatGPT 5.6 Sol, that assumption was wrong.

    From what ChatGPT found by comparing my logs with the SOF/ALSA/kernel code, 1amp here refers to the amp functions being on a single SoundWire bus. That matches this laptop: both RT1320 amps are on Link 2, while the RT713 is on Link 3 for headset/mic. So I no longer think the selected topology is the issue.

    We’ve also checked quite a bit of the speaker path already. Based on the captured logs:

    • both RT1320 devices are detected, attached and active
    • the Speaker PCM is created normally
    • during playback, DAPM reaches both amps through
    • DP1 Playback -> DP1RX -> FU21 -> PDE23 -> OT23 -> SPOL/SPOR -> Speaker
    • PDE23 reaches PS0 on both amps
    • FU21 is unmuted
    • MCU initialization looks successful
    • SOF shows the speaker backend running at 48 kHz, 2 channels, S24_LE
    • the active SoundWire master registers also show a 2-channel stream configured on Link 2

    Even with all of that, the built-in speakers are still completely silent.

    The next thing ChatGPT suggested checking is the RT1320 slave DP1 configuration while playback is active, to confirm that the stream is actually enabled correctly on the codec side as well. If that also looks correct, then the remaining problem may be further inside the RT1320 output/amp initialization path rather than in the SOF topology.

    Brief Summary

    Based on the investigation and analysis so far:

    • the two RT1320 amps are detected correctly
    • the current sof-sdca-1amp-id2.tplg selection appears to be correct
    • ALSA and SOF create and run the speaker path
    • both RT1320 DAPM paths power up correctly
    • the amps reach PS0 and are not muted
    • the SoundWire master shows a valid 48 kHz stereo stream
    • the speakers are still silent
  3. bardliao commented on Sep 8, 2026

    @bardliao
    Collaborator

    Can you share the alsa-info output?

  4. rjbarcon commented on Sep 8, 2026

    @rjbarcon
    Author

    Can you share the alsa-info output?

    @bardliao this is the output from sudo alsa-info.sh --no-upload

  5. rjbarcon commented on Sep 9, 2026

    @rjbarcon
    Author

    @bardliao @abonislawski

    I did some additional investigation using the official MSI Windows 11 audio drivers for this laptop, with help from ChatGPT 5.6 Sol. The Realtek SDCA package gave us several useful clues that may help narrow down the Linux side.

    References: (MSI Stealth 16 Windows 11 Drivers)

    What the Windows drivers confirm

    The Realtek INF files describe the same SoundWire topology that Linux detects:

    SoundWire link Device UID Role
    Link 2 RT1320 0 Smart amplifier
    Link 2 RT1320 1 Smart amplifier
    Link 3 RT713 0 Codec / headset / mic

    This confirms that both RT1320 amplifiers are on the same SoundWire amp bus. So the sof-sdca-1amp-id2.tplg naming does not mean that only one physical RT1320 is being handled.

    The more interesting part is the Realtek Windows driver itself. RtkSdcaXu.sys contains references to RT1320-specific functionality such as:

    AMP_HWInit
    AMP_StreamRun
    SmartAmpCalibrationData
    ALC1320 R0 calibration
    ALC1320 firmware/preset files
    MSI-specific firmware/configuration paths
    

    The package also installs:

    RTKDAT_1462.dat
    RTKDAT_GENERAL.dat
    

    and contains MSI/subsystem-specific configuration lookups.

    This suggests that Windows performs additional Realtek/MSI-specific amplifier initialization, firmware/preset loading and calibration beyond basic SoundWire enumeration.

    How this helps the Linux investigation

    On Linux we have already confirmed most of the upstream path:

    Stage Status
    SOF DSP ✅ Working
    Speaker pipeline ✅ Working
    SoundWire Link 2 ✅ Active
    RT1320 #0 ✅ Detected/bound
    RT1320 #1 ✅ Detected/bound
    RT1320 power state ✅ PS0
    FU21 ✅ Unmuted
    Intel SoundWire master stream ✅ Active
    Speakers ❌ Silent

    The Linux RT1320 driver also supports machine-specific DSP/RAE data:

    rt1320_<vendor>_<product>_<sku>.dat
    rt1320_RAE_<vendor>_<product>_<sku>.dat
    

    Those machine-specific files are currently not available for this laptop.

    The Windows driver findings therefore strengthen the possibility that the remaining issue is inside the RT1320 initialization/DSP/output stage, rather than the SOF topology or Intel SoundWire transport.

    Updated working root-cause ranking

    These are still hypotheses, not conclusions:

    Hypothesis Current assessment
    sof-sdca-1amp only handles one physical RT1320 ❌ Effectively ruled out
    Missing Panther Lake machine match 🟢 Low probability
    Intel SST / SoundWire master transport failure 🟢 Low probability
    RT1320 slave DP1 not receiving the stream 🟠 Still needs verification
    Generic RT1320 initialization insufficient for this MSI 🔴 Strong candidate
    Missing machine-specific RT1320 DSP firmware 🔴 Strong candidate
    Missing RAE / calibration / amp coefficients 🔴 Strong candidate
    RT1320 internal DSP / Class-D not reaching the correct state 🔴 Very strong candidate
    Nahimic/APO absence 🟢 Unlikely to explain complete silence

    So the current suspected boundary is roughly:

    SOF / ALSA
       ↓ ✅
    Intel DSP
       ↓ ✅
    SoundWire master
       ↓ ✅
    RT1320 devices
       ↓ ✅
    RT1320 slave DP1
       ↓ needs verification
    RT1320 DSP / firmware / calibration / Class-D init
       ↓ suspected
    Speakers
       ❌
    

    Next steps

    1. Verify DP1 stream state on both RT1320 SoundWire slaves during playback.
    2. Capture kernel logs while testing the RT1320 DSP FW Update and RAE Update controls.
    3. Confirm the exact firmware filenames requested by the Linux RT1320 driver.
    4. Identify the exact MSI subsystem ID used by this B3WH under Windows.
    5. Compare the matching Windows Realtek configuration/initialization path with what upstream rt1320-sdw currently performs.

    The Windows drivers do not directly provide a Linux fix, but they give us a useful reference implementation and point the investigation more strongly toward machine-specific RT1320 initialization, DSP firmware, RAE/calibration, or the final Class-D output state.

  6. bardliao commented on Sep 9, 2026

    @bardliao
    Collaborator

    @rjbarcon I can't find any issue from the alsa-info. How did you test the speaker? Can you try aplay -Dhw:2,2 xxx.wav -vv?

  7. rjbarcon commented on Sep 9, 2026

    @rjbarcon
    Author

    @bardliao These are the tests that I have done via terminal:

    Test 1:

    $ aplay -Dhw:2,2 xxx.wav -vv
    
    ALSA lib confmisc.c:165:(snd_config_get_card) [error.core] Cannot get card index for 2
    aplay: main:850: audio open error: No such file or directory
    

    Test 2: (No sound from the built-in speaker)

    I have to stop the wireplumber & pipewire before running speaker-test
    For it shows an error message: Playback open error: -16,Device or resource busy

    $ speaker-test -D plughw:CARD=sofsoundwire,DEV=2 -c 2 -r 48000 -t sine -f 440 -l 1
    
    speaker-test 1.2.16
    Playback device is plughw:CARD=sofsoundwire,DEV=2
    Stream parameters are 48000Hz, S16_LE, 2 channels
    Sine wave rate is 440.0000Hz
    Rate set to 48000Hz (requested 48000Hz)
    Buffer size range from 768 to 1048576
    Period size range from 384 to 524288
    Periods = 4
    was set period_size = 12000
    was set buffer_size = 48000
     0 - Front Left
     1 - Front Right
    Time per period = 5.002615
    

    Test 3: (No sound from the built-in speaker)

    Speaker test via KDE Sound System Settings (see attached image below):

    KDE Sound System
    Image

    Test 4: (No sound from the built-in speaker)

    Via browser (youtube, etc.) & played local music files - still no sound on speaker
    Reference of this music file: https://upload.wikimedia.org/wikipedia/en/5/55/EastEnders_Theme.ogg

    Local File (ogg file)
    Image

    Test 5: (Headphone 3.5mm works)

    Note that the 3.5mm port (Headphone) is working (connected to my external speakers)

    Headphone Test
    Image
  8. bardliao commented on Sep 9, 2026

    @bardliao
    Collaborator

    @bardliao These are the tests that I have done via terminal:

    Test 1:

    $ aplay -Dhw:2,2 xxx.wav -vv
    
    ALSA lib confmisc.c:165:(snd_config_get_card) [error.core] Cannot get card index for 2
    aplay: main:850: audio open error: No such file or directory
    

    Not sure why Cannot get card index for 2. From the alsa-info, the sofsoundwire card index is 2. But anyway, it should have the same result as speaker-test -D plughw:CARD=sofsoundwire. This is not likely the SOF issue as the headphone works fine. @jack-cy-yu Can you take a look?

  9. jack-cy-yu commented on Sep 9, 2026

    @jack-cy-yu

    @rjbarcon
    Could you help dump "/proc/asound/pcm" and the register info in below path
    "/sys/kernel/debug/regmap//registers", please make sure to dump register during playback.

  10. rjbarcon commented on Sep 9, 2026

    @rjbarcon
    Author

    @jack-cy-yu

    First I ran speaker-test (this test continue while doing other commands below):

    $ speaker-test -D plughw:CARD=sofsoundwire -c 2 -t sine
    
    speaker-test 1.2.16
    Playback device is plughw:CARD=sofsoundwire
    Stream parameters are 48000Hz, S16_LE, 2 channels
    Sine wave rate is 440.0000Hz
    Rate set to 48000Hz (requested 48000Hz)
    Buffer size range from 768 to 1048576
    Period size range from 384 to 524288
    Periods = 4
    was set period_size = 12000
    was set buffer_size = 48000
     0 - Front Left
     1 - Front Right
    Time per period = 5.000392
     0 - Front Left
     1 - Front Right
    Time per period = 5.999683
     0 - Front Left
     1 - Front Right
    ...
    

    Then I run these commands on another terminal:

    $ cat /proc/asound/pcm
    
    00-03: HDMI 0 : HDMI 0 : playback 1
    00-07: HDMI 1 : HDMI 1 : playback 1
    00-08: HDMI 2 : HDMI 2 : playback 1
    00-09: HDMI 3 : HDMI 3 : playback 1
    01-00: Jack Out (*) :  : playback 1
    01-01: Jack In (*) :  : capture 1
    01-02: Speaker (*) :  : playback 1
    01-04: Microphone (*) :  : capture 1
    01-05: HDMI1 (*) : HDMI 1 : playback 1
    01-06: HDMI2 (*) : HDMI 2 : playback 1
    01-07: HDMI3 (*) : HDMI 3 : playback 1
    01-31: Deepbuffer Jack Out (*) :  : playback 1
    
    $ sudo find /sys/kernel/debug/regmap \
        -type f -name registers -print |
        sort |
        tee regmap-register-files.txt
    
    /sys/kernel/debug/regmap/17-0050/registers
    /sys/kernel/debug/regmap/17-0052/registers
    /sys/kernel/debug/regmap/sdw:0:2:025d:1320:01:0/registers
    /sys/kernel/debug/regmap/sdw:0:2:025d:1320:01:0-sdw-mbq/registers
    /sys/kernel/debug/regmap/sdw:0:2:025d:1320:01:1/registers
    /sys/kernel/debug/regmap/sdw:0:2:025d:1320:01:1-sdw-mbq/registers
    /sys/kernel/debug/regmap/sdw:0:3:025d:0713:01/registers
    /sys/kernel/debug/regmap/sdw:0:3:025d:0713:01-sdw-mbq/registers
    

    I put the output in this text file below because the text was too long (844990 lines)

    $ sudo find /sys/kernel/debug/regmap \
        -type f -name registers -print0 |
        sort -z |
        while IFS= read -r -d '' f; do
            echo
            echo "===== $f ====="
            sudo cat "$f"
        done |
        tee regmap-registers-during-playback.txt
    

    kernel-regmap.txt

  11. rjbarcon commented on Sep 9, 2026

    @rjbarcon
    Author

    @jack-cy-yu @bardliao

    By the way, I watched this youtuber Just Josh and he experienced the same issue as mine (speaker does not work)

  12. jack-cy-yu commented on Sep 10, 2026

    @jack-cy-yu

    @rjbarcon

    1. Could you also share the dmesg log (from device boot to playback)? I'd want to check if there's any error message during playback, and from the PCM info dump, the command for playback should be "aplay -Dhw:1,2 xxx.wav -vv".
    2. Please follow below steps and share the dapm status dump,
    • Start playback
    • go to /sys/kernel/debug/asoc/platform_name/sdw_addr/dapm
    • use command “grep On –r .”, “grep Off –r .”, “cat *” separately and dump dapm status
    • go to /sys/kernel/debug/asoc/platform_name/dapm
    • use command “grep On –r .”, “grep Off –r .”, “cat *” separately and dump dapm status
    • Stop playback
  13. jack-cy-yu commented on Sep 10, 2026

    @jack-cy-yu

    @rjbarcon
    And for register dump, please dump only
    /sys/kernel/debug/regmap/sdw:0:2:025d:1320:01:0/registers
    /sys/kernel/debug/regmap/sdw:0:2:025d:1320:01:0-sdw-mbq/registers
    /sys/kernel/debug/regmap/sdw:0:2:025d:1320:01:1/registers
    /sys/kernel/debug/regmap/sdw:0:2:025d:1320:01:1-sdw-mbq/registers

    From your previous reg log, it seems you weren't dumping registers during playback, because a lot of registers are "XX".

  14. 3 remaining items

  15. rjbarcon commented on Sep 14, 2026

    @rjbarcon
    Author

    @bardliao @jack-cy-yu thank you for the support 🙏

    New discovery: speaker state persists across Linux → Windows depending on AC power

    Previous discovery: Windows → Linux → Windows causes the speakers to stop working in Windows

    I first confirmed that the built-in speakers can work normally in a clean Windows 11 environment.
    However, the following sequence consistently produced a different state:

    1. Boot Windows 11 → built-in speakers are working.
    2. Reboot into Linux/Bazzite → built-in speakers are detected, but there is still no audible output.
    3. Reboot back into Windows 11 → the built-in speakers are now also silent.

    Once Windows enters this state, simply rebooting or shutting down/restarting Windows does not necessarily restore the speakers.

    This suggests that something initialized/configured while Linux is running may persist at the hardware/firmware level across a reboot into Windows.


    Most recent discovery: removing AC power allows Windows audio to recover

    I found a very interesting difference depending on whether the AC charger remains connected.

    With the machine in the bad/silent state:

    1. I unplugged the AC charger.
    2. Shut down the laptop.
    3. Booted directly into Windows 11 while still on battery power.
    4. The built-in speakers worked again.

    I then tested Linux while the AC charger was still unplugged:

    1. Boot Windows on battery → speakers work.
    2. Boot into Linux/Bazzite while still on battery → internal speakers are still silent in Linux.
    3. Reboot from Linux back into Windows, keeping the AC charger unplugged the entire time.
    4. The built-in speakers work again in Windows.

    So unplugging AC does not fix the Linux speaker issue itself, but it appears to prevent the bad speaker state created/left by Linux from persisting into Windows.

    In contrast, when the AC charger remains connected, the behavior is:

    1. Windows → speakers working.
    2. Boot Linux → speakers silent.
    3. Reboot back into Windows → speakers remain silent.

    In other words:

    Sequence Result in Linux Result after returning to Windows
    Windows → Linux → Windows, AC connected Silent Silent
    Windows → Linux → Windows, AC disconnected Silent Working

    Possible implication

    • This makes me suspect that the issue may involve some persistent power/codec/amplifier state rather than only an ALSA/PipeWire routing problem.
    • The RT1320/SoundWire devices may be left in a hardware state that survives a normal reboot while the machine remains externally powered. Removing AC power during shutdown appears to allow Windows to initialize the speaker path correctly again.

    IMPORTANT NOTE:

    • Linux itself still cannot produce sound from the internal speakers, so this does not solve the original Linux problem, but the AC-dependent persistence across operating systems may provide an additional clue about where the failure occurs.
  16. rjbarcon commented on Sep 16, 2026

    @rjbarcon
    Author

    @jack-cy-yu @bardliao

    Update: Speakers now work on CachyOS but in Linux 7.1.x

    I have some important new findings. I can now get the built-in speakers working on Linux but...

    Current working configuration

    I am currently using CachyOS (fresh/clean install) with:

    Linux 7.1.8-4-cachyos-hardened-lto
    

    The built-in speakers are currently working correctly on this kernel.

    This is significant because earlier I could consistently reproduce silent speakers on Bazzite, Ubuntu, CachyOS, etc.

    Non-working configuration

    But speakers does NOT work on the default/stable kernel

    Linux 7.2.5-1-cachyos
    

    1. Earlier Windows -> Linux behavior

    Earlier in the investigation, I observed the following:

    1. Boot Windows 11.

      • Built-in speakers: WORKING
    2. Reboot into Bazzite/Linux.

      • Built-in speakers: NOT WORKING
    3. Reboot back into Windows 11 with the Linux NVMe still installed.

      • Built-in speakers sometimes became NOT WORKING in Windows as well.
    4. At one point, physically removing the Linux NVMe and booting Windows again restored the speakers.

    5. I later found that a complete shutdown / cold boot could also restore Windows audio, so I no longer think removal of the Linux NVMe itself was necessarily the cause.

    This initially suggested that some audio hardware/firmware state might survive an OS transition.


    2. Fedora results

    I later tested Fedora 44 KDE Live.

    Fedora 44 KDE Live

    Built-in speakers:

    WORKING
    

    This was the first Linux environment where I confirmed that the internal speakers could actually work.

    I then installed Fedora Kinoite 44 (because I prefer immutable system - and the desktop environment is KDE Plasma)

    Initial Kinoite deployment

    Kernel:

    6.19.10-300.fc44.x86_64
    

    Built-in speakers:

    WORKING
    

    After updating Kinoite

    Kernel:

    7.2.5-200.fc44.x86_64
    

    Built-in speakers:

    NOT WORKING
    

    IMPORTANT NOTE:

    After this, booting back into the previously working deployment also produced inconsistent behavior. At one point the audio devices disappeared completely; later the devices returned but the internal speakers were still silent.

    So this did not behave like a simple kernel-version-only regression.


    3. CachyOS transition tests

    I then moved to CachyOS and tested kernel 7.1.x, particularly:

    7.1.8-4-cachyos-hardened-lto
    

    I initially experienced another case where the speakers disappeared after a shutdown.

    However, subsequent controlled tests gave very different results.

    Test A

    Windows 11
        -> reboot
    CachyOS 7.1 hardened-LTO
    

    Results:

    Windows: WORKING
    CachyOS: WORKING
    

    Test B

    Windows 11
        -> reboot
    CachyOS 7.1
        -> reboot
    Windows 11
    

    Results:

    Windows: WORKING
    CachyOS: WORKING
    Windows: WORKING
    

    This is particularly interesting because Linux did not leave the speakers in a broken state for Windows.


    4. Shutdown tests

    I also tested shutdown instead of reboot.

    Test C

    Windows 11
        -> shutdown
        -> power on
    CachyOS 7.1
    

    Results:

    Windows: WORKING
    CachyOS: WORKING
    

    Test D

    CachyOS 7.1
        -> shutdown
        -> power on
    CachyOS 7.1
    

    I previously reproduced:

    CachyOS: NOT WORKING
    

    but repeating the same general scenario later resulted in:

    CachyOS: WORKING
    

    I also tested with and without the AC charger connected. I have not found AC power alone to reliably determine whether the speakers work.


    Current conclusion

    The most important finding is that this does not appear to be a permanent hardware failure, and Linux is clearly capable of driving the internal speakers.

    The same machine can transition through:

    Windows -> Linux -> Windows
    

    with the speakers remaining operational in all three boots.

    At other times, very similar boot/shutdown sequences resulted in silent speakers.

    Therefore, the problem now appears to involve some kind of intermittent or persistent initialization/state issue, possibly somewhere around the SoundWire / RT1320 amplifier / SOF initialization path, rather than simply:

    Linux = always broken
    Windows = always working
    

    I do not yet know which component retains or initializes that state, so I do not want to claim a specific root cause.

    Current status

    OS: CachyOS
    Kernel: 7.1.8-4-cachyos-hardened-lto
    Internal speakers: WORKING
    

    I will keep this system/kernel configuration for now and can collect dmesg, SoundWire state, regmap/DAPM dumps, or other diagnostics while the speakers are in a known-working state if that would help compare it against the previous broken state.

  17. rjbarcon commented on Sep 17, 2026

    @rjbarcon
    Author

    @jack-cy-yu @bardliao

    Testing Scenarios

    Okay now, I have done some further testing with my MSI Stealth 16 B3WH (2026) laptop:

    AC Charger Connected

    • Booting from Linux Cachy 7.2 causes speaker to NOT work
    • Then I have booted from Cachy 7.2 -> Windows: there's no sound in speaker in Windows
    • Then I tried to shutdown Windows first and boot again to Windows, still no sound
    • Then have tried to restart Windows and after booting, still no sound on speaker

    Battery Mode (AC Charger Disconnected)

    • But then after shutting Windows and waiting for few seconds, I have unplugged the AC charger
    • Then I boot to Windows; so technically Windows (AC connected) -> Windows (Battery Mode)
    • The sound in the speaker is working... booting Windows in Battery Mode fixes the speaker sound
    • And after this (still in battery mode, ac charger disconnected), I boot to Linux 7.1.8-4-cachyos-hardened-lto and the speaker has now sound in CachyOS Linux as well

    Assessment Summary

    • Booting to Windows in Battery Mode (AC Charger Disconnected) will fix the sounds in built-in speakers
    • Booting Windows to Linux 7.1 will fix the speaker (if windows has good state)
    • Booting Windows to Linux 7.1 will NOT fix the speaker (if windows has bad state -> then you have to boot Windows first in Battery Mode in order to have good state)
    • Booting Windows to Linux 7.2 will break the speaker sound (make it silent)
    • Booting Linux 7.2 to Windows will also break the speaker sound (have to reboot Windows in battery mode to initialize good state)
    • Booting Linux 7.1 to Windows will may or may not fix the speaker (if linux 7.1 has sound, then windows will have sound)
    • Booting Linux 7.1 to Linux 7.2 will break the speaker sound (make it silent)
    • Booting Linux 7.1 to Linux 7.1 (like rebooting) mostly the speaker works, but some case will not work (I have to reboot in Windows to have good state then reboot back to Linux 7.1 so the speaker may work in Linux Distro "CachyOS")
  18. bardliao commented on Sep 17, 2026

    @bardliao
    Collaborator

    @rjbarcon I suspect that the rt1320 Linux codec driver doesn't reset the amp properly. @jack-cy-yu Can you help on this?

  19. jack-cy-yu commented on Sep 17, 2026

    @jack-cy-yu
  20. rjbarcon commented on Sep 20, 2026

    @rjbarcon
    Author

    @jack-cy-yu @bardliao Thank you for the patch. I built and tested it, but unfortunately the internal speakers are still silent.

    Patch/build Verification

    • I applied the attached patch: ASoC: rt1320-sdw: Add reset function before first HW initialization to CachyOS Linux 7.2.6-1 and built a separate kernel: linux-cachyos-rt1320test 7.2.6-1
    • The patch applied successfully to: sound/soc/codecs/rt1320-sdw.c and I verified that rt1320_reset() was present in the prepared source.
    • The kernel build completed successfully, including compilation of snd-soc-rt1320-sdw, the packages installed correctly, and I confirmed after boot that I was running: 7.2.6-1-cachyos-rt1320test
    • So as far as I can verify, I was testing the intended patched kernel.

    Result & Sanity Testing

    • Unfortunately, the patch did not restore speaker output on 7.2.6-1-cachyos-rt1320test.
    • I then did additional sanity testing because this machine appears to have a persistent/inherited RT1320 hardware state across operating-system reboots.
    • I disconnected the AC charger and did the following tests on battery:
    Sequence Result
    Windows 11 → Restart → Linux 7.1.8-4-cachyos-hardened-lto Speaker works in Linux 7.1
    Windows 11 → Shutdown, wait a few seconds → Linux 7.1.8-4 Speaker does NOT work
    Linux 7.1.8-4 → Shutdown → Windows 11 Speaker works in Windows
    Windows 11 → Restart → patched Linux 7.2.6-1-cachyos-rt1320test Speaker does NOT work
    • The last comparison seems especially important:

      • Windows → Restart → Linux 7.1 = speaker works
      • Windows → Restart → Linux 7.2.6 + reset patch = speaker remains silent
    • Windows has consistently been able to restore working speaker output during these tests.

    • This makes me suspect that a warm reboot from Windows preserves some correctly initialized RT1320 state that Linux 7.1 can reuse, while a full shutdown clears that state.

    • However, Linux 7.2.6 still cannot produce audio even when entered through the same Windows → Restart sequence.

    • The reset patch may therefore be one necessary part of the fix, but there may still be another missing step later in the RT1320 initialization sequence.


    Remarks

    • Given that this MSI is a new Panther Lake platform, I wonder whether the reset succeeds but Linux is still missing or incorrectly performing a later initialization step such as the vendor preset/MCU initialization, base-clock/PLL configuration, power state, or SoundWire initialization.

    • The fact that the same Windows warm-reboot state works with 7.1 but not with 7.2.6 seems like it may also be useful for identifying what changed between those kernel versions.

      WORKING: Windows → Restart → Linux 7.1
      
      SILENT: Windows → Restart → Linux 7.2.6
      
      SILENT: Windows → Restart → Linux 7.2.6 + patch
      
    • I'm happy to build another test kernel, add debug prints, test another patch, or collect specific RT1320/SoundWire register dumps if you can tell me what would be most useful → logs.txt

  21. rjbarcon commented on Oct 1, 2026

    @rjbarcon
    Author

    @jack-cy-yu @bardliao

    Overview (Workaround)

    • Update: I built and tested a custom Linux 7.2.6 kernel with an additional diagnostic patch, rt1320-preserve-first-attach-test.patch.

    • The patch allows the existing RT1320 state to be preserved on the first SoundWire attachment instead of always applying the initialization preset. I booted with:

      snd_soc_rt1320_sdw.preserve_initialization=1
      
    • So, in this working case, Linux did not re-apply the RT1320 preset on the first attachment.

    Rationale

    • IMPORTANT: I tested this because I want to boot into Linux 7.2.x with working speakers; note that I still need to boot from Windows 11 to initialize the state of RT1320 properly then I can boot to linux with speakers working

    • ONGOING: I'm still working on a proper solution that allows me to boot directly into Linux 7.2.x with working speakers without having to boot into Windows first.

    • After booting into Windows 11 first and then rebooting into the patched Linux kernel 7.2.x, the built-in speakers are working.

    • This is NOT the final fix. My current suspicion is that this works because Windows leaves the RT1320/ALC1320 in an already initialized, working state before Linux boots. A cold boot still fail because the amplifier would need to be initialized properly from a cold state; which is the goal I'm trying to find out...

    Patch file: rt1320-preserve-first-attach-test.patch

  22. jack-cy-yu commented on Oct 14, 2026

    @jack-cy-yu

    @rjbarcon

    Thanks a lot for the detailed testing and the diagnostic patch. This is very helpful.

    Your result suggests that the issue may not be limited to the 7.2 first-attach behavior. Whenever the Linux preset is applied, the speakers are silent (cold boot, Windows warm restart → 7.2 default, and Windows warm restart → 7.2 + reset patch). When the preset is skipped and the state left by Windows is preserved, the speakers work. So we suspect the preset sequence/table itself may not be correct for this platform, and preserve_initialization should be treated as a temporary workaround rather than the final fix.

    To narrow this down, could you please collect the following?

    1. RT1320 init: log lines from your diagnostic patch

    Please capture the dev_info output for both amps in these three scenarios:

    1. Cold boot
    2. Windows warm restart → Linux 7.2.x with preserve_initialization=0
    3. Windows warm restart → Linux 7.2.x with preserve_initialization=1

    e.g. dmesg | grep "RT1320 init"

    We are mainly interested in status (whether it is 0x0 after a Windows warm restart and whether the needs-initialization bit is set on cold boot) and version.

    For a reliable cold boot, please:

    1. Shut down
    2. Unplug the AC adapter
    3. Wait at least 30 seconds
    4. Power on

    (With AC connected, the amplifier power rails may stay on during shutdown, so it may not be a true power-on reset.)

    2. Register dumps during playback

    Please dump the registers while audio is playing (e.g. with speaker-test running in another terminal), in two states:

    • Good state: Windows warm restart → Linux 7.2.x with preserve_initialization=1
    • Bad state: cold boot

    Nodes:

    /sys/kernel/debug/regmap/sdw:0:2:025d:1320:01:0/registers
    /sys/kernel/debug/regmap/sdw:0:2:025d:1320:01:0-sdw-mbq/registers
    /sys/kernel/debug/regmap/sdw:0:2:025d:1320:01:1/registers
    /sys/kernel/debug/regmap/sdw:0:2:025d:1320:01:1-sdw-mbq/registers

    The diff between the good and bad dumps should show which registers are set by Windows but not set, or set differently, by the Linux preset. That will be the most direct clue for fixing the initialization sequence.

    Thanks!

  23. jack-cy-yu commented on Oct 14, 2026

    @jack-cy-yu

    @rjbarcon

    Another user with a similar MSI Panther Lake laptop reported above that the speakers work once the preset is applied on the first init and the MCU patch is loaded on both amps:

    rt1320_load_mcu_patch: MCU patch realtek/rt1320/rt1320-patch-code-vc.bin loaded, 15232 bytes

    Since 7.2 already applies the preset on the first init, we would like to check whether the MCU patch is actually loaded on your machine. If the preset is applied but the MCU patch fails to load, that could explain why 7.2 stays silent while preserve_initialization=1 (which keeps the state left by Windows) works.

    Could you please check the following on Linux 7.2.x without preserve_initialization, after a cold boot (shut down, unplug AC, wait 30+ seconds, power on)?

    1. Whether the firmware file exists:

      ls -l /lib/firmware/realtek/rt1320/

    2. Whether there are any RT1320 or firmware loading messages/errors (e.g. Direct firmware load ... failed with error -2):

      dmesg | grep -iE "rt1320|firmware"

    3. The RT1320 init: line from your diagnostic patch for both amps, so we can compare status and version with the Prestige 14 (status=0x41, version_id=2):

      dmesg | grep "RT1320 init"

    Note: the "loaded, 15232 bytes" message above may come from the other user's own debug prints, so you may not see a success message with the stock driver. A missing firmware file or a load error is what we are looking for.

    Thanks!

  24. bardliao commented on Oct 15, 2026

    @bardliao
    Collaborator

    Nodes:

    /sys/kernel/debug/regmap/sdw:0:2:025d:1320:01:0/registers /sys/kernel/debug/regmap/sdw:0:2:025d:1320:01:0-sdw-mbq/registers /sys/kernel/debug/regmap/sdw:0:2:025d:1320:01:1/registers /sys/kernel/debug/regmap/sdw:0:2:025d:1320:01:1-sdw-mbq/registers

    The diff between the good and bad dumps should show which registers are set by Windows but not set, or set differently, by the Linux preset. That will be the most direct clue for fixing the initialization sequence.

    Thanks!

    I don't think the regdump is reliable. You need to do echo 1 > cache_bypass to bypass the cache first. Because if the codec is not reset properly, the cache value will not be aligned with the HW value.

  25. rjbarcon commented on Oct 24, 2026

    @rjbarcon
    Author

    Got it @bardliao @jack-cy-yu ongoing testing this weekend

  26. rjbarcon commented on Oct 29, 2026

    @rjbarcon
    Author

    RT1320 A/B/C Diagnostic Results

    Hi @jack-cy-yu @bardliao

    I've completed the requested tests using my patched 7.3.0.4-cachyos-custom kernel.

    Test Boot Sequence preserve_initialization Preset Speakers
    A Cold boot → Linux 0 Applied Silent
    B Windows 11 → Restart → Linux 0 Applied Silent
    C Windows 11 → Restart → Linux 1 Skipped Working

    Key findings:

    • Both RT1320 amplifiers report id=0x6981, version=2.
    • Test A: Initial amp_func_status=0x61; preset applied on both amplifiers.
    • Test B: Initial amp_func_status=0x41; preset still applied on both amplifiers. Amplifier 1 also reports rt1320_pde_transition_delay PDE to PS0 is NOT ready.
    • Test C: Initial amp_func_status=0x41; preset skipped on both amplifiers, and the speakers work.
    • Tests A and C: Captured all four regmaps (regular and MBQ for both amplifiers) during active speaker-test playback, with cache_only=N and cache_bypass=Y.
    • Comparing A and C reveals substantial register-state differences, including registers affected by the Linux preset.
    • The RT1320 VC firmware file is present, but the available logs do not conclusively verify successful MCU patch loading.

    Observation:

    • The results suggest that applying the Linux RT1320 preset may disrupt the working state initialized by Windows.
    • Preserving that state allows the speakers to function. The exact root cause remains unconfirmed.

    I've attached the diagnostic logs and register dumps for comparison.
    Could you please review the findings and advise on the next steps, particularly regarding preset initialization, MCU patch loading, and power-state transitions? Thank you!

    Test Detailed Logs
    A TestA_ColdBootLinux_PreseverInit_0.txt
    B TestB_Win11ToLinux_PreserveInit_0.txt
    C TestC_Win11ToLinux_PreserveInit_1.txt
  27. rjbarcon commented on Nov 5, 2026

    @rjbarcon
    Author

    MS-2631 RT1320 DSP initialization research

    Source patch attached (BUILD-ONLY; NOT HARDWARE-TESTED)


    Hi @jack-cy-yu @bardliao,

    While waiting for your feedback on my previously posted A/B/C diagnostic results, I investigated the difference between the silent cold-boot state and the working Windows-initialized state further. I am attaching the actual experimental source patch and its supporting review files.

    Additional observation: Both amplifiers showed these A/C register differences during the earlier captures:

    Register A: cold Linux / silent C: Windows → Linux, preset skipped / working
    0xC081 0xFE 0xFC
    0xC5C3 0xF2 0xF3
    0xC5C8 0x03 0x05
    0xC598 0x04 0x00

    The working values for the first three registers also appear in rt1320_dspfw_load_code(). This suggests investigating the advanced-DSP initialization path as well as the existing preset and MCU patch, but it does not establish the root cause.

    • What I prepared: ms2631-dsp-experimental.patch is a research prototype for the MSI MS-2631 (dual RT1320 VC, UIDs 0/1). It explores a per-UID DSP image and AFX/RTLSM command sequence inferred from offline analysis of the MSI Windows driver. It also contains the already-discussed preserve_initialization workaround and some shared driver helper/error-handling changes.

    • Actual validation: I built 7.3.1.1-cachyos-test1 (linux-cachyos-test1, CachyOS 7.3.1) with this exact patch. The RT1320 module compiled, and the kernel and headers packages were generated. The patch SHA-256 is 161528a17990301056758f24caab8f9dcfc0316f5e07dab3db5f6220fa4d38b0.

    • I have NOT installed or booted this kernel, installed the generated experimental firmware, enabled the test flag, or issued any commands to the amplifier. This is due to I may messed up the RT1320 firmware or may damage both the hardware (chip & speaker).

    • Safety concern: Although the new DSP test flag defaults to disabled and there are board/chip/UID checks, I have NOT verified the transfer protocol, command acknowledgment, speaker-specific R0/T0 calibration, protection limits, or failure recovery. This is not a verified fix or a patch ready for hardware testing/upstream merging.

    • Attached: MS2631_RT1320_maintainer_review_SANITIZED.zip, containing the unchanged patch, README, mocked helper tests, a redacted offline firmware-preparation script, and build summary. The prior A/B/C logs are already linked above in this issue.

    Could you please review the approach and advise whether the RT1320 advanced DSP path is relevant here, what supported firmware/command format and speaker-protection checks are expected, and whether you would prefer a smaller diagnostics-only patch before any hardware execution? So that I may install this test patch I've been working on.

    Thank you for your help.

    Test Patch: MS2631_RT1320.zip

  28. jack-cy-yu commented on Nov 5, 2026

    @jack-cy-yu

    @rjbarcon

    Could you add this in rt1320_vc_blind_write[] and try again?

    static const struct reg_sequence rt1320_vc_blind_write[] = {

    •    { 0xc000, 0x03 },
      
      { 0xc003, 0xe0 },
      { 0xe80a, 0x01 },
      { 0xc5c3, 0xf2 },
      ...
      };
  29. MingKangLin commented on Nov 5, 2026

    @MingKangLin

    Hi @rjbarcon
    I’m providing the ENC Dump Tool. Please play an audio file in Windows and capture a dump log under each of the following conditions:

    1. Audio output works normally(Pass)
    2. No audio output(Fail)
      Please send us the two generated .bin files, and include “Pass” or “Fail” in each filename so we can identify and compare the logs.

    EncDumpTool.zip

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions