Some intermediate findings:
- Before sound can be input or output, it's necessary for at least 4 parameters to be set properly:
- Power State -- state 0 means fully powered up
- Pin Sense -- determine if anything is connected to an audio jack -- should be 0x80000000 if something is connected, 0x0 otherwise
- Input Enable -- on all input jacks, the Input Enable bit must be set to 1
- Amplifier Gain and Mute -- gain (volume) setting must be non-zero and mute bit must be off (set to 0)
- For a microphone, let's consider this path map consisting of 3 "widgets" (yes, that's the correct term):
- Pin (audio jack) 0x18
- Mixer 0x22
- Audio Input 0x09
- Every widget along the path must:
- ... be fully powered up
- ... not be in mute state
- The Pin widget (0x18) should have gain of 0x01 or 0x02 or 0x03
- The Pin widget (0x18) should also have pin sense high (0x80000000)
- The Pin widget (0x18) should also have Input Enable bit set to 1
- The Audio Input widget (0x09) is where the input volume is actually adjusted, so its Gain setting can vary from 0x00 to 0x3F (for this motherboard)
In the screenshots below we can see nearly all of the above. We can also see that moving the
Volume slider in
System Preferences --> Sound --> Input changes the
Gain setting on the Audio Input node (0x09) from
0x3F down to
0x00.
Case 1: Input Volume at maximum. We can see
Gain of node 0x9 also at maximum
0x3F:
Case 2: Input Volume at 75%. We can see
Gain of node 0x9 also at 75% of maximum or
0x2F:
Case 3: Input Volume at 50%. We can see
Gain of node 0x9 also at 50% of maximum or
0x1F:
Case 4: Input Volume at 0%. We can see
Gain of node 0x9 also at 0% or
0x00: