Posted 02 January 2014 - 02:00 AM

Intro: This guide is for those who want to use AppleHDA and / or trying to learn how it works. It is divided in to several steps and we will address each of them throughout the guide.

. STEP ONE: Getting Information from the codec. There are other ways but in this guide we will explain how to get to Linux. Using Ubuntu or another distro. (Note: Use the latest version of Linux and Alsa drivers)

* Replace "codec_dump.txt" with your user name and codec file (if you gave a specific name)

. STEP THREE: For our standard onboard sound card be recognized by OS X must add the device to our HDEF DSDT.aml. For this we use the following patches: HDEF or AZAL to HDEF in both DTGP method has to be present in our DSDT.aml. We use the DSDT Editor to apply the patches correctly http://olarila.com/f...c.php?f=7&t=646The Patchs you find here http://olarila.com/forum/patches.php This is a Audio Injection standard and should work for all codecs:

For the AppleHDA Work correctly for our codec we make some modifications in the same plists.

So what are these changes?

If you look at it (click the right mouse button / Show Package Contents), you will find in the Content folder of the main Info.plist (not touching it) and a folder plugins. There are plugins that we have to fix, but not all just Info.plist from this one:

To edit this kext need to get configdata / CodecVerbs.
You can fix them in two ways, either manually or automatically using the script called Signal64 Verbit that performs the entire process automatically
requiring a few adjustments you can download it here:verbit.zip2.65KB1447 downloads
Unzip it in the same folder codecgraph used previously. then Run this command in Terminal:

cd /Users/your_user_name/Desktop/codecgraph

and then:

./Verbit codec_dump.txt> verbs.txt

. NOTE: You must delete the line codec_dump.txt: AFG Function Id: 0x1 (unsol 0)
Having done this codecgraph open the folder and you will see two files and another one called verbs.txt verbitdebug.txt.
verbit.texto is in our interest. For in him we find our configdata / CodecVerbs original and corrected tops underneath.
verbs.txt:

The codec used in the above example as you can see is a ALC887-VD was necessary to change only one of the external microphones.
To understand how these changes are made we need to go deeper.
So what is a codec verb?
For each input/output there is a sequence of 4 verbs.
Lets take an example from codec used before:

I think Cad, NID and Verb Commands are pretty simple to figure out: first 2 you get them from linux dump, and commands are standard 71c, 71d, 71e, 71f.
Lets see about verb data:

- 71cXY X=Default Association Y=Sequence

. DEFAULT ASSOCIATION AND SEQUENCE: are used together by software to group Pin Complexes (and therefore jacks) together into functional blocks to support multichannel operation. Software may assume that all jacks with the same association number are intended to be grouped together, for instance to provide six channel analog output. The Default Association can also be used by software to prioritize resource allocation in constrained situations. Lower Default Association values would be higher in priority for resources such as processing nodes or Input and Output Converters. Note that this is the default association only, and software can override this value if required, in particular if the user provides additional information about the particular system configuration. A value of 0000b is reserved and should not be used. Software may interpret this value to indicate that the Pin Configuration data has not been properly initialized. A value of 1111b is a special value indicating that the Association has the lowest priority. Multiple different Pin Complexes may share this value, and each is intended to be exposed as independent devices.

. SEQUENCE: indicates the order of the jacks in the association group. The lowest numbered jack in the association group should be assigned the lowest numbered channels in the stream, etc. The numbers need not be sequential within the group, only the order matters. Sequence numbers within a set of Default Associations must be unique.

*My notes for this, if you look on the vanilla codec verb(no matter what codec) you will see that Sequence is always 0.
Why that, and why for us on our codec verbs is different? Simple b/c Apple dosen't have multichannel analog out! so you must change it to 0.

*About Default Association, Keep the default one, in order, and on those that are the same replace them with new one that dosen't exist already in the dump... the values you can use are: 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d and f.(see what does verbit if you still don't understand)

- 71dXY X=Color Y=Misc

. COLOR: indicates the color of the physical jack for use by software.

. MISC: is a bit field used to indicate other information about the jack. Currently, only bit 0 is defined. If bit 0 is set, it indicates that the jack has no presence detect capability, so even if a Pin Complex indicates that the codec hardware supports the presence detect functionality on the jack, the external circuitry is not capable of supporting the functionality.
Reserved 3
Reserved 2
Reserved 1
Jack Detect Override 0

. DEFAULT DEVICE: INDICATES: the intended use of the jack or device. This can indicate either the label on the jack or the device that is hardwired to the port, as with integrated speakers and the like.

Line Out 0
Speaker 1
HP Out 2
CD 3
SPDIF Out 4
Digital Other Out 5
Modem Line Side 6
Modem Handset Side 7
Line In 8
AUX 9
Mic In A
Telephony B
SPDIF In C
Digital Other In D
Reserved E
Other F

. CONNECTION TYPE: indicates the type of physical connection, such as a 1/8-inch stereo jack or an optical digital connector, etc. Software can use this information to provide helpful user interface descriptions to the user or to modify reported codec capabilities based on the capabilities of the physical transport external to the codec.

. PORT CONNECTIVITY: indicates the external connectivity of the Pin Complex. Software can use this value to know what Pin Complexes are connected to jacks, internal devices, or not connected at all.
00b - The Port Complex is connected to a jack (1/8", ATAPI, etc.).
01b - No physical connection for Port.
10b - A fixed function device (integrated speaker, integrated mic, etc.) is attached.
11b - Both a jack and an internal device are attached. The Information provided in all other fields refers to the integrated device. The PD pin will reflect the status of the jack; the user will need to be queried to figure out what it is.

. LOCATION: INDICATES the physical location of the jack or device to which the pin complex is connected. This allows software to indicate, for instance, that the device is the “Front Panel Headphone Jack” as opposed to rear panel connections.

*Details:
Convert the 2 digit hex number to binary.
Pad the front with zero's to make it 8 dgits.

The script does a great job, still not perfect as it does not know what are our options ... perhaps a GUI application may be added in the future.
So that those options may be?
- you may want to setup mic as internal to get ambient noise reduction for it.
- some codecs have only line outs same trick can apply and you can set first output as speaker and get as an option software dsp for it.
- for front panel support you may need to transform back mic in line in.
And so on ...
Now that we got all necessary information about configdata / CodecVerbs we edit the info.plist of AppleHDAHardwareConfigDriver.kext.

Editing AppleHDAHardwareConfigDriver.kext (Info.plist)
(Click with the right mouse button / Show Package Contents) Open Plist with a Plist editor.
Navigate to the key IOKitPersonalities / HDA Hardware Config ResourceHDAConfigDefault.

1-CodecID: Put the ID of your codec in Numbers 0x10ec0887 Decimal (Hexadecimal) -> 283 904 135 (Decimal)
2-configdata: Here we put our configdata / Verbs codec that previously corrected.
3-FuncGroup: Must always be 1.
4-LayoutID: By default is 12 but can be any other number provided that you also change the number of layout on your DSDT.aml
* NOTE: In the Mountain/Mavericks Lion kexts so we can use a layout that already has in itself no kext and others like layout887.xml as was used in the Lion kexts.

2- Editing and platform.xml layout12.xml or Layout1.xml (Folder Resources)
This is the trickiest part.
Within the Resources folder you will find several layouts.xml and a Platforms.xml.
You'll edit both according to the previous corrections ie in AppleHDAHardwareConfigDriver.kext use the layout12 so let's make the necessary edits on this.

Now we edit the Platforms.xml is here that lies the pathmaps. Within Key Pathmaps there are other keys
which are numbered and each corresponds to a specific layout.xml eg use within the same layout12.xml has a key with pathmap Id = 1.
In the example we are using a codec ALC887-VD have 4 outputs and 2 audio inputs. Totaling 6 devices.
For output devices, the PathMap follows this pattern:
Pin Complex (NodeID) -> Audio Mixer-> Audio Output
So we have to find a node Pin Complex (NodeID), a node Audio Mixer and finally an audio output node.
For input devices, the PathMap follow this pattern:
Pin-Complex (NodeID)> Selector/Mixer- Audio Input> Audio
Here, we have to find a node Pin Complex (NodeID), an audio mixer / selector node and finally a node of audio input.
Open the file in the folder generated codec_dump_dec.txt.svg codegraph you will see something like this:

note 20 (Pin Complex) -> 12 (node ​​Audio Mixer) -> 2 (Audio output node)
from there we have already formed our pathmap lineout to (in the case node20 is an internal speaker).
We will do the same for the rest of our pathmaps.
Note: Note that in the screenshot attached above you can see that the lines are continuous connections of nodes.

Starting with version 10.6.3 of Snow Leopard was also necessary to correct the binary file of Applehda.kext it is within the MacOs folder that sits inside the Kext to make this correction we will use the script done by bcc9.

A tip if your codec is not supported by the script you can try to fix manually using a binary editor like HexFiend and replace one of the codecs used, by correction for you.
In the example above was corrected binary for ALC887-VD codec if you are correct for your codec is necessary to replace the 10ec0887 by the id of your codec.
In binary they are written from right to left ie 10ec0887 = 8708ec10.

. IMPORTANT:

The Mountain Lion kext / Mavericks have a new structure and the files are compressed in. Zlib to unpack and edit these files will use zlib.
This application is based on RevoGirl script, it makes the process of files. Zlib from AppleHDA.kext to decompress / compress easier. Just drag the file zlib. The application and it will unzip or drag the xml file. And it will compress to. Zlib.
So if you own an old kext from Lion can compress files using this APP.Download Zlib.

Folder with all the necessary tools for editing and some kexts Applehda.kext several original versions of OS X: tools AppleHDA

Posted 28 January 2016 - 12:31 PM

Posted 09 February 2016 - 03:53 PM

angpysha

InsanelyMac Protégé

Members

2 posts

Gender:Male

Hi. I have problem with sound on my Acer E1-571G. I used DummyHDA based on AppleHDA. Internal speaker is working, but headphones - no. Autodetection is working and volume control, but there is no sound. OS X 10.11.2. All files are in attachment.

Posted 11 March 2016 - 06:25 AM

Posted 31 May 2016 - 11:01 PM

chrinist

InsanelyMac Protégé

Members

9 posts

Gender:Not Telling

All the pictures included on this tutorial are missing. Can we get the pictures added back on this tutorial? Also, have you thought about doing a youtube tutorial for video? I think that would be so much easier to follow.

Posted 22 September 2016 - 08:37 AM

Posted 25 September 2016 - 09:02 PM

Whosondephone

InsanelyMac Protégé

Donators

29 posts

Gender:Male

Interests:Audio Technology.

* Note: Exclude MuteGPIO, SignalProcessing of all keys.

Does this mean to delete key and everything under each key? for Example: additional key, dict, string, etc.? For Signal processing it looks like I'm removing most of the document. Thanks for the guide!

Posted 27 October 2016 - 09:55 AM

Kaya80

InsanelyMac Sage

Members

491 posts

Gender:Male

Location:Conversano (BA)

Hi guys, i recently installed Sierra on my laptop second partition, together with El Capitan on first. All went good i think, apart from random restarts, in rare case, and the audio, that works on first boot, soon after system starts for the first time.

Then i updated Clover to the last build , and the audio not works anymore,my codec is ALC269, what can i check and what can i do to fix the audio?

Posted 27 October 2016 - 10:39 AM

SavageAUS

InsanelyMac Sage

Members

365 posts

Gender:Male

Hi guys, i recently installed Sierra on my laptop second partition, together with El Capitan on first. All went good i think, apart from random restarts, in rare case, and the audio, that works on first boot, soon after system starts for the first time.
Then i updated Clover to the last build , and the audio not works anymore,my codec is ALC269, what can i check and what can i do to fix the audio?

Applealc is what I use on my laptop or you could use applehda patcher.