Contribute
Register

Minihack’s Build: Haswell i5-4250U NUC BOXD54250WYKH1 - 8GB RAM

Status
Not open for further replies.
I'm more confident about Rehabmans' injector than for (toleda) standard injector : it's not just a .plist embedded in a .kext you have a alias for every component of AppleHDA.kext inside the injector so your don't need to put it in S/L/E (I guess ...).

That a pretty good news if your modifications are the same in config.plist !

I've been digging in the xml to spot obvious differences, but I don't know what I'm looking for ... so I'm stuck here
(Comparaison of your xml files and rehabmans' in the archive.zip file)

Do you have codec dump from linux so I can give a closer look ?

If you read the post from Rehabman you will see that you still need to put the injector into S/L/E - it does not work from the Clover/Kexts folder.

And all contributions welcome as far as digging around are concerned! I wasted way too much time on that element of this build trying so many different variations in patching configdata, different layouts etc.

Unless you actually have a working build in an NUC to test things on though you are pretty much stuck (in my view) as there is so much experimenting without you being able to completely define the working configuration by logic alone.

If you have read any of the patching guides you will notice that they all read logically enough, BUT there is no substitute for tedious experimentation unless you have a comprehensive knowledge of the subject to start with.

Things to note to get you started:

Be consistent with "layouts" "platforms" "codecIDs". The layout we patch - is layout 1 for simplicity and consistency with SSDT/DSDT we work with - Rehabman used 86 in his kext. You can change this of course, in your SSDT/DSDT to migrate to layout 86 or you can use revogirls script to decompress the zlib files,change layouts to 1 and recompress if you want to experiment more with his injector.

Sources of help and advice: Toleda and RehabMan will help (but you will have to meet them more than half way as this is a self help forum and they are extremely busy) and also Mirone who is very helpful but lives on another forum which we are not allowed to link to….

In my own opinion AppleHDA.kext is not a huge concern because (a) the boot loader automatically takes care anyway of HDMI and DP patching of the vanilla AppleHDA.kext (so if you use HDMI or DP there is already nothing to do!); (b) While AppleHDA.kext changes on most updates it is in the vast majority of cases okay to use a previously patched version without any perceivable downside and (c ) Once you are into the groove of patching - and if you REALLY need to work with the latest versions - it is a relatively simple matter to transfer your configdata, layouts and platforms from one kext to the next.

Edit: Please note first post updated with a patched AppleHDA.kext for 10.9.4 - this kext does not include the binary patches as they are done on the fly by Clover.

[If anyone wants to try turning the patched kext into an "injector" please note the three relevant kext specific information parts to include in an injector kext may be found in AppleHDA.kext/Contents/Resources/Layout1.xml.zlib; AppleHDA.kext/Contents/Resources/Platforms.xml.zlib and in AppleHDA.kext/Contents/Plugins/AppleHDAHardwareConfigDriver.kext/Info.plist "Codec ID 283902595"]
 
Okay...I made time and had a closer look at the process for creating the injector kext.

Many thanks to RehabMan for the method linked two posts back and to Pike R Alpha for the original method.

Attached is a zip folder.

Assuming you have the kext patches for the binaries that are in my config.plist and that you have the vanilla AppleHDA.kext in S/L/E do the following.

1. Unzip the folder attached.
2. Open terminal, type "cd" (without the quotes!) hit the spacebar once and drop the folder into the terminal window. Press enter.
3. Open the folder and drag the file "patch_hda.sh" into the terminal window and hit enter.
If all goes well it will generate some output and then put a injector kext into the folder.
Install the generated injector kext into System/Library/Extensions.
Make sure in your config.plist that Nocaches (under system Parameters) is set to No - i.e. to make sure it uses caches.
Reboot.

Please note that the patches inside the folder are the ones that we have been using up until now in our patched AppleHDA.kexts and so do not expect any more functionality to have appeared!!

Note: if the injector fails after an update then simply run the injector creation process again (with the new Vanilla AppleHDA.kext in SLE) to make a new injector to replace the non-working one with.

EDIT: Essentials pack in post 1 updated to include injector creation with an appropriate "ReadMe".
 

Attachments

  • PatchingAppleHDA.zip
    14 KB · Views: 243
Thanks for putting this guide together.

Everything seemed to work for me up to the last step:

"Install Clover to the Macintosh HD drive again, exactly as before and again substitute the plist, ACPI and Kexts folders with the ones I have provided."

When I did the Clover install on to Macintosh HD, it didn't automatically mount the EFI partition. So, I went ahead and did that myself and copied the folders and config.plist fie over.

After rebooting, I still have no HDMI audio. The system profiler does show the system as a MacBook Air 6,2 so it seems like it worked, but I have no audio sources available. The one thing I noticed was that in System Profiler under audio, it shows HDMI / DisplayPort Output as Connection: Display. Is it trying to send the audio over displayport (which is not connected) instead of HDMI?

Thanks for any input you may have.
 
Hi Sid4life,
Did you try making and using the latest audio injector instead of substituting a patched kext? Not that it should be needed if you only want the digital audio via the DP/HDMI connections as the edits in the config.plist for injecting on the fly kext modifications and the SSDTs in the ACPI/Patched folder should be all you need…..
 
Glad to see that this was useful !

I downloaded the 10.9.4 combo update and linked it to the patch to make the injector, and I assumed it would work ...

I gave a look to the dump from post 213 and here are my conclusions :
Code:
Codec: Realtek ALC283
Address: 0
Vendor Id: 0x10ec0283 (hex)> 283902595 (dec)

Codec verb commands :
Code:
Pin Complex Node with Control Name

Node 19 : Pin Default 0x03a11020                    (Mic -> LineIn)
Node 21 : Pin Default 0x03211010, EAPD 0x2     (Headphone)

Modification : MicIn > LineIn a>8

<01971c20 01971d20 01971e81 01971f03 02171c10 02171d10 02171e21 02171f03 02170c02>

Pin Complex WITHOUT Name

0x12, 0x14, 0x17, 0x18, 0x1a, 0x1b, 0x1d, 0x1e

Verb Data : F0 00 00 40

Final codec verb commands with disabled nodes :

<01271cf0 01271d00 01271e00 01271f40
01471cf0 01471d00 01471e00 01471f40
01771cf0 01771d00 01771e00 01771f40
01871cf0 01871d00 01871e00 01871f40
01971c20 01971d20 01971e81 01971f03
01a71cf0 01a71d00 01a71e00 01a71f40
01b71cf0 01b71d00 01b71e00 01b71f40
01d71cf0 01d71d00 01d71e00 01d71f40
01e71cf0 01e71d00 01e71e00 01e71f40
02171c10 02171d10 02171e21 02171f03 02170c02>

XML Edit (info.plist) :
Code:
					<key>CodecID</key>
					<integer>283902595</integer>
					<key>ConfigData</key>
					<data>
					AScc8AEnHQABJx4AAScfQAFHHPABRx0AAUce
					AAFHH0ABdxzwAXcdAAF3HgABdx9AAYcc8AGH
					HQABhx4AAYcfQAGXHCABlx0gAZcegQGXHwMB
					pxzwAacdAAGnHgABpx9AAbcc8AG3HQABtx4A
					AbcfQAHXHPAB1x0AAdceAAHXH0AB5xzwAecd
					AAHnHgAB5x9AAhccEAIXHRACFx4hAhcfAwIX
					DAI=
					</data>


Output/Input device PathMap calculation :
Code:
Pin Complex->Audio Mixer->Audio Output (Hex values)
HeadPhone : 33->12->2 (0x21->0x0c->0x02)

Pin Complex->Audio Selector/Mixer->Audio Input(Hex values)
External Mic : 25->35->8 (0x19->0x23->0x08)

XML edit (platform.xml):
Code:
		<key>PathMap</key>
			<array>
				<array>
					<array>
						<array>
							<dict>
								<key>Amp</key>
								<dict>
									<key>Channels</key>
									<array>
										<dict>
											<key>Bind</key>
											<integer>1</integer>
											<key>Channel</key>
											<integer>1</integer>
										</dict>
										<dict>
											<key>Bind</key>
											<integer>2</integer>
											<key>Channel</key>
											<integer>2</integer>
										</dict>
									</array>
									<key>MuteInputAmp</key>
									<true/>
									<key>PublishMute</key>
									<true/>
									<key>PublishVolume</key>
									<true/>
									<key>VolumeInputAmp</key>
									<true/>
								</dict>
								<key>NodeID</key>
								<integer>8</integer>
							</dict>
							<dict>
								<key>NodeID</key>
								<integer>35</integer>
							</dict>
							<dict>
								<key>Boost</key>
								<integer>1</integer>
								<key>NodeID</key>
								<integer>25</integer>
							</dict>
						</array>
					</array>
				</array>
				<array>
					<array>
						<array>
							<dict>
								<key>Amp</key>
								<dict>
									<key>MuteInputAmp</key>
									<false/>
									<key>PublishMute</key>
									<true/>
									<key>PublishVolume</key>
									<true/>
									<key>VolumeInputAmp</key>
									<false/>
								</dict>
								<key>NodeID</key>
								<integer>33</integer>
							</dict>
							<dict>
								<key>Amp</key>
								<dict>
									<key>MuteInputAmp</key>
									<true/>
									<key>PublishMute</key>
									<true/>
									<key>PublishVolume</key>
									<true/>
									<key>VolumeInputAmp</key>
									<false/>
								</dict>
								<key>NodeID</key>
								<integer>12</integer>
							</dict>
							<dict>
								<key>Amp</key>
								<dict>
									<key>Channels</key>
									<array>
										<dict>
											<key>Bind</key>
											<integer>1</integer>
											<key>Channel</key>
											<integer>1</integer>
										</dict>
										<dict>
											<key>Bind</key>
											<integer>2</integer>
											<key>Channel</key>
											<integer>2</integer>
										</dict>
									</array>
									<key>MuteInputAmp</key>
									<true/>
									<key>PublishMute</key>
									<true/>
									<key>PublishVolume</key>
									<true/>
									<key>VolumeInputAmp</key>
									<false/>
								</dict>
								<key>NodeID</key>
								<integer>2</integer>
							</dict>
						</array>
					</array>
				</array>
			</array>
			<key>PathMapID</key>
			<integer>283</integer>

XML Edit (layout.xml)
Code:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>LayoutID</key>
	<integer>1</integer>
	<key>PathMapRef</key>
	<array>
		<dict>
			<key>CodecID</key>
			<array>
				<integer>283902595</integer>
			</array>
			<key>Headphone</key>
			</dict>
			<key>Inputs</key>
			<array>
				<string>LineIn</string>
			</array>
			<key>LineIn</key>
			<dict>
     			<key>MuteGPIO</key>
     			<integer>1342242840</integer>
			</dict>
			<key>Outputs</key>
			<array>
				<string>Headphone</string>
			</array>
			<key>PathMapID</key>
			<integer>283</integer>
		</dict>
	</array>
</dict>
</plist>

The main differences are about the External "Mic" with has a different name ("LineIn") and a different PathMap ...


But as you put it, I don't have a Nuc to test so I will stop here, and try again from my dump as soon as I get my own ...
 
Glad to see that this was useful !

I downloaded the 10.9.4 combo update and linked it to the patch to make the injector, and I assumed it would work ...

I gave a look to the dump from post 213 and here are my conclusions :
Code:
Codec: Realtek ALC283
Address: 0
Vendor Id: 0x10ec0283 (hex)> 283902595 (dec)

Codec verb commands :
Code:
Pin Complex Node with Control Name

Node 19 : Pin Default 0x03a11020                    (Mic -> LineIn)
Node 21 : Pin Default 0x03211010, EAPD 0x2     (Headphone)

Modification : MicIn > LineIn a>8

<01971c20 01971d20 01971e81 01971f03 02171c10 02171d10 02171e21 02171f03 02170c02>

Pin Complex WITHOUT Name

0x12, 0x14, 0x17, 0x18, 0x1a, 0x1b, 0x1d, 0x1e

Verb Data : F0 00 00 40

Final codec verb commands with disabled nodes :

<01271cf0 01271d00 01271e00 01271f40
01471cf0 01471d00 01471e00 01471f40
01771cf0 01771d00 01771e00 01771f40
01871cf0 01871d00 01871e00 01871f40
01971c20 01971d20 01971e81 01971f03
01a71cf0 01a71d00 01a71e00 01a71f40
01b71cf0 01b71d00 01b71e00 01b71f40
01d71cf0 01d71d00 01d71e00 01d71f40
01e71cf0 01e71d00 01e71e00 01e71f40
02171c10 02171d10 02171e21 02171f03 02170c02>

XML Edit :
Code:
					<key>CodecID</key>
					<integer>283902595</integer>
					<key>ConfigData</key>
					<data>
					AScc8AEnHQABJx4AAScfQAFHHPABRx0AAUce
					AAFHH0ABdxzwAXcdAAF3HgABdx9AAYcc8AGH
					HQABhx4AAYcfQAGXHCABlx0gAZcegQGXHwMB
					pxzwAacdAAGnHgABpx9AAbcc8AG3HQABtx4A
					AbcfQAHXHPAB1x0AAdceAAHXH0AB5xzwAecd
					AAHnHgAB5x9AAhccEAIXHRACFx4hAhcfAwIX
					DAI=
					</data>


Output/Input device PathMap calculation :
Code:
Pin Complex->Audio Mixer->Audio Output (Hex values)
HeadPhone : 33->12->2 (0x21->0x0c->0x02)

Pin Complex->Audio Selector/Mixer->Audio Input(Hex values)
External Mic : 25->35->8 (0x19->0x23->0x08)

XML edit (platform.xml):
Code:
		<key>PathMap</key>
			<array>
				<array>
					<array>
						<array>
							<dict>
								<key>Amp</key>
								<dict>
									<key>Channels</key>
									<array>
										<dict>
											<key>Bind</key>
											<integer>1</integer>
											<key>Channel</key>
											<integer>1</integer>
										</dict>
										<dict>
											<key>Bind</key>
											<integer>2</integer>
											<key>Channel</key>
											<integer>2</integer>
										</dict>
									</array>
									<key>MuteInputAmp</key>
									<true/>
									<key>PublishMute</key>
									<true/>
									<key>PublishVolume</key>
									<true/>
									<key>VolumeInputAmp</key>
									<true/>
								</dict>
								<key>NodeID</key>
								<integer>8</integer>
							</dict>
							<dict>
								<key>NodeID</key>
								<integer>35</integer>
							</dict>
							<dict>
								<key>Boost</key>
								<integer>1</integer>
								<key>NodeID</key>
								<integer>25</integer>
							</dict>
						</array>
					</array>
				</array>
				<array>
					<array>
						<array>
							<dict>
								<key>Amp</key>
								<dict>
									<key>MuteInputAmp</key>
									<false/>
									<key>PublishMute</key>
									<true/>
									<key>PublishVolume</key>
									<true/>
									<key>VolumeInputAmp</key>
									<false/>
								</dict>
								<key>NodeID</key>
								<integer>33</integer>
							</dict>
							<dict>
								<key>Amp</key>
								<dict>
									<key>MuteInputAmp</key>
									<true/>
									<key>PublishMute</key>
									<true/>
									<key>PublishVolume</key>
									<true/>
									<key>VolumeInputAmp</key>
									<false/>
								</dict>
								<key>NodeID</key>
								<integer>12</integer>
							</dict>
							<dict>
								<key>Amp</key>
								<dict>
									<key>Channels</key>
									<array>
										<dict>
											<key>Bind</key>
											<integer>1</integer>
											<key>Channel</key>
											<integer>1</integer>
										</dict>
										<dict>
											<key>Bind</key>
											<integer>2</integer>
											<key>Channel</key>
											<integer>2</integer>
										</dict>
									</array>
									<key>MuteInputAmp</key>
									<true/>
									<key>PublishMute</key>
									<true/>
									<key>PublishVolume</key>
									<true/>
									<key>VolumeInputAmp</key>
									<false/>
								</dict>
								<key>NodeID</key>
								<integer>2</integer>
							</dict>
						</array>
					</array>
				</array>
			</array>
			<key>PathMapID</key>
			<integer>263</integer>

XML Edit (layout.xml)
Code:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>LayoutID</key>
	<integer>1</integer>
	<key>PathMapRef</key>
	<array>
		<dict>
			<key>CodecID</key>
			<array>
				<integer>283902595</integer>
			</array>
			<key>Headphone</key>
			</dict>
			<key>Inputs</key>
			<array>
				<string>LineIn</string>
			</array>
			<key>LineIn</key>
			<dict>
     			<key>MuteGPIO</key>
     			<integer>1342242840</integer>
			</dict>
			<key>Outputs</key>
			<array>
				<string>Headphone</string>
			</array>
			<key>PathMapID</key>
			<integer>283</integer>
		</dict>
	</array>
</dict>
</plist>

The main differences are about the External "Mic" with has a different name ("LineIn") and a different PathMap ...


But as you put it, I don't have a Nuc to test so I will stop here, and try again from my dump as soon as I get my own ...

I have a non-Clover setup of the NUC here. If theres anything I can do to help with testing this audio, let me know.
 
I have a non-Clover setup of the NUC here. If theres anything I can do to help with testing this audio, let me know.

You can try this kext ... but I'm sceptic and I don't expect it to work ...
(You have to make sure that your DSDT.SSDT refers to "LayoutID" "1")
 
You can try this kext ... but I'm sceptic and I don't expect it to work ...
(You have to make sure that your DSDT.SSDT refers to "LayoutID" "1")

I just did a quick and dirty test - trashed vanilla AppleHDA.kext and new injector and then installed your kext rebooted. Result: no inputs or outputs....

Did you use non matching path maps? Naturally the path map in Layout1 has to refer to same path map number in Platforms...
 
I just did a quick and dirty test - trashed vanilla AppleHDA.kext and new injector and then installed your kext rebooted. Result: no inputs or outputs....

Did you use non matching path maps? Naturally the path map in Layout1 has to refer to same path map number in Platforms...

You spotted the first mistake (in Platforms.xml) :
Code:
<key>PathMapID</key>
			<integer>263</integer>
instead of
Code:
<key>PathMapID</key>
			<integer>283</integer>
 

Attachments

  • AppleHDA_1094_ALC283_3.kext.zip
    1.3 MB · Views: 229
You spotted the first mistake (in Platforms.xml) :
Code:
<key>PathMapID</key>
			<integer>263</integer>
instead of
Code:
<key>PathMapID</key>
			<integer>283</integer>

Same result - no inputs or outputs.

At the moment the injector I method I posted yesterday (thanks for linking the methodology!) with the files from my most recent patched next seems to be fine for me so I am going to leave this now to you for experimenting when your NUC arrives. And I'll watch with interest to see if you can get the mic working!

Good luck with your hack.

:)
 
Status
Not open for further replies.
Back
Top