schwups Posted June 6 Posted June 6 Looks like everyone who joined after November 23th are guests now with one exception. I see new members since Wednesday again. I believe the aim of this is to eliminate non-human members. I'm assuming he's human. So this can be temporary.
Drew Hoffman Posted June 14 Posted June 14 (edited) Guess I'm back for now, it took a while for my new account to be approved. I rewrote the controller initialization so now it shouldn't fall back into PIO mode and then stop actually sending any messages on NForce controllers. The CORB and RIRB communication also doesn't hold a spinlock the entire time it's waiting for a response. Attached is a version that deomsh can try and see if it works better on his NForce chipset with VIA codec. Tried to pull the jack detection PR I got but the combination of the DPC for jack polling and using a fast mutex to protect the CORB/RIRB communication function causes deadlocks on XP. It works OK on 98 though. Seems that I need to replace the DPC with polling from a kernel thread at passive IRQL, or do things properly and drive all the CORB/RIRB communication with interrupts instead of polling. wdmhda-20-change-init.zip Edited June 14 by Drew Hoffman
deomsh Posted June 14 Posted June 14 Tested on Windows 98 SE (DirectX 9.0c), no difference in performance, everything as reported earlier. To me the two logs produced seems to be almost equal as with version WDMHDA.020. WDMHDA.20a.N68_VT1705.zip
Drew Hoffman Posted June 14 Posted June 14 7 hours ago, deomsh said: Tested on Windows 98 SE (DirectX 9.0c), no difference in performance, everything as reported earlier. To me the two logs produced seems to be almost equal as with version WDMHDA.020. WDMHDA.20a.N68_VT1705.zip 56.8 kB · 1 download Well that tells me that your HDA controller is like Vmware in that even with a longer timeout it will never set the bit to acknowledge CORB reset so always falls back to PIO. I have improved the PIO path to stop probing blindly if there were any codecs detected at reset, and have also added working jack detection polling in the latest version here (with some debugging help from LLMs unfortunately). I haven't tested this fully yet but it does work on at least 2 old laptops. WDMHDA-main-21a.zip
deomsh Posted June 14 Posted June 14 Congratulations, your WDMHDA v21.a is working now on my N68-board with codec VT1705. Also Master Volume is working. I made two set's of log's, one without Jack inserted (Fallback Playback-path is okay) and one with Jack inserted. I can not find a meaningfull difference in the log's in this respect. Is this logged somewhere? WDMHDA.21a.N68_VT1705.WIN982.zip BTW I added a log from a tool Isolar is working on currently, so you can see the Jack is really inserted in PIN-widget 1Ch.
Drew Hoffman Posted June 15 Posted June 15 1 hour ago, deomsh said: Congratulations, your WDMHDA v21.a is working now on my N68-board with codec VT1705. Also Master Volume is working. I made two set's of log's, one without Jack inserted (Fallback Playback-path is okay) and one with Jack inserted. I can not find a meaningfull difference in the log's in this respect. Is this logged somewhere? WDMHDA.21a.N68_VT1705.WIN982.zip 92.29 kB · 2 downloads BTW I added a log from a tool Isolar is working on currently, so you can see the Jack is really inserted in PIN-widget 1Ch. At present it's only polling the first output pin which is listed as a Headphone Out in the BIOS pin configuration verbs. If you look at the log it shows that Node 1Ch is a Line Out pin complex and so the jack detection is not used. In your log Node 1Dh is the headphone out, this probably goes to the front panel audio header which may or may not be connected anywhere. If jack detection were working the log would show *WDMHDA: SwitchOutput -> SPEAKERS or *WDMHDA: SwitchOutput -> HEADPHONES. when the jack was disconnected/connected. For a desktop PC this seems to be the correct expected behavior but if there is more than one headphone out on a codec all of them should be polled, not just the first one. (There is a legacy assumption in the code that each codec can only have one headphone or speaker output.) Also need to add overrides to cover cases where the BIOS pin config verbs don't match the system's actual configuration.
deomsh Posted June 15 Posted June 15 Thanks, now I understand on how you are using the phrase "polling". BTW my boards Front Panel is not connected, I always use the green connection at the back.
Drew Hoffman Posted Monday at 07:47 PM Posted Monday at 07:47 PM (edited) Released WDMHDA Version Alpha-021 which adds headphone jack detection and improves communication with the codec. https://github.com/andrew-hoffman/WDMHDA/releases Edited Tuesday at 08:30 PM by Drew Hoffman link 1
isolar Posted Tuesday at 12:02 PM Posted Tuesday at 12:02 PM Well done this is coming along great! Tested on 7 machines: Lenovo S20-30 Laptop, Realtek ALC280 - 8086_0F04 / 10EC_0280 - headphones/speaker interchange working - reboot required for volume control Lenovo S10-3 Laptop, Realtel ALC272 - 8086_27D8 / 10EC_0272 - headphones/speaker interchange working - no reboot required for volume control Lenovo E530 Laptop, Conexant CX20671 - 8086_1E20 / 14F1_506E - headphones/speaker interchange working - no reboot required for volume control HP 6550b Laptop, IDT 92HD75B3X5 - 8086_3B56 / 111D_7603 - headphones/speaker interchange working - no reboot required for volume control - needed to nudge volume control to get sound HP 6710b Laptop, Soundmax AD1981HD - 8086_ 284B / 11D4_1981 - headphones working only, speaker not working, audio stream stuttering - no reboot required for volume control (needs to route to NID$05 for speaker) HP NC8430 Laptop, Soundmax AD1981HD - 8086_27D8 / 11D4_1981 - headphones working only, speaker not working - no reboot required for volume control (needs to route to NID$05 for speaker) AMD K30BF_M32BF Desktop, Realtek ALC887 - 1022_780D / 10EC_0887 - front headphones & rear lineout working - headphone/lineout interchange not working - no reboot required for volume control 1
Drew Hoffman Posted Tuesday at 03:22 PM Posted Tuesday at 03:22 PM (edited) Thanks for testing! Think you can give me a debug log for the last 3? Some of these laptops are probably using GPIO for jack detect or the power amp turn on instead of the dedicated sense and EAPD pins. Edited Tuesday at 03:52 PM by Drew Hoffman
deomsh Posted Tuesday at 08:10 PM Posted Tuesday at 08:10 PM On 6/15/2026 at 9:47 PM, Drew Hoffman said: Released WDMHDA Version Alpha-021 which adds headphone jack detection and improves communication with the codec. https://github.com/andrew-hoffman/WDMHDA/releases Something strange with your link: gives on Firefox 'https://github.com/andrew-hoffman/WDM' - so a (nice) 404. I copied the link with context-menu and pasted here to show. Not a big deal, because the shown 'text' is correct.
isolar Posted Wednesday at 07:11 AM Posted Wednesday at 07:11 AM 15 hours ago, Drew Hoffman said: Thanks for testing! Think you can give me a debug log for the last 3? Some of these laptops are probably using GPIO for jack detect or the power amp turn on instead of the dedicated sense and EAPD pins. No probs! Attached below dbgview logs for those 3. Looks like it does find the speaker on the AD1981HD machines but rolls over to headphones as the output. The AD1981HD codec has a power node $14 which handles the sum mixer and connects to all pins. Using Watler's driver and setting EAPD to $02 on node $05 works to power the speaker. There is talk on the linux threads about an inverted EAPD on this codec but I could never figure out how it is inverted and works for me like normal. To my knowledge none of these machines use GPIO for audio out or jack detect. Probably unsolicited response required to switch between LineOut and Headphones on the ALC887. AD1981HD_6710B_DBG_INSTALL.LOG AD1981HD_NC8430_DBG_REBOOT.LOG ALC887_AMD-K30BF_DBG_REBOOT.LOG
Drew Hoffman Posted Thursday at 03:51 PM Posted Thursday at 03:51 PM On 6/17/2026 at 12:11 AM, isolar said: No probs! Attached below dbgview logs for those 3. Looks like it does find the speaker on the AD1981HD machines but rolls over to headphones as the output. The AD1981HD codec has a power node $14 which handles the sum mixer and connects to all pins. Using Watler's driver and setting EAPD to $02 on node $05 works to power the speaker. There is talk on the linux threads about an inverted EAPD on this codec but I could never figure out how it is inverted and works for me like normal. To my knowledge none of these machines use GPIO for audio out or jack detect. Probably unsolicited response required to switch between LineOut and Headphones on the ALC887. AD1981HD_6710B_DBG_INSTALL.LOG 25.15 kB · 2 downloads AD1981HD_NC8430_DBG_REBOOT.LOG 20.43 kB · 1 download ALC887_AMD-K30BF_DBG_REBOOT.LOG 14.99 kB · 1 download My driver should be writing verb $70c payload $02 to the speaker pin complex node $05 so that's not the problem. (I don't think writing $03 for BTL enable as well is necessary?) But it's not currently doing anything at all with the power node, is that necessary for this Analog Devices codec? I tested on a few more systems myself. Thinkpad T430, Wyse Cx0 and Acer Aspire One are all working now. For the netbook maybe I should put some time into making an I2C HID bus driver because there's no legacy PS/2 emulation for the trackpad on anything with the Insyde BIOS. Or maybe I should just go back to XP where there is working 3D accelleration and power management.
isolar Posted Thursday at 05:01 PM Posted Thursday at 05:01 PM 1 hour ago, Drew Hoffman said: My driver should be writing verb $70c payload $02 to the speaker pin complex node $05 so that's not the problem. I think you are correct here as when $70C02 is not sent to the NC8430 laptop, the mute light on the mute button is on, but it is off when your driver initializes which indicates it has worked and the speaker is unmuted and active. BTL not necessary here. I guess it wouldn't hurt to send 'power on 70500' to the power node to try? This is the only test machine I have with that type of widget and when looking into it I found it seems to just be able to set to D0 or D3 and in turn adjust all connected nodes from the Connection List Entries to on or off. This affects the main mixer node $0E and it has 9 connections to it. DAC $03 can route through this mixer and then to node $05 so may just be the cause of it bypassing the speaker for headphones?
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now