I found the difference. When I previously tested and found HDMI audio to be working after the setpci,unload,rescan approach, I was using the nvidia proprietary driver. HDMI audio PCI device was then detected, the ELD files show the monitor detected, and HDMI audio works. In the patch above, I am using nouveau. The HDMI audio PCI device is now detected automatically, the HDMI video output is working and active, but the ELD files show that no HDMI monitor was detected on the audio side. I checked with HDA verbs directly: # hda-verb /dev/snd/hwC1D0 6 GET_PIN_SENSE 0 With the setpci+unload+rescan approach on nouveau, this always returns value 0, even with HDMI video output active and working. With the setpci+unload+rescan approach on nvidia's proprietary drivers, this returns 0 after loading the modules. However upon starting X, it starts returning 0xc0000000 and HDMI audio output works fine. So in addition to the games with the magic register, the nvidia proprietary driver is doing something else as well which is needed to make HDMI audio work.