Jump to content

Guia de como corrigir a AppleHDA para o seu codec


Mirone
 Share

8 posts in this topic

Recommended Posts

ej3z.png
 
Guia de como corrigir a AppleHDA para o seu codec
 
Capítulo 1: Obtendo Informações do Codec.
 
Intro:  Este guia é para aqueles que querem usar AppleHDA e / ou tentar aprender como ele funciona. Ele se divide em várias etapas e vamos abordar cada uma delas ao longo do guia.
Primeiro Passo: Obtendo informações do codec. Existem outras maneiras mas neste guia vamos explicar como obter pelo Linux. Usando o Ubuntu ou outra distribuição.(obs: Use a versão mais recente do Linux assim como os drivers Alsa)
no terminal digite:

cat /proc/asound/card0/codec#1 > ~/Desktop/codec_dump.txt
ou
cat /proc/asound/card0/codec#0 > ~/Desktop/codec_dump.txt
ou se preferir Use este script de zhell:

cd ~/Desktop && mkdir CodecDump && for c in /proc/asound/card*/codec#*; do f="${c/\/*card/card}"; cat "$c" > CodecDump/${f//\//-}.txt; done && zip -r CodecDump.zip CodecDump
Salve-o em um lugar seguro.
No OS X, devemos usar o codec_dump para obter uma interface gráfica, convertê-lo para decimal (vou explicar mais tarde por quê), obter os verbos codec dele e corrigi-los para o OS X.
Baixe e instale: graphviz (somente versão para Lion)
Download CodecGraph:  Codegraph , descompactá-lo para desktop, copiar o codec_dump.txt gerado pelo linux para pasta CodeGraph em seguida, digite no termainal: 

cd ~/Desktop/codecgraph
e depois:

./codecgraph codec_dump.txt
Segundo Passo: Convertendo CodecGraph e CodecDump de hexadecimal para decimal:
Download convert_hex_to_dec.rb.zip http://www.mediafire.com/?1ytbnh0zvfl Créditos a Munky Que o fez.Descompacte-o na mesma pasta usada anteriormente (codecgraph) - No terminal:

cd ~/Desktop/codecgraph 
 
chmod +x ./convert_hex_to_dec.rb
 
./convert_hex_to_dec.rb codec_dump.txt.svg > ~/Desktop/codecgraph/codec_dump_dec.txt.svg
* substituir "codec_dump.txt" com seu usuário e nome do arquivo codec (se você deu um nome espécifico)

./convert_hex_to_dec.rb codec_dump.txt > ~/Desktop/codecgraph/codec_dump_dec.txt
* substituir "codec_dump.txt" com seu usuário e nome do arquivo codec (se você deu um nome espécifico)

 

Terceiro Passo: Por padrão nossa placa de som onboard não é reconhecida pelo OS X então pra que a mesma seja reconhecida devemos adicionar o device HDEF ao nosso DSDT.aml. Pra isso usamos os seguintes patchs: HDEF ou AZAL to HDEF em Ambos o Método DTGP tem que estar presente no nosso DSDT.aml. Devemos usar o DST Editor para aplicar os patchs corretamente http://olarila.com/forum/viewtopic.php?f=7&t=646 Os Patchs vocês encontram aqui http://olarila.com/forum/patches.php Esta é uma injeção de áudio geral e deve funcionar para todos os codecs:

Device (HDEF)
            {
                Name (_ADR, 0x001B0000)
                Method (_DSM, 4, NotSerialized)
                {
                    Store (Package (0x04)
                        {
                            "layout-id", 
                            Buffer (0x04)
                            {
                                0x0C, 0x00, 0x00, 0x00
                            }, 
 
                            "PinConfigurations", 
                            Buffer (Zero) {}
 
                        }, Local0)
                    DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                    Return (Local0)
                }
            }

Method (DTGP, 5, NotSerialized)
    {
        If (LEqual (Arg0, Buffer (0x10)
                {
                    /* 0000 */    0xC6, 0xB7, 0xB5, 0xA0, 0x18, 0x13, 0x1C, 0x44, 
                    /* 0008 */    0xB0, 0xC9, 0xFE, 0x69, 0x5E, 0xAF, 0x94, 0x9B
                }))
        {
            If (LEqual (Arg1, One))
            {
                If (LEqual (Arg2, Zero))
                {
                    Store (Buffer (One)
                        {
                            0x03
                        }, Arg4)
                    Return (One)
                }
 
                If (LEqual (Arg2, One))
                {
                    Return (One)
                }
            }
        }
 
        Store (Buffer (One)
            {
                0x00
            }, Arg4)
        Return (Zero)
    }

 

Capítulo 2: Correção de AppleHDA.Kext
 
Para que a AppleHDA Trabalhe corretamente para nosso codec devemos fazer algumas modificações nos plists da mesma.
Então quais são estas modificações?
Se você olhar para ela (clique com o botão direito do mouse /Mostrar conteúdo do pacote), você vai encontrar na pasta Content do Info.plist principal (não tocá-lo) e uma pasta de plugins. Há os plugins que temos que corrigir, mas não todos apenas Info.plist a partir de um presente: 
 
1-AppleHDAHardwareConfigDriver.kext
2-Platform.xml e layout12.xml ou Layout1.xml (Presentes na Pasta Resources)
3BinPatch
 
AppleHDAHardwareConfigDriver.kext
Para editar essa kext precisaremos obter ConfigData/CodecVerbs.
Você pode corrigi-los de duas maneiras, manual ou automático usando o script de  Signal64 chamado Verbit que realiza todo o processo automaticamente
sendo necessário alguns poucos ajustes você pode baixa-lo aqui: verbit
Descompacte-o na pasta codecgraph a mesma utilizada anteriormente. em seguida, Rodar este comando no terminal:
cd /Users/seu_nome_de_usuário/Desktop/codecgraph 
e depois:
./Verbit codec_dump.txt> verbs.txt
Nota: É necessário excluir do codec_dump.txt a linha: AFG Function Id: 0x1 (unsol 0)
Tendo feito isso abra a pasta codecgraph e vai ver dois arquivos um chamado verbs.txt e outro verbitdebug.txt.
verbit.texto é o de nosso interesse. Pois nele encontramos nossos ConfigData/CodecVerbs originais encima e os corrigidos embaixo.
verbs.txt:
Verbs from Linux Codec Dump File: codec_dump.txt


Codec: Realtek ALC887-VD   Address: 0   DevID: 283904135 (0x10ec0887)

   Jack   Color  Description                  Node     PinDefault             Original Verbs
--------------------------------------------------------------------------------------------------------
  ATAPI Unknown  SPDIF Out at Int ATAPI      17 0x11   0x99430140   01171c40 01171d01 01171e43 01171f99
    1/8   Black  Speaker at Ext Rear         18 0x12   0x411111f0   01271cf0 01271d11 01271e11 01271f41
    1/8   Green  Line Out at Ext Rear        20 0x14   0x01014010   01471c10 01471d40 01471e01 01471f01
    1/8   Black  Line Out at Ext Rear        21 0x15   0x01011012   01571c12 01571d10 01571e01 01571f01
    1/8  Orange  Line Out at Ext Rear        22 0x16   0x01016011   01671c11 01671d60 01671e01 01671f01
    1/8    Grey  Line Out at Ext Rear        23 0x17   0x01012014   01771c14 01771d20 01771e01 01771f01
 Mic at Ext Rear    0x18 0x18                        27367504 01871c50 01871d98     01871ea1 01871f01  
 Mic at Ext Front    0x19 0x19                        44145760 01971c60 01971d9c     01971ea1 01971f02  
    1/8    Blue  Line In at Ext Rear         26 0x1a   0x0181305f   01a71c5f 01a71d30 01a71e81 01a71f01
 HP Out at Ext Front    0x1b 0x1b                        35736608 01b71c20 01b71d4c     01b71e21 01b71f02  
    1/8   Black  Speaker at Ext Rear         28 0x1c   0x411111f0   01c71cf0 01c71d11 01c71e11 01c71f41
Optical   White  Line Out at Ext N/A         29 0x1d   0x4005e601   01d71c01 01d71de6 01d71e05 01d71f40
Optical  Orange  SPDIF Out at Ext Rear       30 0x1e   0x01456130   01e71c30 01e71d61 01e71e45 01e71f01
    1/8   Black  Speaker at Ext Rear         31 0x1f   0x411111f0   01f71cf0 01f71d11 01f71e11 01f71f41
--------------------------------------------------------------------------------------------------------


   Jack   Color  Description                  Node     PinDefault             Modified Verbs
--------------------------------------------------------------------------------------------------------
  ATAPI Unknown  SPDIF Out at Int ATAPI      17 0x11   0x99430140   01171c40 01171d00 01171e43 01171f90
    1/8   Green  Line Out at Ext Rear        20 0x14   0x01014010   01471c10 01471d40 01471e01 01471f01
    1/8   Black  Line Out at Ext Rear        21 0x15   0x01011012   01571c70 01571d10 01571e01 01571f01
    1/8  Orange  Line Out at Ext Rear        22 0x16   0x01016011   01671c80 01671d60 01671e01 01671f01
    1/8    Grey  Line Out at Ext Rear        23 0x17   0x01012014   01771c90 01771d20 01771e01 01771f01
 Mic at Ext Rear                             24 0x18   27367504     01871c50 01871d90 01871ea1 01871f01  
 Mic at Ext Front                            25 0x19   44145760     01971c60 01971d90 01971ea1 01971f01  
    1/8    Blue  Line In at Ext Rear         26 0x1a   0x0181305f   01a71ca0 01a71d30 01a71e81 01a71f01
 HP Out at Ext Front                         27 0x1b   35736608     01b71c20 01b71d40 01b71e21 01b71f01  
Optical   White  Line Out at Ext N/A         29 0x1d   0x4005e601   01d71cb0 01d71de0 01d71e05 01d71f40
Optical  Orange  SPDIF Out at Ext Rear       30 0x1e   0x01456130   01e71c30 01e71d60 01e71e45 01e71f01
--------------------------------------------------------------------------------------------------------
verbitdebug.txt:
Blacklist:
411111f0 400000f0 CD at Int ATAPI
Removed Nodes: 0x12 0x1c 0x1f 
Checking 71c Associations

Current Associations
 01171c40 = 4 
 01471c10 = 1 
 01571c12 = 1 
 01671c11 = 1 
 01771c14 = 1 
 01871c50 = 5 
 01971c60 = 6 
 01a71c5f = 5 
 01b71c20 = 2 
 01d71c01 = 1  note: Changed 0 to 1
 01e71c30 = 3 

  Used associations = 4 1 1 1 1 5 6 5 2 1 3
Unused associations = 7 8 9 a b c d e

Correcting duplicate associations

Checking if 4 already exists in: 1 1 1 1 5 6 5 2 1 3 
   no duplicate found
Checking if 1 already exists in: 4 1 1 1 5 6 5 2 1 3 
   duplicate found - Is this the first time we've seen this association?
   yes - ignoring
Checking if 1 already exists in: 4 1 1 1 5 6 5 2 1 3 
   duplicate found - Is this the first time we've seen this association?
   no - replacing association with: 7
Checking if 1 already exists in: 4 1 7 1 5 6 5 2 1 3 
   duplicate found - Is this the first time we've seen this association?
   no - replacing association with: 8
Checking if 1 already exists in: 4 1 7 8 5 6 5 2 1 3 
   duplicate found - Is this the first time we've seen this association?
   no - replacing association with: 9
Checking if 5 already exists in: 4 1 7 8 9 6 5 2 1 3 
   duplicate found - Is this the first time we've seen this association?
   yes - ignoring
Checking if 6 already exists in: 4 1 7 8 9 5 5 2 1 3 
   no duplicate found
Checking if 5 already exists in: 4 1 7 8 9 5 6 2 1 3 
   duplicate found - Is this the first time we've seen this association?
   no - replacing association with: a
Checking if 2 already exists in: 4 1 7 8 9 5 6 a 1 3 
   no duplicate found
Checking if 1 already exists in: 4 1 7 8 9 5 6 a 2 3 
   duplicate found - Is this the first time we've seen this association?
   no - replacing association with: b
Checking if 3 already exists in: 4 1 7 8 9 5 6 a 2 b 
   no duplicate found

New 71c Associations
 Before      After
--------------------------------------------------
01171c40   01171c40  01171d01  01171e43  01171f99
01471c10   01471c10  01471d40  01471e01  01471f01
01571c12   01571c70  01571d10  01571e01  01571f01
01671c11   01671c80  01671d60  01671e01  01671f01
01771c14   01771c90  01771d20  01771e01  01771f01
01871c50   01871c50  01871d98  01871ea1  01871f01
01971c60   01971c60  01971d9c  01971ea1  01971f02
01a71c5f   01a71ca0  01a71d30  01a71e81  01a71f01
01b71c20   01b71c20  01b71d4c  01b71e21  01b71f02
01d71c01   01d71cb0  01d71de6  01d71e05  01d71f40
01e71c30   01e71c30  01e71d61  01e71e45  01e71f01

Reset 71d Misc to 0
New 71d Associations
 Before                After
--------------------------------------------------
01171d01   01171c40  01171d00  01171e43  01171f99
01471d40   01471c10  01471d40  01471e01  01471f01
01571d10   01571c70  01571d10  01571e01  01571f01
01671d60   01671c80  01671d60  01671e01  01671f01
01771d20   01771c90  01771d20  01771e01  01771f01
01871d98   01871c50  01871d90  01871ea1  01871f01
01971d9c   01971c60  01971d90  01971ea1  01971f02
01a71d30   01a71ca0  01a71d30  01a71e81  01a71f01
01b71d4c   01b71c20  01b71d40  01b71e21  01b71f02
01d71de6   01d71cb0  01d71de0  01d71e05  01d71f40
01e71d61   01e71c30  01e71d60  01e71e45  01e71f01

Correct 71f 02 FP to 01
New 71f Associations
 Before                                    After
--------------------------------------------------
01171d01   01171c40  01171d00  01171e43  01171f90
01471d40   01471c10  01471d40  01471e01  01471f01
01571d10   01571c70  01571d10  01571e01  01571f01
01671d60   01671c80  01671d60  01671e01  01671f01
01771d20   01771c90  01771d20  01771e01  01771f01
01871d98   01871c50  01871d90  01871ea1  01871f01
01971d9c   01971c60  01971d90  01971ea1  01971f01
01a71d30   01a71ca0  01a71d30  01a71e81  01a71f01
01b71d4c   01b71c20  01b71d40  01b71e21  01b71f01
01d71de6   01d71cb0  01d71de0  01d71e05  01d71f40
01e71d61   01e71c30  01e71d60  01e71e45  01e71f01
Sobre NodeId (NID) 0x14 em hexadecimal, 20 em decimal:
1/8   Green  Line Out at Ext Rear        20(Decimal) 0x14(Hexadecimal)   0x01014010   01471c10 01471d40 01471e01 01471f01
 
Os verbos padrão para ele: 01471c10 01471d40 01471e01 01471f01 
01471c10: 
0 471c10 = CAD (Codec Endereço) 
0 14 = 71c10 NID (NodeID) 
014 71 c10 = Comandos verbo como 71 "c", "d", "e", "f" 
01471c 10 de Dados = verbo 
E o mesmo para o resto.
Acho que Cad, NID e comandos verbais são muito simples de entender: os 2 primeiros você pega do dump do linux, e os comandos são padrão 71c, 71d, 71e, 71f.
Vamos ver sobre os dados do verbo: 
 
- 71c XY  X=Default Association(Associação Padrão) Y=Sequence(Seqüência)
Associação padrão e Seqüência: são utilizados em conjunto por um software para Complexos grupo PIN (e, portanto, tomadas) juntos em blocos funcionais para apoiar a operação multicanal. O Software pode assumir que todas as Tomadas(Jack) com a mesma quantidade de associação são destinados a ser associados, por exemplo, para fornecer seis canais de saída analógico. A Associação padrão também pode ser usado por um software para priorizar a alocação de recursos em situações restritas. Os valores mais baixos de associação padrão  seria o maior em prioridade para recursos como nós de processamento ou de entrada e de saída de conversores. Note-se que esta é uma  associação padrão única, e o software pode substituir esse valor, se necessário, em particular se o usuário fornecer informações adicionais sobre a configuração do sistema particular. Um valor de 0000b é reservado e não deve ser usado. O Software pode interpretar esse valor para indicar que os dados de configuração Pin não foram inicializados corretamente. Um valor de 1111b é um valor especial que indica que a Associação tem a menor prioridade. Complexos de múltiplos pinos diferentes podem partilhar  este valor, e cada um se destina a ser mostrado como dispositivos independentes.
 
Sequência: indica a ordem das tomadas(jacks) do grupo de associação. A tomada de número menor no grupo de associação deve ser atribuído a menor canais numerados na Corrente, etc Os números não precisam ser seqüencial dentro do grupo, apenas a ordem. Os números de seqüência dentro de um conjunto de associações padrão devem ser exclusivo.
* Minha nota para isso, se você olhar para o CodecVerb da AppleHDA.kext (não importa o codec) você vai ver que a seqüência é sempre 0. 
Por isso, e por que os nossos CodecVerbs são diferentes? Simples a  Apple não tem saída analógica multicanal! Por isso você deve alterá-lo para 0. 
* Sobre Associação padrão, Mantenha o padrão, em ordem, e se algum NID usar a mesma associação, substituir pela que esta na reserva ... os valores que você pode usar são: 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e f (ver o que faz verbit se você ainda não entendeu).
 
- 71d XY  X=cores Y=variadas
Indica a cor do conector físico para uso do software.
Desconhecido 0 Preto 1 Cinza 2 Azul 3 Verde 4 Vermelho 5 Laranja 6 Amarelo 7 Roxo 8 Rosa 9 Reservados A-D Branco E Outros F 
Miscelânea: é um campo de bits usado para indicar outras informações sobre a tomada(jack). Atualmente, apenas o bit 0 é definido. Se 0 é pouco definido, indica que a tomada não tem presença detectar capacidade, por isso mesmo um Complexo Pin indica que o hardware codec suporta detectar a funcionalidade da tomada, o circuito externo não é capaz de suportar a funcionalidade. 
Reservado 3 
Reservado 2 
Reservado 1 
Jack Detect Override 0 
 
* Use 0 para Jack Detect - dispositivo externo (por exemplo, fones de ouvido Mic etc) 
Use 1 para Jack desativadas - dispositivo interno (por exemplo, alto-falantes internos, microfone interno) 
 
- 71e XY  X=Dispositivo padrão Y=Tipo de conexão
 
Dispositivo padrão: indica a intenção de uso da Tomada (Jack) ou dispositivo. Isto pode indicar tanto a etiqueta sobre a Tomada (Jack) ou o dispositivo que está fisicamente conectado uma  porta, tal como  altofalantes integrados e semelhantes.
Line Out 0Speaker  1HP Out 2CD 3SPDIF Out 4Digital Other Out 5Modem Line Side 6Modem Handset Side 7Line In 8AUX 9Mic In ATelephony BSPDIF In CDigital Other In DReserved EOther F
Tipo de conexão: indica o tipo de conexão física, como uma saída estéreo 1/8-inch ou um conector digital óptico, etc Software pode usar esta informação para fornecer descrições de interface do usuário úteis para o usuário ou para modificar as capacidades de codec relatados com base nas capacidades do transporte físico externo para o codec.
Unknown 0 1/8" stereo/mono 11/4" stereo/mono 2ATAPI internal 3RCA 4Optical 5Other Digital 6Other Analog 7Multichannel Analog (DIN) 8XLR/Professional 9RJ-11 (Modem) ACombination B Other F
 
- 71f XY  X=Porta de Conectividade  Y=Localização
 
Porta de conectividade: indica a conectividade externa do Complexo Pin. O software pode usar esse valor para saber a quais Complexos Pins estão ligados as tomadas, dispositivos internos, ou não estão ligados em tudo. 
00b - O Complexo Portuário está conectado a uma tomada (1/8 ", ATAPI, etc.) 
01b - Sem conexão física para a Porta. 
10b - Um dispositivo de função fixa (alto-falante integrado, microfone integrado, etc) esta conectado. 
11b - Tanto uma Tomada (Jack) e um dispositivo interno estão ligados. A informação fornecida em todos os outros campos se refere ao dispositivo integrado. O pino de PD irá refletir o estado da tomada, o usuário terá de ser consultado para descobrir o que é. 
 
Localização: indica a localização física da tomada ou dispositivo para o qual o complexo de pino é conectado. Isto permite que o software possa indicar, por exemplo, de que o dispositivo é o "painel frontal Headphone Jack", em oposição às ligações do painel traseiro.* Detalhes: 
Converter o número hexadecimal de 2 dígitos para binário. 
Preencher a frente com zeros para torná-lo 8 dígitos.
Exemplo:
0x02 = 10 = 00000010 binário 8 dígitos 

Lendo os bits da esquerda para a direita: 

Conectividade da porta - bits 07:06 
----------------------------------------------------------- 
00 - A porta está conectado a uma tomada (jack) 
01 - Não é uma porta externa ou não há nenhuma conexão física para a porta 
10 - Função fixa / embutido no dispositivo (alto-falante integrado, microfone, etc) 
11 - Dispositivo e tomada interna estão ligados 

Parte 1 Localização - bits 05:04
----------------------------------------------------------- 
00 - Externa ao chassi primário 
01 - Interna 
10 - Chassi separado 
11 - Outros 

Parte 2 Localização - bits 03:00
----------------------------------------------------------- 
O significado depende Parte 1 Localização 

00 0000 N/A 
00 0001 Traseira 
00 0010 Frente 
00 0011 Esquerda 
00 0100 Direito 
00 0101 Superior 
00 0110 Inferior 
00 0111 Especial (painel traseiro) 
00 1000 Especial (baia drive) 

01 0000 N/A 
01 0111 Especial (Riser) 
01 1000 HDMI 
01 1001 ATAPI 

10 0000 N/A 
10 0001 Traseira 
10 0010 Frente 
10 0011 Esquerda 
10 0100 Direito 
10 0101 Superior 
10 0110 Inferior 

11 0000 N/A 
11 0110 ? 
11 0111 Dentro da tampa móvel (exemplo: mic) 
11 1000 Fora da tampa móvel 

Bits 
71cf01 = 00 00 0001 - Porta tem um jack - É Externo - Localização Traseira 
71cf02 = 00 00 0010 - Porta tem um jack - É Externo - Localização do painel frontal 
71cf59 = 01 01 1001 - Não é uma Porta externa - ATAPI 
71cf18 = 00 01 1000 - Porta tem um jack - Externa - HDMI
71cf90 = 10 01 0000 - Dispositivo Interno - Interna - N/A 
         |  |  ||||
         |  |  |--------- Localização parte 2
         |  |------------ Localização parte 1  
         |--------------- Conectividade da porta
Obrigado novamente a Signal64 para sua VerbCheatSheet: http://rapidshare.de/files/48146006/VerbCheatSheet.rtf.html
* Todas as informações vieram da especificação High Definition Audio Leia-o para mais detalhes!http://download.intel.com/standards/hdaudio/pdf/HDAudio_03.pdf
 
Conclusão:
O script faz um ótimo trabalho, ainda não é perfeito ele não sabe  quais são as nossas opções ... talvez uma aplicação GUI possa ser acrescentada no futuro.
Então, o que pode ser essas opções?
- Você pode querer configurar microfone como interno para obter redução de ruído ambiente para isso.
- Alguns codecs tem apenas saídas de linha mesmo truque pode aplicado e você pode definir a primeira saída como Altofalantes e obter no software dsp a opção para ele.
- Para suporte do painel frontal pode ser necessário transformar de novo microfone em Line In.(Saída de Linha)
E assim por diante ...
Agora que obtemos todas as informações necessárias sobre ConfigData/CodecVerbs vamos editar o info.plist da AppleHDAHardwareConfigDriver.kext.
 
1- Editando AppleHDAHardwareConfigDriver.kext (Info.plist)
(clique com o botão direito do mouse /Mostrar conteúdo do pacote) Abra o Plist com um editor de Plist.
navegar até a chave IOKitPersonalities/HDA Hardware Config ResourceHDAConfigDefault.
 
1-CodecID: Colocar o ID de seu codec em Números Decimais 0x10ec0887(Hexadecimal) --> 283.904.135(Decimal)
2-ConfigData: Aqui colocamos nossos ConfigData/Verbs codec que corrigimos anterirormente.
3-FuncGroup: Deve ser sempre 1.
4-LayoutID: Por padrão é 12 mas pode ser qualquer outro número desde que você também mude o número do layout no seu DSDT.aml
*OBS: Nas kexts de Mountain Lion so podemos usar um layout que já tenha na própria kext e não outros como layout887.xml como era usado nas kexts de Lion.
 
o1dw.png
 
2- Editando Platform.xml e layout12.xml ou Layout1.xml (Presentes na Pasta Resources)
Esta é a parte mais complicada.
Dentro da pasta Resources você encontrará vários layouts.xml e um Platforms.xml.
vamos editar ambos de acordo com as correções anterirores ou seja em AppleHDAHardwareConfigDriver.kext usamos o layout12 então vamos fazer as devidas edições sobre este.
 
1-CodecID: Colocar o ID de seu codec em Números Decimais 0x10ec0887(Hexadecimal) --> 283.904.135(Decimal)
2-PathMapID: Mudar para 1
 
uip7.png
 
 
O que tinhamos que corrigir em Layout12.xml ja esta concluído.
Agora vamos editar o Platforms.xml é aqui que se encontra os pathmaps. Dentro da Chave Pathmaps existem outras chaves 
que estão numeradas e cada uma corresponde a um Layout.xml especifico por exemplo: usamos layout12.xml dentro do mesmo tem uma chave com pathmap Id=1.
No exemplo do codec que estamos usando um ALC887-VD temos 4 saídas e 2 entradas de audio. Totalizando 6 dispositivos.
Para dispositivos de saída, o PathMap segue esse padrão:
Pin Complexo(NodeID)-> Audio Mixer-> Saída de Áudio 
Então, nós temos que encontrar um nó Pin Complexo(NodeID), um nó Audio Mixer e, finalmente, um nó de saída de áudio. 
Para dispositivos de entrada, o PathMap seguem esse padrão:
Pin-Complexo(NodeID)> Audio Selector/Mixer- entrada> Áudio
Aqui, temos de encontrar um nó Pin Complexo(NodeID), um mixer de áudio / nó Selector e, finalmente, um nó de entrada de áudio.
Abra o arquivo codec_dump_dec.txt.svg gerado na pasta codegraph você vai ver algo como isto:
nxur.png
 
note que 20(Pin complexo)-->12(nó Audio Mixer)-->2(nó de Saída de Audio)
a partir dai ja temos nosso pathmap formado para LineOut(no caso o node20 é um Alto-falante Interno).
Faremos o mesmo para o restante do nosso pathmaps.
Obs: Observe que na captura de tela anexada acima você pode ver que as linhas continuas são as ligações dos nodes.
osx.jpgCaptura de Tela 2013-01-20 às 13.50.18.png[/attachment]
Os pathmaps para o codec usado como exemplo ficaram assim:
 
9-34-24= Mic Externo
9-34-25= Mic Externo Frontal
8-35-26= Saída de Linha
20-12-2= Auto-Falantes Internos
27-38-37= Fone
23-15-5= Saída de Linha
22-14-4= Saída de Linha
23-13-3= Saída de Linha
30-6= Saída Digital
 
3- BinPatch:
A partir da versão de Snow Leopard 10.6.3 foi necessário corrigir também o arquivo binário da Applehda.kext ele se encontra dentro da pasta MacOs que fica dentro da Kext, para fazermos esta correção usaremos o script feito por bcc9.
[attachment=1]patch-hda.zip[/attachment]
copie a pasta para o desktop e ja com a Applehda.kext edita e instalada em S/L/E digite o seguintes comandos no terminal:
cd ~/desktop/patch-hda./patch-hda.pl 10ec0887
*Nota: Abra a pasta patch-hda e depois o arquivo patch-hda-codecs.pl dentro dele encontra-se todos os codecs suportados 
Uma dica se o seu codec não for suportado pelo script você pode tentar corrigir manualmente usando um editor binário como HexFiend e substituir um dos codecs usados
na correção pelo seu.
No exemplo acima foi corrigido o binário para o codec ALC887-VD se você for corrigir para seu codec é necessário substituir o 10ec0887 pelo id de seu codec.
No binário eles são escritos da direita para esuerda ou seja 10ec0887=8708ec10.
 
*Importante: A kext do Mountain Lion tem uma nova estrutura e os arquivos são compactados em .zlib
para descompactar e editar esses arquivos usaremos o Zlib. 
Esse aplicativo é baseado no script de RevoGirl, ele torna o processo de arquivos .zlib da
AppleHDA.kext para descompactar/compactar mais fácil. Basta arrastar o arquivo zlib. Ao aplicativo e
ele irá descompactar ou arraste o arquivo xml. E ele vai compactar para .zlib
 
Kext usada como exemplo para este guia: http://www.sendspace.com/file/tbfthk
Pasta com todas ferramentas necessárias para edição da Applehda.kext e algumas kexts originais de diversas versões do OS x: http://www.sendspace.com/file/kemzwt
 
 
Créditos: The King, bcc9, RevoGirl(R.I.P), EMlyDinEsH, Munky, TimeWalker e outros.
  • Like 3
Link to comment
Share on other sites

Hey Mirone parabens pelo tuto.

 

uma duvida, no Capítulo 2: Correção de AppleHDA.Kext.

 

o Platform.xml e layout12.xml ou Layout1.xml tem que ser o padrão?

por exemplo, todo o codec que eu tiver seja Realtek, Conexant ou outro, a modificação será aplicada só nos Platform.xml e layout12.xml ou Layout1.xml ?

Link to comment
Share on other sites

Não pode usar outro, eu uso LayoutID 4, o importante é o conteúdo dele.

mas tem que ser um LayouiD nativo, não pode usar mais um com mesmo número do codec por exemplo layout887.xml.zlib.

 

Beleza Mirone valeu mesmo.

 

Duvida solucionada  ;)

Link to comment
Share on other sites

  • 2 weeks later...
  • 9 months later...

O final ficou meio que inexplicado, claro, para nós mais desentendidos.

 

Os pathmaps para o codec usado como exemplo ficaram assim:

 
9-34-24= Mic Externo
9-34-25= Mic Externo Frontal
8-35-26= Saída de Linha
20-12-2= Auto-Falantes Internos
27-38-37= Fone
23-15-5= Saída de Linha
22-14-4= Saída de Linha
23-13-3= Saída de Linha
30-6= Saída Digital
 
Como aplicar estes pathmaps dentro do Platforms.xml????? Usamos as três sequências decimais de cada item????
Meu layout id é 1, eEntão qual Platforms.xml devo editar?
 
​Achei bem confusa essa tradução/explicação, agradeço se alguém puder detalhar melhor. Obrigado.
 
Mais uma dúvida: as versões do OSX mudam, mas o pathmap do codec ALC8889a, que é o meu, é sempre o mesmo independente da versão, correto?
Então bastaria copiar e colar no Yosemite o Platforms do Mavericks, por exemplo?
Link to comment
Share on other sites

Eu recomendaria você ir pelo caminho mais fácil, por ex: 

Se existe uma AppleHDA para o seu codec, você pode usar o AppleHDAPatcher, ou se usa uma já patheada, e quer atualizar para outro OS X, você pode ir por aqui: Atualizando sua AppleHDA

 

Mas se nenhum desses atalhos que te dei ajudaram, espere a ajuda do Mirone, ele é o mais qualificado para te ajudar nesse assunto.  ;) 

  • Like 1
Link to comment
Share on other sites

 Share

×
×
  • Create New...