Jump to content

Comment Patcher AppleHDA.kext


cparm
 Share

1 post in this topic

Recommended Posts

Commençons par ce dont vous aurez besoins pour débuter:

 

  • un editeur d'hex tel 0xED
  • Property List Editor (je vous conseille PlistEdit Pro)
  • un dump de votre codec, la méthode la plus simple étant de l'extraire via un livedvd de linux (la distribution la plus récente possible)
  • convert_hex_to_dec.rb, le script de Munky

 

 

pour le dump de votre codec, démarrer le livedvd de linux, une fois logger, ouvrez une Konsole, et tapez:

 

cat /proc/asound/card0/codec#0 > ~/Desktop/CodecDump.txt

 

si cela ne fonctionne pas, remplacez codec#0 par codec#1 ou codec#2

 

un fois que le fichier CodecDump.txt apparait sur le bureau, copiez le sur un endroit où vous pourrez le récupérer par la suite, et redémarrer sur OSX

 

 

 

1 patch du fichier binaire

 

En premier lieux vous devez connaitre l'identifiant du codec audio de votre mobo:

 

Pour cela ouvrez alors le fichier CodecDump.txt, et cherchez l'occurrence "Vendor Id"

le numéro qui ce trouve a coté est L'identifiant de votre carte, (0x10ec0888 dans mon cas)

 

copiez le fichier /System/Library/Extensions/AppleHDA.kext sur le bureau

 

ouvrez le fichier binaire a l'intérieur de applehda (~/AppleHDA.kext/Content/MacOS/AppleHDA) avec 0xED

 

cherchez 6202EC10 (ce qui correspond a l'Id 0x10ec0262)

 

verifiez que le type de recherche s'effectue bien en hexadecimal et non texte, pour cela, si vous utilisez la zone de recherche de la fenetre principal, changer "Text search" en "Hex search" :

 

check_10.jpg

 

si vous utilisez la recherche via Pomme+F, changer le type de recherche de "Text" en "Hex":

 

check_11.jpg

 

ensuite, remplacez les tous par le votre, dans mon cas 8808EC10 (qui correspond a mon Id 0x10ec0888) .

 

 

2 patcher AppleHDAController

 

Dans cette partie nous allons définir ce que l'on appel le "codecverb" qui va bien avec votre chipset audio:

 

Commencez par dupliquer votre fichier codecdump.txt (une copie de l'original sera utile plus tard),

ouvrez ce fichier

chercher l'occurrence Addresses au début du fichier, le numéro qui ce trouve a coté est la valeur de l'adresse de votre chipset (notez-le)

 

maintenant nous allons passer aux choses sérieuses,

vous avez sans doute remarquez que le mot Node apparait plusieurs fois dans ce fichier, beaucoup nous sont inutile, nous allons donc effacer toutes les Node qui ne nous intéresse pas pour cette partie du tuto,

celle qui sont a effacer sont celle qui ne contienne pas l'entré Pin Default

 

exemple sur un extrait de mon codecdump:

 

Node 0x0f [Audio Mixer] wcaps 0x20010f: Stereo Amp-In Amp-Out
Amp-In caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-In vals: [0x00 0x00] [0x80 0x80]
Amp-Out caps: ofs=0x1f, nsteps=0x1f, stepsize=0x05, mute=0
Amp-Out vals: [0x00 0x00]
Connection: 2
0x05 0x0b
Node 0x10 [UNKNOWN Widget] wcaps 0xf00000: Mono
Node 0x11 [UNKNOWN Widget] wcaps 0xf00000: Mono
Node 0x12 [UNKNOWN Widget] wcaps 0xf00000: Mono
Node 0x13 [UNKNOWN Widget] wcaps 0xf00000: Mono
Node 0x14 [Pin Complex] wcaps 0x40018f: Stereo Amp-In Amp-Out
Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0
Amp-In vals: [0x00 0x00] [0x00 0x00] [0x00 0x00] [0x00 0x00] [0x00 0x00]
Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-Out vals: [0x80 0x80]
Pincap 0x083e: IN OUT HP Detect Trigger
Pin Default 0x01014410: [Jack] Line Out at Ext Rear
Conn = 1/8, Color = Green
DefAssociation = 0x1, Sequence = 0x0
Pin-ctls: 0x20: IN
Unsolicited: tag=00, enabled=0
Connection: 5
0x0c* 0x0d 0x0e 0x0f 0x26

 

 

 

nous ne garderons que alors la node 0x14, comme suit:

 

Node 0x14 [Pin Complex] wcaps 0x40018f: Stereo Amp-In Amp-Out
Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0
Amp-In vals: [0x00 0x00] [0x00 0x00] [0x00 0x00] [0x00 0x00] [0x00 0x00]
Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-Out vals: [0x80 0x80]
Pincap 0x083e: IN OUT HP Detect Trigger
Pin Default 0x01014410: [Jack] Line Out at Ext Rear
Conn = 1/8, Color = Green
DefAssociation = 0x1, Sequence = 0x0
Pin-ctls: 0x20: IN
Unsolicited: tag=00, enabled=0
Connection: 5
0x0c* 0x0d 0x0e 0x0f 0x26

 

 

 

mais nous pouvons nettoyer le fichier un peu plus pour nous faciliter encore plus le travail par la suite,

dans chacune des node que nous gardons, certaines lignes nous sont inutiles, voici les lignes que je vous conseil de garder (si elles sont présentes) pour chaque node valide:

 

 

Node 0x14 [Pin Complex] wcaps 0x40018f: Stereo Amp-In Amp-Out
Pin Default 0x01014410: [Jack] Line Out at Ext Rear
Conn = 1/8, Color = Green

 

 

une fois nettoyé, votre fichier codecdump.txt doit ressembler a ca :

 

Node 0x14 [Pin Complex] wcaps 0x40018f: Stereo Amp-In Amp-Out
Pin Default 0x01014410: [Jack] Line Out at Ext Rear
Conn = 1/8, Color = Green 

Node 0x15 [Pin Complex] wcaps 0x40018f: Stereo Amp-In Amp-Out
Pin Default 0x01011412: [Jack] Line Out at Ext Rear
Conn = 1/8, Color = Black 

Node 0x16 [Pin Complex] wcaps 0x40018f: Stereo Amp-In Amp-Out
Pin Default 0x01016411: [Jack] Line Out at Ext Rear
Conn = 1/8, Color = Orange

Node 0x17 [Pin Complex] wcaps 0x40018f: Stereo Amp-In Amp-Out
Pin Default 0x01012414: [Jack] Line Out at Ext Rear
Conn = 1/8, Color = Grey

Node 0x18 [Pin Complex] wcaps 0x40018f: Stereo Amp-In Amp-Out
Pin Default 0x01a19c40: [Jack] Mic at Ext Rear
Conn = 1/8, Color = Pink

Node 0x19 [Pin Complex] wcaps 0x40018f: Stereo Amp-In Amp-Out
Pin Default 0x02a19c50: [Jack] Mic at Ext Front
Conn = 1/8, Color = Pink 

Node 0x1a [Pin Complex] wcaps 0x40018f: Stereo Amp-In Amp-Out
Pin Default 0x0181344f: [Jack] Line In at Ext Rear
Conn = 1/8, Color = Blue

Node 0x1b [Pin Complex] wcaps 0x40018f: Stereo Amp-In Amp-Out
Pin Default 0x02214c20: [Jack] HP Out at Ext Front
Conn = 1/8, Color = Green

Node 0x1c [Pin Complex] wcaps 0x400001: Stereo
Pin Default 0x593301f0: [N/A] CD at Int ATAPI
Conn = ATAPI, Color = Unknown

Node 0x1d [Pin Complex] wcaps 0x400000: Mono
Pin Default 0x411111f0: [N/A] Speaker at Ext Rear
Conn = 1/8, Color = Black

Node 0x1e [Pin Complex] wcaps 0x400300: Mono Digital
Pin Default 0x014b6130: [Jack] SPDIF Out at Ext Rear
Conn = Comb, Color = Orange

Node 0x1f [Pin Complex] wcaps 0x400200: Mono Digital
Pin Default 0x01cb7160: [Jack] SPDIF In at Ext Rear
Conn = Comb, Color = Yellow

 

créons maintenant notre codecverb pour chaque node:

 

Ici, nous allons prendre en exemple la node 0x14:

 

relevez la valeur Pin Default de la node soit 0x01014410, ne retenez que 01014410 pour cette valeur, et inversez cette valeur deux par deux:

 

c'est a dire que 01 01 44 10 donnera 10 44 01 01 et c'est cette suite de chiffres qui nous intéresse

 

un codecverb ce structure comme suit:

 

[adresse][node][71C][premier chiffre] ce qui donnera 21471C10
[adresse][node][71D][deuxieme chiffre] ce qui donnera 21471D44
[adresse][node][71E][troisieme chiffre] ce qui donnera 21471E01
[adresse][node][71F][quatrieme chiffre] ce qui donnera 21471F01

 

 

le codecverb complet pour la node 0x14 sera donc: 21471C10 21471D44 21471E01 21471F01

 

Les plus malins l'auront compris, l'étape d'inversement de la valeur Pin Default n'est pas obligatoire, car on peut très bien inversé la structure du codecverb comme cela:

 

[adresse][node][71C][quatrieme chiffre]

[adresse][node][71D][troisieme chiffre]

[adresse][node][71E][deuxieme chiffre]

[adresse][node][71F][premier chiffre]

 

tout dépend si vous préférez lire de gauche a droite ou de droite a gauche

 

 

en utilisant la même méthode, j'obtiens mon codecverb complet pour toutes les node:

 

21471C10 21471D44 21471E01 21471F01
21571C12 21571D14 21571E01 21571F01
21671C11 21671D64 21671E01 21671F01
21771C14 21771D24 21771E01 21771F01
21871C40 21871D9c 21871EA1 21871F01
21971C50 21971D9c 21971EA1 21971F02
21A71C4F 21A71D34 21a71E81 21A71F01 
21B71C20 21B71D4c 21B71E21 21B71F02
21B71CF0 21C71D01 21C71E33 21C71F59
21D71CF0 21D71D11 21D71E11 21D71F41
21E71C30 21E71D61 21E71E4B 21E71F01
21F71C60 21F71D71 21F71ECB 21F71F01

 

 

Malheureusement ces valeurs ne fonctionneront pas telle quelle, il nous faudra alors les modifier,

 

mais avant cela il nous faut comprendre a quoi elles correspondent.

 

Prenons le codecverb pour la node 0x14: 21471C10 21471D44 21471E01 21471F01

 

21471C10 le nombre 1 correspond a une valeur que l'on nome Default association, 0 a Sequence

21471D44 4=Color, 0=Misc

21471E01 0=Default Device, 1=Connection Type

21471F01 0=Port Connectivity, 1=Location

 

quelque règles a savoir:

 

la valeur Default association ne peut égal qu'a 1,2,3,4,5,6 ou f, elle définie la façon dont le système va géré les différents canaux, c'est pour cela qu'une même valeur ne peut être attribué fois, sauf de le cas des entrées/sorties du panneaux frontal, et des entrées/sortie S/PDIF

 

la valeur Sequence doit toujours égal a 0

 

la valeur Color correspond a la valeur inscrite dans la description de la node, vérifiez qu'elle coïncide avec la couleur du port sur la carte, voici toute les valeurs possibles:

 

Unknown 0 
Black 1 
Grey 2
Blue 3 
Green 4
Red 5
Orange 6
Yellow 7
Purple 8
Pink 9
Reserved A-D
White E
Other F

 

pour la valeur Misc il est preferable de la laisser telle quelle si elle est egal a 0 ou 1, sinon mettez la a 0

 

Default Device, indique le type de materiel qui correspond a la node, voici les valeurs possibles:

 

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, est le type de port qui correspond au materiel, voici les valeurs possibles:

 

Unknown 0 
1/8" stereo/mono 1
1/4" stereo/mono 2
ATAPI internal 3
RCA 4
Optical 5
Other Digital 6
Other Analog 7
Multichannel Analog (DIN) 8
XLR/Professional 9
RJ-11 (Modem) A
Combination B 
Other F

 

 

 

la valeur Port Connectivity peut rester telle quelle

 

la valeur Location, correspond a l'endroit ou ce trouve le port:

 

0 pour internal Atapi
1 pour le panneau arriere
2 pour le panneau avant

 

il vous est aussi possible, et meme consseillé de retirer les node dont vous n'avez pas besoin

 

ex: si votre tours ne dispose pas de panneau avant, vous pouvez sans hésitation retirer de votre codecverb les node 0x1B et 0x19, qui correspondent respectivement aux entrées casque et microphone du panneau avant

 

une fois ce travail terminer la forme de votre codecverb devra ressembler a cela :

 

21471c10 21471d40 21471e01 21471f01 21571c20 21571d10 21571e11 21571f01 21671c30 21671d60 21671e21 21671f01 21a71c40 21a71d30 21a71e81 21a71f01 21871c50 21871d90 21871ea1 21871f01 21e71c60 21e71d61 21e71e4b 21e71f01 21f71cf0 21f71d01 21f71ecb 21f71f00

 

avant d'aller plus loin nous allons convertir notre Codec Id (ou Vendor Id) de Hex a decimal, pour cela il vous faut ouvrir la calculette de Mac OS X, de la metre en mode "Programmeur" (alt+pomme+3), de choisir le mode Hex,

 

collez ensuite la valeur de votre Codec Id (0x10ec0888 pour moi), et ensuite de basculer en mode décimal, ce qui donne pour moi 283904136

 

gardez ces deux valeurs (codecverb et Codec Id) bien au chaud vous en aurez besoin plus tard

 

 

Félicitation car le plus dure est fait !!!

 

nous allons maintenant écrire toutes ces données dans AppleHDA.kext:

 

ouvrez ~/Desktop/AppleHDA.kext/Contents/PlugIns/AppleHDAController.kext/Contents/Info.plist avec PlistEdit Pro, et trouver les valeurs CodecID et ConfigData

 

pl110.jpg

 

collez  la valeur en décimal de votre Codec Id dans la colonne a droite de CodecID, collez ensuite la valeur de votre codecverb a droite de ConfigData

 

par ailleurs vérifiez que la valeur LayoutID est bien 12, si ce n'est pas le corrigé cela

 

vous pouvez enregistrer et fermer ce fichier

 

3 Patcher AppleHDAPlatformDriver

 

ouvrez maintenant ~/Desktop/AppleHDA.kext/Contents/PlugIns/AppleHDAPlatformDriver.kext/Contents/Info.plist

 

pl210.jpg

 

dans l'Arrey Layout, cherchez L'Items qui a la valeur LayoutID a 12

 

 

ne gardez que l'item qui contient la LayoutID a 12, vous pouvez effacer les autre Items,

 

dans l'Arrey PathMapRef ouvrez l'Arrey CodecID, dans la colonne de droite remplacez la valeur présente par la valeur en décimal de votre codecID

 

maintenant dans l'Arrey PathMaps, cherchez l'Items qui contient la valeur PathMapID égal a 9

 

pl310.jpg

 

vous pouvez effacer les autres Items

 

ouvrez ensuite l'Arrey PathMap, en fonction des nodes que vous avez laisser ou supprimez dans votre codecverb nous allons modifier cette partie,

 

vous pouvez voir dans ce schéma a quoi correspond chaque Items,

 

pathma10.jpg

 

pour définir les valeur nodeID, appliquez le script de Munky, a la copie de l'original de votre CodecDump.txt, comme cela:

 

placer  d'abord le fichier convert_hex_to_dec.rb sur le bureau

 

chmod +x ~/Desktop/convert_hex_to_dec.rb

~/Desktop/convert_hex_to_dec.rb ~/Desktop/codecdump.txt > ~/Desktop/ConvertedCodecDump.txt

 

pour découvrir les nodeID du micro arrière par exemple, explorons d'abord la node 9, a la fin en dessous de connection: 1 nous pouvons voir le chiffre 34, allons ensuite a la node 34 et en dessous de connection: 11 le premier chiffre est 24, allons maintenant a la node 24 et a coté de Pin Default on peut lire [Jack] Mic at Ext Rear, donc c'est la bonne

 

 

les nodeID pour le microphone arrière, seront donc 9-34-24

 

faisons la même chose pour Line IN, allons a la node 8, en dessous de connection: 1 on voit le chiffre 35, et a la node 35 prenons le 3 eme chifre qui est 26 , a la node 26 on voit [Jack] Line In at Ext Rear a coté de Pin Default

 

les nodeID pour l'entrée Line IN seront 8-35-26

 

Je l'avoue pour ce qui est des entrées cette methode ressemble un peu a du tatonage, mais pour les sortie c'est beaucoup plus cohérant

 

 

voyons la sortie verte du panneau arrière qui s'appelle [Jack] Line Out at Ext Rear, une recherche nous montre quelle appartiens a la node 20, en dessous de connection : ..... un chiffre devrait être étoile, logiquement le 12, c'est la deuxième partie de notre nodeID, allons maintenant a la node 12, en dessous de connection : ....., prenez toujours le premier chiffre pour les sorties, c'est a dire 2

 

Les nodeID pour la sortie Line Out verte seront, 20-12-2

 

heureusement c'est chiffre semble être commune a toutes les cartes, contrairement au codecverb, vous devriez donc pouvoir utiliser les valeurs suivante:

 

 Internal Mic (Frontpanel) 8-35-25

 Mic 9-34-24

 Line in  8-35-26

 Internal Speakers  20-12-2

 Headphones  21-13-3

 Line Out  22-14-4

Side  23-15-5

 Headphones (Frontpanel)  27-38-37

 SPDIF IN 10-31

 SPDIF OUT  30-6

 

 

il vous suffit maintenant d'editer chaque Items avec les bonnes valeur en fonctions des entrée/sortie que vous avez gardé,

 

voila c'est a peu près tout

 

Bonne chance ..........

A venir le patch pour snow leopard et leopard 10.5.8, et le patch dsdt pour l'audio .......

  • Like 1
Link to comment
Share on other sites

 Share

×
×
  • Create New...