qhuyduong/AMDMicrophone

Poor name choice

Closed this issue · 9 comments

It only supports ACP, not all AMD microphones. Change it.

@VisualEhrmanntraut I have just published an experimental fix for non-ACP microphones today.
https://github.com/qhuyduong/AppleALC

If it is verified to work and accepted by Acidanthera, so this repo is gonna serve the ACP world, it may be renamed then.
Otherwise, I will bring that fix here.

We saw. Your fix doesn't apply to all macOS versions btw. We adjusted it and it seems to work for a lot of people. A technical overview of it would be nice.

Yeah I know. It's just experimental. There're still some issues. It doesn't work for someone. And 3.5mm microphone may not work yet.

For more details, in the function in the function AppleHDAController::getAudioStreamLinkPositionInDMABuffer(IOHDAStream*, uint64_t*), it expects bit 0 of register 0x70 to be cleared before reading DMA position.
image

However, for an unknown reason, it is not cleared by AMD, hence DMA position is incorrect, hence no input at all.
This is just the assumption. I don't have HDAC spec of AMD.

The workaround at the moment is not setting that bit at all. No warranty for side effects.

This is the register 0x70 from Intel
image

Another "safer" solution is skipping that bit check in getAudioStreamLinkPositionInDMABuffer

Interesting, thanks for the insight. We're investigating to develop a proper fix instead of your hack. Good catch, btw.

Oh, and uh, here's the unified-ish version of your hack:
Find: 83 7E 0C 00 75
Replace: 66 90 66 90 EB
Please don't steal it.

Thank you. If you want let just merge it to my fork.
However I'm thinking that place is not the root cause. Still not working for someone.

Hence why I'm calling this a hack. There's likely some workaround macOS doesn't have

Yeah it's indeed a hack.