Jump to content
95 posts in this topic

Recommended Posts

@MaLd0n you are crazy 😃

I only installed HDAUniversal (and disabled AppleALC), and it works perfectly, including my microphone.
That mic wouldn't work with VoodooHDA (even though it was detected), but everything runs fine with your KEXT 🤩

 

Thank you so much! :thumbsup_anim:

 

btw. my machine is a Fujitsu Lifebook with a Realtek ALC255.

I set the layout-id via a DeviceProperty entry: "layout-id", type: data, value: <FF000000>

  • Like 6
On 7/3/2026 at 4:24 PM, MaLd0n said:

The problem was that the app was not always using the real hardware codec ID as the primary source. Check if work now...

 

Perfect, ALC1220 well detected, thanks.

  • Like 3
1 hour ago, Oyecomova said:

HDAUniversal does not work for my LG Ultra HD monitor connected via HDMI to the Intel CoffeeLake-H GT2 [UHD Graphics 630] (Slot 0, GPU 1)

 

On 7/3/2026 at 6:56 PM, LockDown said:

 

Only for onboard sound for now

 

  • Like 4

I'm thoroughly enjoying the sound quality HDAUniversal as my testing continues.  I'm currently trying to diagnose one issue and wanted to ask about it first before I investigate further.  When my HP EliteDesk 800 G4 Mini sleeps and wakes, there is a loud audio "tick" or "pop" (both when entering sleep and again when waking from sleep).  Is this unique to me, or are others observing this?  I don't experience this with VoodooHDA or AppleALC.  Thank you.

  • Like 4
23 hours ago, MaLd0n said:

reproduce this problem and extract logs. lets check it.

Thank you, MaLd0n...

 

  1. The zip generated by Collect-HDAUniversal.command: attached

  2. Your codec model: Conexant CX20632

  3. Your layout-id: 20

  4. macOS version: 26.6 Beta (25G5052e)

  5. Bootloader used: Open Core 1.0.7

  6. Whether the kext is installed in /Library/Extensions: Yes

  7. A clear description of the problem: On transition to sleep, audio generates a loud "tick"/"pop"; On wake, audio generates a loud "tick"/"pop".  I do not observe this with VoodooHDA 4.0 or with AppleALC/AppleHDA.

  8. Steps to reproduce the issue: Sleep and listen for loud "tick"/'pop"; Wake and listen for loud "tick"/"pop"

 

 

EDIT: @MaLd0n I'm not sure if this helps, but when using VoodooHDA.kext 4.0, the HP EliteDesk 800 G4 Mini requires DisableInputMonitor=True to avoid loud "pop" on macOS startup.

Screenshot2026-07-06at9_27_36AM.png.08de19aad5436e26eecd41d1dc86db71.png

 

EDIT2: @MaLd0n To be sure I wasn't leading you on a wild goose chase, I just performed a clean installation of macOS Tahoe 26.5.2 on this exact same hackintosh (HP EliteDesk 800 G4 Mini) and then installed HDAUniversal with SIP csr-active-config = <03000000>.  The loud "pop" on Sleep and Wake is still reproducible on this brand-new installation of macOS Tahoe.  For testing, I'm using your latest HDAUniversal that you posted here. I have no other apps installed, so this test environment is a clean installation of Tahoe 26.5.2 with only HDAUniversal installed.

HDAUniversal-Test-Logs-2026-07-05_20-34-06.zip

Edited by deeveedee
  • Like 3
15 hours ago, deeveedee said:

model: Conexant CX20632

HDAUniversal-Release.zipTest this.

Everything related to audio has to be handled very carefully because it is extremely complex. We change one thing and end up breaking another. It is way too complicated.

On sleep, HDAUniversal now mutes the active analog output, waits 3 ms, disables EAPD/PinControl, and detaches the DAC stream before power-down.
On wake, it restores the route silently, enables PinControl/EAPD only after the path/DAC are ready, waits 3 ms, then reapplies the saved volume/mute state.

Quote

bool HDAController::prepareAnalogOutputForSleep(UInt8 cad, const AnalogPath *path) {
    if (!mRegs || !validateAnalogOutputPath(path)) return false;
    UInt32 r = 0;
    bool ok = true;

    ok &= setAnalogOutputVolume(cad, path, 0, true);
    IODelay(3000);

    sendVerb(cad, path->pinNid, HDAU::SetEAPD, 0x00, &r);
    sendVerb(cad, path->pinNid, HDAU::SetPinControl, 0x00, &r);
    sendVerb(cad, path->dacNid, HDAU::SetConverterStreamChannel, 0x00, &r);

    OSSynchronizeIO();
    return ok;
}

Quote

bool HDAController::programAnalogOutputPathWakeSilent(UInt8 cad,
                                                      const AnalogPath *path,
                                                      UInt8 streamId,
                                                      UInt16 format) {
    if (!mRegs || !streamId || !validateAnalogOutputPath(path)) return false;

    UInt8 nodeCount = path->nodeCount > sizeof(path->nodes) ?
                      (UInt8)sizeof(path->nodes) : path->nodeCount;
    UInt32 r = 0;
    bool ok = true;

    powerPathNodes(cad, path->nodes, nodeCount);
    sendVerb(cad, 0x01, HDAU::SetPowerState, 0x00, &r);
    sendVerb(cad, path->pinNid, HDAU::SetPowerState, 0x00, &r);

    ok &= sendVerb(cad, path->dacNid, HDAU::SetPowerState, 0x00, &r);
    ok &= sendVerb(cad, path->dacNid, HDAU::SetConverterFormat, format, &r);
    sendVerb(cad, path->dacNid, HDAU::SetConverterChannelCount, 0x01, &r);
    ok &= sendVerb(cad, path->dacNid, HDAU::SetConverterStreamChannel,
                   (UInt16)((streamId << 4) & 0xF0), &r);

    ok &= setAnalogOutputVolume(cad, path, 0, true);
    ok &= sendVerb(cad, path->pinNid, HDAU::SetPinControl,
                   pinControlForRole(path->role), &r);
    sendVerb(cad, path->pinNid, HDAU::SetEAPD, 0x02, &r);

    IODelay(3000);
    return ok;
}

Quote

void HDAUniversalDevice::prepareForSleepPowerState() {
    prepareTrackedEnginesForSleepDePop("sleep");
    markTrackedEnginesHardwareStateLost("sleep");

    if (mInterruptSource) mInterruptSource->disable();

    if (mController) {
        mController->setStreamInterruptsEnabled(false);
        mController->invalidateAmpPayloadCache();
        mController->stopCommandTransport();
    }
}

Quote

void HDAUniversalEngine::restoreOutputAfterSystemWake(const char *reason) {
    if (mFreeStarted || mDirection != kIOAudioStreamDirectionOutput ||
        !mController || !mHardwarePrepared) return;

    const HDAController::AnalogPath *active =
        (mHeadphoneActive && mHasHeadphonePath) ? &mHeadphonePath : &mPath;

    bool ok = mController->programAnalogOutputPathWakeSilent(
        mCad, active, mPlayback.streamId, mPlayback.format
    );

    if (ok) {
        mOutputPathProgrammed = true;
        mProgrammedOutputPin = active->pinNid;
        mProgrammedOutputDac = active->dacNid;
        clearAppliedVolumeState();
        applyCurrentVolume();
    }

    mOutputWakeDePopPending = false;
}

 

  • Like 4
  • Thanks 1

Thank you, @MaLd0n.  I will be able to test in a few hours and will update this post with my test status.

 

EDIT: @MaLd0n Your logic is sound.  I would have expected the mute/wait strategy to fix the Sleep audio and the wait/unmute strategy to fix Wake audio.  Unfortunately, the sleep/wake "pop" did not change with your new HDAUniversal.  I don't want to be difficult or cause you to go to extreme lengths to refine what is already a very good solution.  I only want to help.  If this is something you want to resolve and you need additional test data from me, just ask.  

 

Thanks again for your hard work on this.  The audio quality is outstanding.

Edited by deeveedee
  • Like 3
10 hours ago, deeveedee said:

Unfortunately, the sleep/wake "pop" did not change with your new HDAUniversal.

Reproduce and extract again. The problem is that the log isn't capturing this type of issue but lets try one more time.

  • Like 2

I can provide some feedback using it for the last few days. The sound is great and I don't have issues after sleep like some of you, but I observed something interesting. After sleep the sound bar indicates the volume level before the computer goes to sleep. The moment I touch "Volume UP" it does not continue from let's say 25%, it goes all the way up to a 100%. To me this is something I would not even bother "fixing" as I don't know how exactly works on the backend but so far this is probably the best/easiest sound solution we had in a loooong time :) Thank you again, MaLdon!

  • Like 3
  • Thanks 1

I need to test it, but it will be after the holidays. I have three computers where it works perfectly. My question is: On all three computers, I have both Tahoe and Tahoe beta with the corresponding AppleHDA patches and both Intel and Broadcom Wi-Fi. My question is, is there any way to disable AppleALC and PCI or boot-arg injection so that it only loads on the system where I installed the kext? Or is my only option to create a bootable USB drive to test it on the hard drive of one of the three computers where I have the operating system installed? I'm not sure if this is the right question.

8 hours ago, LockDown said:

used to have the pops on sleep/wake. solved by using codeccommander. 

Interesting.  This might offer a clue about how to fix.  Since I'm not observing the sleep/wake audio "pop" with VoodooHDA.kext 4.0, VoodooHDA must have solved this as well.

 

9 hours ago, MaLd0n said:

Reproduce and extract again. The problem is that the log isn't capturing this type of issue but lets try one more time.

I will be able to extract new logs later today.  Thank you.

Edited by deeveedee
52 minutes ago, kaoskinkae said:

I need to test it, but it will be after the holidays. I have three computers where it works perfectly. My question is: On all three computers, I have both Tahoe and Tahoe beta with the corresponding AppleHDA patches and both Intel and Broadcom Wi-Fi. My question is, is there any way to disable AppleALC and PCI or boot-arg injection so that it only loads on the system where I installed the kext? Or is my only option to create a bootable USB drive to test it on the hard drive of one of the three computers where I have the operating system installed? I'm not sure if this is the right question.

If you're using Open Core, just create GUID formatted USB with a custom EFI and boot from the USB for your test.  If you're using CLOVER, you can add another config.plist and select at boot.

  • Like 1
1 hour ago, deeveedee said:

Si usas Open Core, simplemente crea una unidad USB con formato GUID y una EFI personalizada, e inicia desde la unidad USB para realizar la prueba. Si usas CLOVER, puedes añadir otro archivo config.plist y seleccionarlo al iniciar.

That's exactly what I'm saying in the post, but I asked to see if it's possible somehow, but I don't think so.

  • Like 1
17 hours ago, MaLd0n said:

Reproduce and extract again. The problem is that the log isn't capturing this type of issue but lets try one more time.

 

I re-tested UniversalHDA and VoodooHDA.kext 4.0 (in separate test volumes) just to be sure I am accurately reporting my test results.  Through multiple sleep/wake cycles, macOS silently enters/exits sleep when using VoodooHDA.kext 4.0, but makes a loud "pop" with UniversalHDA.  This is not enough of a problem to warrant much effort (my opinion), but I'm just reporting in case you want to fix.  Note my tests are performed after updating to 26.6 Beta (25G5057c).  The previous test was performed with 26.6 Beta (25G5052e).

 

Attached are new logs collected with HDAUniversal-Collector after repeated sleep/wake cycles using HDAUniversal.

  1. The zip generated by Collect-HDAUniversal.command: attached

  2. Your codec model: Conexant CX20632

  3. Your layout-id: 20

  4. macOS version: 26.6 Beta (25G5057c)

  5. Bootloader used: Open Core 1.0.7

  6. Whether the kext is installed in /Library/Extensions: Yes

  7. A clear description of the problem: On transition to sleep, audio generates a loud "tick"/"pop"; On wake, audio generates a loud "tick"/"pop".  I do not observe this with VoodooHDA 4.0 or with AppleALC/AppleHDA.

  8. Steps to reproduce the issue: Sleep and listen for loud "tick"/'pop"; Wake and listen for loud "tick"/"pop"

 

EDIT: Note that when using VoodooHDA.kext 4.0, the HP EliteDesk 800 G4 Mini requires DisableInputMonitor=True to avoid loud "pop" on macOS startup.

HDAUniversal-Test-Logs-2026-07-07_15-26-06.zip

Edited by deeveedee
×
×
  • Create New...