AppleHDAController.kext
but it only recognizes a small subset of HDA controllers even though the interface is standard and mostly the same. Apple also has drivers for a small handful of codecs AppleHDA.kext
that they support. There is a project, AppleALC, which patches these drivers for compatibility with non-Apple supported controllers and codecs. However, the process to extend this for a new chipset is not well documented anywhere, so hopefully this should serve as a reference for future hackintoshers.AppleHDAController.kext
to recognize a new controller is easy. The kext driver matches on the HDA PCI class but inside the driver code is a hard coded list of controllers that it supports.8086:A171
(a search shows that it's common to all Kabylake H processors) and another one with the identifier 1002:AB08
which is found on the Vega M's PCI bus.8086:A170
). For the AMD controller, the closest one is Tonga (1002:AAD8
). Even though in theory the controller interface is the same, there seems to be some specific code paths for specific controllers, likely to implement some quirks, so to be safe we try to choose a controller from the same generation (knowing that PIDs are incremented for each new product).AppleHDAController
has direct support for mapping one PID to another by modifying the Info.plist. For example, we see:1002:AA40
to 1002:AA30
. Seems like Apple eventually got tired of adding to the code and just modified the Info.plist instead. However, because we are using AppleALC with its own patching system, we can leave the kext untouched and modify the Controllers.plist in AppleALC.Resources/ALC700/Platforms11.xml
(the 11 is arbitary). Here's an example for the first mic: