17 de abril de 2013

Como ativar o áudio usando a AppleHDA.kext modificada

Existem pelo menos duas opções para se ativar o áudio no Hackintosh: usando a VoodooHDA.kext ou a AppleHDA.kext. Cada uma com suas peculiaridades, bem como vantagens e desvantagens. A escolha de uma ou outra dependerá principalmente do seu hardware, mais especificamente, do codec de áudio de sua placa-mãe.

VoodooHDA é uma kext alternativa, usada para codecs que não são suportados pela AppleHDA, a kext nativa do OS X. Assim sendo, é de se esperar que a AppleHDA tenha um rendimento/desempenho melhor, muito embora essa kext também seja modificada. O som desta, p.ex., é infinitamente superior ao da VoodooHDA, onde temos um som baixo e muitas vezes com ruídos. Mas, claro que existem alguns meios de se amenizar os problemas que encontramos nela.

Abaixo você terá uma lista com os codecs suportados pela AppleHDA modificada e se o seu não estiver lá provavelmente terá de usar a VoodooHDA, ou seguir este guia e você mesmo editar a AppleHDA para reconhecer o seu codec, um trabalho que exige muita dedicação. Se você tiver sorte, poderá encontrar uma kext já editada para o seu codec. Neste fórum já existem algumas, p.ex.: ALC269, ALC270, ALC272, ALC883, IDT92HD202, IDT92HD87B1, IDT92HD81B1X5, ADI1988B, Conexant CX20561, Conexant CX20583.

Os codecs suportados na AppleHDA modificada presente no Multibeast (tonymacx86, exige cadastro) são os da Realtek, ou seja:
ALC885 ou ALC889a
ALC887 ou ALC888bALC888s
ALC888 ou ALC1200
ALC889
ALC892
ALC898

Usando o Multibeast, instale a AppleHDA.kext correspondente ao seu codec, atualize o cache do Kernel e repare as permissões do sistema.

Além da instalação da AppleHDA, ainda é necessário que algo informe ao sistema qual é o seu codec. Este 'algo' pode ser uma kext habilitadora ou uma DSDT. Se optar por usar uma kext você poderá encontrá-la no Multibeast, instale a correspondente ao seu codec na sessão Without DSDT. Veja na imagem abaixo um exemplo para o codec ALC889:



Se optar pela DSDT, precisará fazer as edições apropriadas. Algo simples mas que exige muita atenção pois basta uma letra errada para o áudio não ser reconhecido. A edição do DSDT consiste em, pelo menos, duas etapas: 1) encontrar o dispositivo de áudio e 2) editar o ID deste.

Para uma maior explanação sobre DSDT, recomendo a leitura deste tópico: DSDT — entendendo a edição e uso de patches

O correto é procurar na sua DSDT pelo dispositivo HDEF, ele é o responsável pelo seu áudio. Se encontrá-lo, ótimo! Entretanto, algumas placas-mãe (geralmente as mais antigas) usam na DSDT o dispositivo AZAL. Se este for o seu caso, terá de renomeá-lo para HDEF. Existe um patch no app DSDT Editor chamado: AZAL to HDEF. Aplique-o em sua DSDT:

into device name_adr 0x001B0000 set_label
begin
HDEF
end;
into_all all code_regex AZAL replaceall_matched
begin
HDEF
end


Muito provavelmente precisará também do patch DTGP:


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

Em seguida aplique o patch HDEF:


into device name_adr 0x001B0000 parent_hid PNP0A08 remove_entry;
into device name_hid PNP0A08 insert
begin
Device (HDEF)\n
{\n
    Name (_ADR, 0x001B0000)\n
    Method (_DSM, 4, NotSerialized)\n
    {\n
        Store (Package (0x04)\n
            {\n
                "layout-id", \n
                Buffer (0x04)\n
                {\n
                    0x0C, 0x00, 0x00, 0x00\n
                }, \n
                "PinConfigurations", \n
                Buffer (Zero) {}\n
            }, Local0)\n
        DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))\n
        Return (Local0)\n
    }\n
}
end

Agora que temos o dispositivo HDEF, precisamos editá-lo de acordo com o nosso codec de áudio. Copie o código abaixo, e substitua pelo presente na sua DSDT:


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

Note a linha destacada em vermelho, 0x00,… é nela que informaremos o ID do nosso codec de áudio. Se você usa o OS X Lion (bem como a AppleHDA.kext dele) encontre o seu ID na tabela abaixo e substitua na DSDT:


AudioID   LayoutID  LayoutID      Injeção do LayoutID na DSDT
decimal   decimal   hexadecimal   hexadecimal

885   -->   885   -->   375  -->  0x75, 0x03, 0x00, 0x00
887   -->   887   -->   377  -->  0x77, 0x03, 0x00, 0x00
888   -->   888   -->   378  -->  0x78, 0x03, 0x00, 0x00
889   -->   889   -->   379  -->  0x79, 0x03, 0x00, 0x00
892   -->   892   -->   37C  -->  0x7C, 0x03, 0x00, 0x00
898   -->   898   -->   382  -->  0x82, 0x03, 0x00, 0x00

Se você usa o OS X Mountain Lion (bem como a AppleHDA.kext dele) use o LayoutID 1, padrão para essa kext: 0x01, 0x00, 0x00, 0x00

Pronto! DSDT editada, coloque-a no local apropriado e reinicie o sistema. Agora deverá aparecer o ícone de áudio na barra do sistema, ao lado da hora.



Crédito: Toleda, moderador no tonymacx86.


Dúvidas?
Acesse: Fórum MAC in PC

Nenhum comentário:

Postar um comentário