Skip to content

Samsung Galaxy Book4 Pro 14" (NP940XGK) - speakers do not work #5002

Open

Description

@dgunay

EDIT: for anyone coming across this, here is the outcome of my attempt to reverse engineer the codec configuration: https://github.com/dgunay/galaxy-book4-pro-reverse-engineering

The speakers on the Galaxy Book4 Pro 14" NP940XGK don't work out of the box on Linux. The issue seems very similar to previously reported issues with Galaxy Book2 and Book3 laptop speakers not producing sound despite seeing the volume meter move when sound is being output. #4055

I tried using many of the provided hda-verb scripts but they don't fix the problem - still no sound output.

Bluetooth headphones do work. I haven't tried using the onboard headphone jack yet.

My hunch is that the HDA verb sequence is different and needs to be recaptured for this specific device. I might give this a shot while I'm still in the return window, but it's my first time doing something like this so no promises.

Activity

  1. plbossart commented on May 17, 2024

    @plbossart
    Member
  2. dgunay commented on May 17, 2024

    @dgunay
    Author

    I presume you've looked at https://thesofproject.github.io/latest/getting_started/intel_debug/suggestions.html for the verb tables?

    I looked at the Reverse-engineer the Windows audio driver section yesterday while rabbit-holing in that direction but not the rest of it. I'll go through it step by step tonight.

    Thank you for the very prompt response.

  3. dgunay commented on May 18, 2024

    @dgunay
    Author
  4. dgunay commented on May 18, 2024

    @dgunay
    Author

    I followed the steps outlined in Disable SOF on PCI/HDaudio devices to test audio playback. No sounds were produced, again despite the volume monitor showing movement on the output device:

    image

  5. dgunay commented on May 18, 2024

    @dgunay
    Author

    Followed the Try booting into Windows first, then reboot into Linux step. No dice. Sound works in Windows, continues to not work in Linux. I didn't expect this to work since I booted to Windows quite a bit at first to get firmware updates, but worth a shot.

  6. dgunay commented on May 18, 2024

    @dgunay
    Author

    I'm going to save the reverse engineering step for later since the other steps look like much lower hanging fruit.

  7. dgunay commented on May 18, 2024

    @dgunay
    Author

    For Make sure the ME is enabled - I'm not seeing any way of configuring ME in the BIOS for this laptop, and I think I remember Windows Update downloading drivers for Intel ME when I first booted the thing, so I'm going to just assume for now that I have ME and it is enabled.

  8. dgunay commented on May 18, 2024

    @dgunay
    Author

    Tried Test at the ALSA ‘hw’ device level

    I'm not totally sure what to make of the commands mentioned in the guide.

    Installing the suggested packages didn't do anything. When I enabled pulseaudio, it actually broke audio in a different way (YouTube videos would no longer play in Firefox until I disabled it). Installing pulseaudio-alsa fixed that, but did not result in sound coming out of the speakers.

  9. dgunay commented on May 18, 2024

    @dgunay
    Author

    I've done Verify mixer settings multiple times now so I'm pretty sure the mixer isn't muting my speakers.

  10. dgunay commented on May 18, 2024

    @dgunay
    Author

    Enabled dynamic debugging and ran sudo dmesg | rg -i 'snd|sof|pci'

    Maybe someone more knowledgeable than me can glean something from this: https://gist.github.com/dgunay/0eea4dc528c55d30906429e9419d8264

  11. dgunay commented on May 18, 2024

    @dgunay
    Author

    I'm not really qualified to tell whether the SOF tracing step is necessary yet, but I have sof-logger installed now.

  12. dgunay commented on May 18, 2024

    @dgunay
    Author

    I don't think Digital mic issues applies to me, so I'm skipping that step.

  13. dgunay commented on May 18, 2024

    @dgunay
    Author

    Looks like my system does not have ES8336 support according to the output of alsa-info - skipping that step.

  14. 37 remaining items

  15. Andycodeman commented on Feb 14, 2026

    @Andycodeman

    Glad to hear it @Santigf12 and thanks for the update with your specific adjustment! I'll look to add notes and streamline more.

    Edit: Added specific support for signing on Fedora so hopefully Fedora users won't have to do this manually like you did.

  16. dginhoux commented on Feb 14, 2026

    @dginhoux

    Hi @Andycodeman,

    Thank for your help, this is what i have :

    root@pc-dg21-u:~# journalctl -k -b | grep "MAX98390 HDA I2C probe"
    Feb 14 14:02:20 pc-dg21-u kernel: max98390-hda i2c-MAX98390:00: MAX98390 HDA I2C probe: addr=0x38 index=0 name=i2c-MAX98390:00
    root@pc-dg21-u:~# ls /sys/bus/i2c/devices/ | grep -E '003[89cd]|MAX'
    i2c-MAX98390:00
    root@pc-dg21-u:~# journalctl -k -b | grep -i "max98390.*fail|max98390.*err"
    
  17. dginhoux commented on Feb 14, 2026

    @dginhoux

    Just pulled yours repos with all yours commits of the day and test a fresh ubuntu 25.10 with latest mainline kernel 6.18.7.
    Uninstall and install again, then reboot ; secureboot is enabled and working fine and try without it too (same result)

    diag-sgb4p_1.log

  18. Andycodeman commented on Feb 14, 2026

    @Andycodeman

    Just pulled yours repos with all yours commits of the day and test a fresh ubuntu 25.10 with latest mainline kernel 6.18.7. Uninstall and install again, then reboot ; secureboot is enabled and working fine and try without it too (same result)

    diag-sgb4p_1.log

    Thanks for the logs! Helped find the bug — the I2C bus detection was failing on your model. The setup script assumed a specific sysfs path structure that doesn't match the Pro4.

    Your service log confirms it:
    max98390-hda: No MAX98390 ACPI device found on I2C bus

    This means only the first amp (0x38, left woofer) was active — the other 3 were never created. Just pushed a fix.
    Get the latest from the repo and run the install script again.

    After reboot, verify all amps probed:
    journalctl -k -b | grep "MAX98390 HDA I2C probe"
    ls /sys/bus/i2c/devices/ | grep -E '003[89cd]|MAX'

    You should see 4 amps (0x38, 0x39, 0x3c, 0x3d) and audio from both sides.

  19. dginhoux commented on Feb 14, 2026

    @dginhoux

    Hi, i'm just trying to find and understand the same things by playing with your find_i2c_bus, find_present_addrs and the content of my device /sys content :

    dginhoux@pc-dg21-u:/sys/bus/acpi/devices/MAX98390:00$ ll
    total 0
    drwxr-xr-x 4 root root    0 Feb 14 22:13 ./
    drwxr-xr-x 7 root root    0 Feb 14 22:30 ../
    -r--r--r-- 1 root root 4096 Feb 14 22:30 hid
    -r--r--r-- 1 root root 4096 Feb 14 22:30 modalias
    -r--r--r-- 1 root root 4096 Feb 14 22:30 path
    lrwxrwxrwx 1 root root    0 Feb 14 22:11 physical_node@ -> ../../../../../pci0000:00/0000:00:15.2/i2c_designware.2/i2c-2/i2c-MAX98390:00
    drwxr-xr-x 2 root root    0 Feb 14 22:30 power/
    -r--r--r-- 1 root root 4096 Feb 14 22:30 status
    lrwxrwxrwx 1 root root    0 Feb 14 22:02 subsystem@ -> ../../../../../../bus/acpi
    -rw-r--r-- 1 root root 4096 Feb 14 22:30 uevent
    -r--r--r-- 1 root root 4096 Feb 14 22:30 uid
    drwxr-xr-x 3 root root    0 Feb 14 22:30 wakeup/
    
    
    
    dginhoux@pc-dg21-u:/sys/bus/i2c/devices$ ll
    total 0
    drwxr-xr-x 2 root root 0 Feb 14 22:02 ./
    drwxr-xr-x 4 root root 0 Feb 14 22:02 ../
    lrwxrwxrwx 1 root root 0 Feb 14 22:02 i2c-0@ -> ../../../devices/pci0000:00/0000:00:15.0/i2c_designware.0/i2c-0
    lrwxrwxrwx 1 root root 0 Feb 14 22:02 i2c-1@ -> ../../../devices/pci0000:00/0000:00:15.1/i2c_designware.1/i2c-1
    lrwxrwxrwx 1 root root 0 Feb 14 22:02 i2c-10@ -> ../../../devices/pci0000:00/0000:00:02.0/i2c-10
    lrwxrwxrwx 1 root root 0 Feb 14 22:02 i2c-11@ -> ../../../devices/pci0000:00/0000:00:02.0/i2c-11
    lrwxrwxrwx 1 root root 0 Feb 14 22:02 i2c-12@ -> ../../../devices/pci0000:00/0000:00:02.0/i2c-12
    lrwxrwxrwx 1 root root 0 Feb 14 22:02 i2c-13@ -> ../../../devices/pci0000:00/0000:00:02.0/i2c-13
    lrwxrwxrwx 1 root root 0 Feb 14 22:02 i2c-14@ -> ../../../devices/pci0000:00/0000:00:02.0/drm/card1/card1-eDP-1/i2c-14
    lrwxrwxrwx 1 root root 0 Feb 14 22:02 i2c-15@ -> ../../../devices/pci0000:00/0000:00:02.0/drm/card1/card1-DP-1/i2c-15
    lrwxrwxrwx 1 root root 0 Feb 14 22:02 i2c-16@ -> ../../../devices/pci0000:00/0000:00:02.0/drm/card1/card1-DP-2/i2c-16
    lrwxrwxrwx 1 root root 0 Feb 14 22:02 i2c-17@ -> ../../../devices/pci0000:00/0000:00:02.0/drm/card1/card1-DP-3/i2c-17
    lrwxrwxrwx 1 root root 0 Feb 14 22:02 i2c-2@ -> ../../../devices/pci0000:00/0000:00:15.2/i2c_designware.2/i2c-2
    lrwxrwxrwx 1 root root 0 Feb 14 22:02 i2c-3@ -> ../../../devices/pci0000:00/0000:00:15.3/i2c_designware.3/i2c-3
    lrwxrwxrwx 1 root root 0 Feb 14 22:02 i2c-4@ -> ../../../devices/pci0000:00/0000:00:1f.4/i2c-4
    lrwxrwxrwx 1 root root 0 Feb 14 22:02 i2c-5@ -> ../../../devices/pci0000:00/0000:00:02.0/i2c-5
    lrwxrwxrwx 1 root root 0 Feb 14 22:02 i2c-6@ -> ../../../devices/pci0000:00/0000:00:02.0/i2c-6
    lrwxrwxrwx 1 root root 0 Feb 14 22:02 i2c-7@ -> ../../../devices/pci0000:00/0000:00:02.0/i2c-7
    lrwxrwxrwx 1 root root 0 Feb 14 22:02 i2c-8@ -> ../../../devices/pci0000:00/0000:00:02.0/i2c-8
    lrwxrwxrwx 1 root root 0 Feb 14 22:02 i2c-9@ -> ../../../devices/pci0000:00/0000:00:02.0/i2c-9
    lrwxrwxrwx 1 root root 0 Feb 14 22:02 i2c-GXTP7936:00@ -> ../../../devices/pci0000:00/0000:00:15.1/i2c_designware.1/i2c-1/i2c-GXTP7936:00
    lrwxrwxrwx 1 root root 0 Feb 14 22:02 i2c-MAX98390:00@ -> ../../../devices/pci0000:00/0000:00:15.2/i2c_designware.2/i2c-2/i2c-MAX98390:00
    lrwxrwxrwx 1 root root 0 Feb 14 22:02 i2c-OVTI02C1:00@ -> ../../../devices/pci0000:00/0000:00:15.3/i2c_designware.3/i2c-3/i2c-OVTI02C1:00
    lrwxrwxrwx 1 root root 0 Feb 14 22:02 i2c-ZNT0001:00@ -> ../../../devices/pci0000:00/0000:00:15.0/i2c_designware.0/i2c-0/i2c-ZNT0001:00
    
  20. dginhoux commented on Feb 14, 2026

    @dginhoux

    Yes, and now it's fully working left/right with your latest commit (dd30c15).
    I hope your work will help lot of samsung laptop owners.
    Amazing work

    dginhoux@pc-dg21-u:~/samsung-galaxy-book4-linux-fixes/speaker-fix$ ./max98390-hda-i2c-setup.sh
    max98390-hda: No additional amplifiers found on bus 2 (1-amp or already bound)
    
    
    
    
    inhoux@pc-dg21-u:~/samsung-galaxy-book4-linux-fixes/speaker-fix$  journalctl -k -b | grep "MAX98390 HDA I2C probe"
    Feb 14 22:02:28 pc-dg21-u kernel: max98390-hda i2c-MAX98390:00: MAX98390 HDA I2C probe: addr=0x38 index=0 name=i2c-MAX98390:00
    Feb 14 22:38:32 pc-dg21-u kernel: max98390-hda i2c-MAX98390:00: MAX98390 HDA I2C probe: addr=0x38 index=0 name=i2c-MAX98390:00
    Feb 14 22:38:33 pc-dg21-u kernel: max98390-hda 2-0039: MAX98390 HDA I2C probe: addr=0x39 index=1 name=2-0039
    Feb 14 22:38:33 pc-dg21-u kernel: max98390-hda 2-003c: MAX98390 HDA I2C probe: addr=0x3c index=2 name=2-003c
    Feb 14 22:38:33 pc-dg21-u kernel: max98390-hda 2-003d: MAX98390 HDA I2C probe: addr=0x3d index=3 name=2-003d
    
    
    
    dginhoux@pc-dg21-u:~/samsung-galaxy-book4-linux-fixes/speaker-fix$  ls /sys/bus/i2c/devices/ | grep -E '003[89cd]|MAX'
    2-0039
    2-003c
    2-003d
    i2c-MAX98390:00
    
    
    
    dginhoux@pc-dg21-u:~/samsung-galaxy-book4-linux-fixes/speaker-fix$  systemctl status max98390-hda-i2c-setup.service
    ● max98390-hda-i2c-setup.service - Create I2C devices for MAX98390 HDA speaker amplifiers
         Loaded: loaded (/etc/systemd/system/max98390-hda-i2c-setup.service; enabled; preset: enabled)
         Active: active (exited) since Sat 2026-02-14 22:38:32 CET; 8min ago
     Invocation: a3c277aebaae487c9f6625d19430b4d4
        Process: 20635 ExecStart=/usr/local/sbin/max98390-hda-i2c-setup.sh start (code=exited, status=0/SUCCESS)
       Main PID: 20635 (code=exited, status=0/SUCCESS)
       Mem peak: 3.7M
            CPU: 35ms
    
    Feb 14 22:38:32 pc-dg21-u systemd[1]: Starting max98390-hda-i2c-setup.service - Create I2C devices for MAX98390 HDA speaker amplifiers...
    Feb 14 22:38:32 pc-dg21-u max98390-hda-i2c-setup.sh[20635]: max98390-hda: Found 3 additional amplifier(s) on bus 2: 0x39 0x3c 0x3d
    Feb 14 22:38:32 pc-dg21-u systemd[1]: Finished max98390-hda-i2c-setup.service - Create I2C devices for MAX98390 HDA speaker amplifiers.
    
    
    
  21. Andycodeman commented on Feb 14, 2026

    @Andycodeman

    @dginhoux - Awesome! Glad to hear it worked as I thought it might have been a race condition but nope, looks like the last fix will work for book4 Pro users. Thanks for the willingness to troubleshoot. :)

  22. dginhoux commented on Feb 14, 2026

    @dginhoux

    Because i'm in testing mode, i'll reinstall from scratch an ubuntu 25.10, just os upgrade and add start the patch.
    Let me 20/30min...

    Seen on the windows (dualboot) an new bios v13, i'm doing upgrade

  23. dginhoux commented on Feb 14, 2026

    @dginhoux

    Fully working on fresh ubuntu install 25.10, kernek 6.17.0 on the book4 pro14 ; and the same with mainline 6.18.7 kernel.

  24. stephanlensky commented on Feb 15, 2026

    @stephanlensky

    @Andycodeman thanks for putting this together.

    Battery Impact: This workaround keeps the speaker amplifiers powered on at all times (even when not playing audio), which uses an estimated 0.3–0.5W extra (~3–5% battery life). This is a limitation of the workaround approach

    Is this a limitation just for your DKMS module, or this the case for the kernel patch in #5616 as well?

    Is there anyone on this thread who has experience contributing to the kernel? It would be great to get the code from #5616 merged into mainline, but I'm not sure where to start.

  25. Andycodeman commented on Feb 15, 2026

    @Andycodeman

    @Andycodeman thanks for putting this together.

    Battery Impact: This workaround keeps the speaker amplifiers powered on at all times (even when not playing audio), which uses an estimated 0.3–0.5W extra (~3–5% battery life). This is a limitation of the workaround approach

    Is this a limitation just for your DKMS module, or this the case for the kernel patch in #5616 as well?

    Is there anyone on this thread who has experience contributing to the kernel? It would be great to get the code from #5616 merged into mainline, but I'm not sure where to start.

    Good question! The always-on battery impact is only a limitation of this DKMS workaround only, not of the upstream PR #5616.

    The difference: the upstream PR modifies patch_realtek.c to add a Samsung-specific quirk that creates an HDA component master with proper playback hooks - the amps power on when audio plays and power off when it stops. This DKMS package
    can't modify patch_realtek.c (that would require recompiling the kernel), so we bypass the quirk entirely and set the amps to "always on" during driver probe instead. That's the trade-off for easy DKMS install vs. full kernel compilation (this DKMS does it intentionally to avoid kernel compilation).

    Once #5616 lands in mainline (expected kernel 7.0 or 7.1), proper power management comes with it — and this DKMS package will auto-detect native support and remove itself.

  26. stephanlensky commented on Feb 15, 2026

    @stephanlensky

    Once #5616 lands in mainline (expected kernel 7.0 or 7.1),

    Is there a patch already submitted for this? Or is it an LLM hallucination?

  27. Andycodeman commented on Feb 15, 2026

    @Andycodeman

    Once #5616 lands in mainline (expected kernel 7.0 or 7.1),

    Is there a patch already submitted for this? Or is it an LLM hallucination?

    Definitely an estimate from AI due to submission date and number of responses, but no confirmation/guarantees on any of it.

  28. stephanlensky commented on Feb 15, 2026

    @stephanlensky

    Well, we need to submit a patch via email unfortunately, as discussed a bit in #5616. That pull request will never be merged since it's not touching code in SOF.

  29. Andycodeman commented on Feb 15, 2026

    @Andycodeman

    Well, we need to submit a patch via email unfortunately, as discussed a bit in #5616. That pull request will never be merged since it's not touching code in SOF.

    Ah, didn't realize that was the current state - so the "real" fix is even further out as of this moment. :/

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

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions