Update alc-verb param passing & layout of verb log #762
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
So I got the the bottom of the alc-verb issue.
The Intel HDA spec, and Apple's IOHDACodecDevice::executeVerb (and AudioDxe) all pass 4 bit verbs (0x4, 0x5, 0xC, 0xD, etc.) as 4 bits, and 12 bit verbs (0x7nn, 0xFnn) as 12 bits.
The Linux sound drivers, and Linux
alsa-tools
'hda-verb
all represent 4 bit verbs as a 12 bit verb with 00 (0x400, 0x500, 0xC00, 0xD00, etc.).The back end of
alc-verb
is using the Apple method, but the front end follows the Linux convention. This is not as bad as it sounds, because of the way codec verbs are eventually packed.If we imagine using
alc-verb
orhda-verb
to write to a 16bit processing coefficient on node 0x20 (which coefficient to use is set previously using verb 0x5, and the set value can be read afterwards using verb 0xC) with the following parameters, these are the results:*SET_PROC_COEF is 0x400, or 0x4 depending on the convention