Internal Sound

Update 11/03/08

A temporary solution using AppleAzaliaAudio.kext has been found that enables output only through the Speakers and Headphone ports. Please refer to the Quick & Dirty Guide forum thread. Also, Jamie Curmi & Elroy have put together a small app to control the output selection from a dropdown menu. See the Audieee forum thread for more info.

Work continues on the still silent AppleHDA.kext.

Update 10/05/08

Please refer to the forum thread for a 10.5.5 testing kext and instructions. Still no sound, but we need help to come up with the right configuration.

***

In short not working at present (although bluetooth headphones work with A2DP support).

I have patched AppleHDA file with 6902ec10 x2 (I think I used the moddified ALC861 AppleHDA.kext)
Then editing the AppleHDA.plist and AppleController.plist gets me a bit further, if you enter (appropriate) NodeID values, which are Mic 8 ,35,24 Speakers 20,12,2 HP 21,13,3 you get HDADriver loading and the speaker icons but of course no sound.
When I alter the configdata line in AppleHDAController.kext System Profile gives different configuration info (as long as HDAEnabler is loaded) but alas I havent found the correct info despite trying all the ones I have access to, from taruga's wiki site (http://wiki.taruga.net).
Adamm from http://forum.eeeuser.com/viewtopic.php?id=38030 has audio sorted on linux, but most of it works out of the box with Hardy Heron Ubuntu install.
I think the next step is to "inject/enable" the correct configdata, Snickers has been working on this.
OK thanks to Enzo at insanelymac the pin configs seem to be
"0000"=hex:f0,1c,17,01 "0001"=hex:11,1d,17,01 "0002"=hex:11,1e,17,01 "0003"=hex:41,1f,17,01
"0004"=hex:20,1c,27,01 "0005"=hex:09,1d,27,01 "0006"=hex:a3,1e,27,01 "0007"=hex:99,1f,27,01
"0008"=hex:10,1c,47,01 "0009"=hex:01,1d,47,01 "0010"=hex:13,1e,47,01 "0011"=hex:99,1f,47,01
"0012"=hex:1f,1c,57,01 "0013"=hex:40,1d,57,01 "0014"=hex:21,1e,57,01 "0015"=hex:01,1f,57,01
"0016"=hex:f0,1c,67,01 "0017"=hex:11,1d,67,01 "0018"=hex:11,1e,67,01 "0019"=hex:41,1f,67,01
"0020"=hex:30,1c,87,01 "0021"=hex:98,1d,87,01 "0022"=hex:a1,1e,87,01 "0023"=hex:01,1f,87,01
"0024"=hex:f0,1c,97,01 "0025"=hex:11,1d,97,01 "0026"=hex:11,1e,97,01 "0027"=hex:41,1f,97,01
"0028"=hex:f0,1c,a7,01 "0029"=hex:11,1d,a7,01 "0030"=hex:11,1e,a7,01 "0031"=hex:41,1f,a7,01
"0032"=hex:f0,1c,b7,01 "0033"=hex:11,1d,b7,01 "0034"=hex:11,1e,b7,01 "0035"=hex:41,1f,b7,01
"0036"=hex:2d,1c,d7,01 "0037"=hex:82,1d,d7,01 "0038"=hex:05,1e,d7,01 "0039"=hex:40,1f,d7,01
"0040"=hex:f0,1c,e7,01 "0041"=hex:11,1d,e7,01 "0042"=hex:11,1e,e7,01 "0043"=hex:41,1f,e7,01

Sound Progress 10/01/2008

I have been working on our audio problem for the past 4 days. I still don't have anything working, but I have made progress. Here are my research results. Perhaps the other devs can make use of them.

Sound works flawlessly on Windows Vista with the Microsoft UAA Driver, so this is the best starting point. The pin configs that everyone has been trying to get can indeed be derived from the Windows Vista Registry. Using HDAEnabler, I have been able to inject these successfully but this is not enough.

Reading the UAA Pin Config docs and the Intel HD Audio Spec, we learn that proper arrangement into function groups and layout are critical for deriving proper audio functioning. The Microsoft UAA Driver derives this information automatically (naturally). Although initial quests for information pointed us at HD Audio Utilities for Windows, such as HDAU.exe and UAATest.exe, these in fact will probably not provide any more information than what can already be derived from a working Vista installation.

Vista already displays the functional groups provided by the ALC269; namely, one output group, and two microphone/input groups. The driver properties screen already shows the IO paths. The speakers/output group shows two outputs: the Internal ATAPI connection and the Headphone jack. The internal microphone similarly connects to an ATAPI connection, and the microphone jack (note that it is also given a microphone name and icon, and not a "Line In" designation) is directed to an external jack.

This information tells us that the ALC269 has four functional audio groups that must be addressed in a working driver: Internal Speakers, Headphone (not Line Out), Microphone (internal), and Microphone (external). Furthermore, the two outputs have to be further grouped together.

Using these groups, we can take the ALC269 Datasheet Block Diagram or better, a codec graph produced in Linux by codecgraph (I'll attach it to this page) and derive the correct nodeID values:

IntSpeakers: 0x02 (2), 0x0c (12), 0x14 (20)
HP Jack: 0x03 (3), 0x0d (13), 0x15 (21)

Mic ATAPI: 0x12 (18), 0x23 (35), 0x08 (8)
Mic Jack: 0x18 (24), 0x24 (36), 0x07 (7)

It is important that we don't confuse Headphones (HP) and Line Out or external Mic with Line In, because each of these designations are used specifically by the codec, and we can see from Windows Vista, the block diagram and the codecgraph that there are no used Line In or Line Out (there is a Line Out pin at 0x1d but it is not connected) designations with the ALC269. Another point is that the ALC269 has no SPDIF in, but has 2 SPDIF outs without actually connecting them out in the ipis.

Unfortunately, knowing the pin config, nodes, and functional grouping still does not get us a functioning AppleHDA.kext. I have plugged all of this information in, verified with the IORegistry that it is being loaded properly, and we still do not have working audio.

What it all boils down to is the unique DSP parameters in the Layout section that we provide in the plist. codeye provided me with a kext that does load sound devices with the wrong groups and no sound. After plugging in the pin configs, nodes, and groupings in the pathmap, I now have a partially working kext that lists the correct devices as per Windows Vista, but still no sound. My kext experimentation has found a set of Internal Speakers that properly switches to Headphones when they are plugged in, and two separate Microphone devices. What are we missing then? The layout segment in codeye's kext has no SignalProcessing parameters defined for the Internal Speakers. When they are copied in from other layouts however, the kext fails to load any devices at all. This suggests that the signal processing settings are critical and unique to a particular codec, and we will need to find out which ones will work.

Now that I have put this out in the open, I expect that several of us will begin to play with this until there is a solution.

Relevant files are attached to this page (click files link below). The file info links have important comments on what is provided with each file.

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License