Patch Apple HDA
Tải file
B1: Tải xcode
B2: Tải trình edit file xml
Một số app khuyến khích
B3: Tải Pin Configurator
B4: Tải graphviz.pkg và cài đặt python2
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew install graphviz
#Copy từng dòng 1 vào terminal không copy cùng lúc
B5: Tải codecgraph
Sau kkhi giải nén thì hãy xoá những file sau
B6: Git Clone các file sau về và để ở desktop
B7: Tải các file layout và platform.
B8: Tải ISO của linux
Một số distro khuyến khích
Toàn bộ những file cần tải ở trên để đảm bảo an toàn mình đều sẽ backup lại ở đây
Các bạn có thể truy cập để tải về nếu những link bị hỏng hoặc tải những link trên quá lâu thì có thể tải cả folder này về
Chú ý:
Trên MacOS Monterey apple đã loại bỏ python2
ra khỏi /usr/bin
do đó khi chạy script bạn sẽ gặp lỗi như sau
Các khắc phục là sửa đổi file codecgraph.py
Chuẩn bị
B1: Tạo 1 chiếc usb live linux
B2: Boot vào linux live usb và nhập lệnh sau vào terminal
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
Sau khi chạy file xong tiến hành copy file codecdump.zip
ở Desktop vào một nơi nào đó rồi reboot lại macos
B3: Giải nén file ra thông thường ta nhận được 2 file
card0-codec#0.txt
card1-codec#0.txt
Ta sẽ mở thử từng file và nhìn vào mục codec giữ file có codec đúng với codec bạn cần patch và xoá file còn lại đi


B4: Ta sẽ tiếp tục xoá dòng AFG Function Id: 0x1 (unsol 1)
đi

B5: Rename file thành codec_dump.txt
Nếu bạn làm đúng hết tất cả bạn sẽ có 1 folder như sau

B6: Bạn mở terminal ra rồi kéo file Scrip Patch Codec by HoangThanh
vào và nhấn enter

Chỉnh sửa codecverbs
B1: mở file finalverbs.txt
lên ta sẽ có như sau
Verbs from Linux Codec Dump File: codec_dump.txt
Codec: Realtek ALC283 Address: 0 DevID: 283902595 (0x10ec0283)
Jack Color Description Node PinDefault Original Verbs
--------------------------------------------------------------------------------------------------------
Digital Unknown Mic at Int N/A 18 0x12 0x90a601a0 01271ca0 01271d01 01271ea6 01271f90
Analog Unknown Speaker at Int N/A 20 0x14 0x90170110 01471c10 01471d01 01471e17 01471f90
1/4 Unknown Line Out at Ext N/A 23 0x17 0x40020008 01771c08 01771d00 01771e02 01771f40
1/8 Black Speaker at Ext Rear 24 0x18 0x411111f0 01871cf0 01871d11 01871e11 01871f41
1/8 Black Speaker at Ext Rear 25 0x19 0x411111f0 01971cf0 01971d11 01971e11 01971f41
1/8 Black Speaker at Ext Rear 26 0x1a 0x411111f0 01a71cf0 01a71d11 01a71e11 01a71f41
Speaker at Ext Rear 0x1b 0x1b 1091637744 01b71cf0 01b71d11 01b71e11 01b71f41
Unknown Unknown Reserved at Ext N/A 29 0x1d 0x40e00001 01d71c01 01d71d00 01d71ee0 01d71f40
1/8 Black Speaker at Ext Rear 30 0x1e 0x411111f0 01e71cf0 01e71d11 01e71e11 01e71f41
1/8 Black HP Out at Ext Left 33 0x21 0x0321101f 02171c1f 02171d10 02171e21 02171f03
--------------------------------------------------------------------------------------------------------
Jack Color Description Node PinDefault Modified Verbs
--------------------------------------------------------------------------------------------------------
Digital Unknown Mic at Int N/A 18 0x12 0x90a601a0 01271ca0 01271d00 01271ea6 01271f90
Analog Unknown Speaker at Int N/A 20 0x14 0x90170110 01471c10 01471d00 01471e17 01471f90
1/4 Unknown Line Out at Ext N/A 23 0x17 0x40020008 01771c20 01771d00 01771e02 01771f40
Unknown Unknown Reserved at Ext N/A 29 0x1d 0x40e00001 01d71c30 01d71d00 01d71ee0 01d71f40
1/8 Black HP Out at Ext Left 33 0x21 0x0321101f 02171c40 02171d10 02171e21 02171f00
--------------------------------------------------------------------------------------------------------
B2: Hãy chú ý vào mục Modified Verbs
và copy chúng thành 1 file
01271ca0 01271d00 01271ea6 01271f90 01471c10 01471d00 01471e17 01471f90 01771c20 01771d00 01771e02 01771f40 01d71c30 01d71d00 01d71ee0 01d71f40 02171c40 02171d10 02171e21 02171f00
B3: Copy toàn bộ file vừa tạo vào clipboard sau đó mở tool Pin Configurator
B4: Chọn import --> clipboard

Nếu như bạn làm đúng các bước thì ta sẽ có như sau

B5: Ở đây ta thấy có rất nhiều cột nhưng bạn chỉ cần chú ý vào các cột sau
Nid: nó chỉnh là dạng decimal của các node
Device: Thiết bị âm thanh
Connector: Cổng kết nối của thiết bị
Port: Thông tin jack cắm
Gross Location: thông tin port internal hay external
Geometric Location: Chỉ vị trị của port
Color: Màu của cổng âm thanh
MISC: Thông tin kênh xuất ra để mặc định
EAPD: Kích hoạt tính năng switch giữa speaker và headphones
Cái này cho các bạn biết thêm thôi không cần quá để tâm vì nó đều có ghi ở file codec_dump.txt
Đầu tiên hãy click vào nid 20 ta sẽ được như sau

Bây giờ bạn sẽ tiến hành search node id dạng hex ở đây là 0x14 ở file codec_dump.txt
Node 0x14 [Pin Complex] wcaps 0x40058d: Stereo Amp-Out
Control: name="Speaker Playback Switch", index=0, device=0
ControlAmp: chs=3, dir=Out, idx=0, ofs=0
Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-Out vals: [0x00 0x00]
Pincap 0x00010014: OUT EAPD Detect
EAPD 0x2: EAPD
Pin Default 0x90170110: [Fixed] Speaker at Int N/A
Conn = Analog, Color = Unknown
DefAssociation = 0x1, Sequence = 0x0
Misc = NO_PRESENCE
Pin-ctls: 0x40: OUT
Unsolicited: tag=00, enabled=0
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Connection: 1
0x0c
Ta cần chú ý vào dòng
Pin Default 0x90170110: [Fixed] Speaker at Int N/A
Conn = Analog, Color = Unknown
EAPD 0x2: EAPD
Pin-ctls: 0x40: OUT
Ở đây ta sẽ phân tích được là
Device: Speaker
Connector: Analog
Color: Unknown
EAPD: EAPD
Port: Fixed
Gross Location: Int
Geometric Location: N/A
Và đây là những gì hiển thị trong app sau khi đã chỉnh

Node 0x17 [Pin Complex] wcaps 0x40050c: Mono Amp-Out
Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-Out vals: [0x80]
Pincap 0x00000010: OUT
Pin Default 0x40020008: [N/A] Line Out at Ext N/A
Conn = 1/4, Color = Unknown
DefAssociation = 0x0, Sequence = 0x8
Pin-ctls: 0x00: OUT
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Connection: 1
0x0f
Tương tự ở trên thì mọi thông tin cần thiết của ta đều có ở đây
Pin Default 0x40020008: [N/A] Line Out at Ext N/A
Conn = 1/4, Color = Unknown
Pin-ctls: 0x00: OUT
Ở đây ta cũng sẽ có tương tự như trên
Device: Line Out
Connector: 1/4
Color: Unknown
EAPD: NO
Port: N/A
Gross Location: Ext
Geometric Location: N/A

Node 0x1d [Pin Complex] wcaps 0x400400: Mono
Pincap 0x00000020: IN
Pin Default 0x40e00001: [N/A] Reserved at Ext N/A
Conn = Unknown, Color = Unknown
DefAssociation = 0x0, Sequence = 0x1
Pin-ctls: 0x20: IN
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Tương tự như các phần trước ta cũng sẽ có cần phần hiển thị thông tin
Pin Default 0x40e00001: [N/A] Reserved at Ext N/A
Conn = Unknown, Color = Unknown

Node 0x21 [Pin Complex] wcaps 0x40058d: Stereo Amp-Out
Control: name="Headphone Playback Switch", index=0, device=0
ControlAmp: chs=3, dir=Out, idx=0, ofs=0
Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-Out vals: [0x80 0x80]
Pincap 0x0001001c: OUT HP EAPD Detect
EAPD 0x2: EAPD
Pin Default 0x0321101f: [Jack] HP Out at Ext Left
Conn = 1/8, Color = Black
DefAssociation = 0x1, Sequence = 0xf
Pin-ctls: 0xc0: OUT HP
Unsolicited: tag=01, enabled=1
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Connection: 2
0x0c 0x0d*
Tương tự như các phần trên ta cũng sẽ có các mục hiển thị thông tin
Pin Default 0x0321101f: [Jack] HP Out at Ext Left
Conn = 1/8, Color = Black
Pin-ctls: 0xc0: OUT HP
Device: HP Out
Connector: 1/8
Color: Black
EAPD: NO
Port: Jack
Gross Location: Ext
Geometric Location: Left

Nếu như bạn đã đến được đây thì bạn hãy cố gắng lên nhé chúng ta sắp hoàn thành patch codec verbs rồi
Node 0x12 [Pin Complex] wcaps 0x40040b: Stereo Amp-In
Control: name="Mic Boost Volume", index=0, device=0
ControlAmp: chs=3, dir=In, idx=0, ofs=0
Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x2f, mute=0
Amp-In vals: [0x03 0x03]
Pincap 0x00000020: IN
Pin Default 0x90a601a0: [Fixed] Mic at Int N/A
Conn = Digital, Color = Unknown
DefAssociation = 0xa, Sequence = 0x0
Misc = NO_PRESENCE
Pin-ctls: 0x20: IN
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Tiếp theo ta cũng hãy phân tích dựa trên dữ liệu trên sẽ có là
Pin Default 0x90a601a0: [Fixed] Mic at Int N/A
Conn = Digital, Color = Unknown
Pin-ctls: 0x20: IN
Device: Mic
Connector: Digital
Color: Unknown
EAPD: NO
Port: Fixed
Gross Location: Int
Geometric Location: N/A

Và sau những quá trình phía trên ta có được như sau

B6: Ấn Get ConfigData
và copy chuỗi ký tự vừa được dump ra một file nào đó

Và đây là thành quả của chúng ta
<01471C10 01471D00 01471E17 01471F90 01470C02 01771C20 01771D00 01771E02 01771F40 01D71C30 01D71D00 01D71EE0 01D71F40 02171C40 02171D10 02171E21 02171F03 01271CA0 01271D00 01271EA6 01271F90>
Xác định pathmap
B1: Ta sẽ mở file codec_dump_dec.txt.svg

Nhìn có giống cái mạng nhện không nào 😂 Nhưng đừng lo nó rất đơn giản việc của bạn chỉ là đọc thật kỹ mà thôi

Và để cho các bạn đỡ bỡ ngỡ thì đây là hình ảnh path map của các loại codec Conexant và IDT

Còn đây là path map của Realtek cũng như là của mình

Hãy nhớ rằng cái Pin Complex
nào mà có ký tự [N/A]
thì trực tiếp bỏ qua nó và chuyển sang các Pin Complex
khác
Output
Đây là quy tắc đọc của Output

Tuân theo quy tắc này chúng ta sẽ có thể xác định được như sau

Ta sẽ có Path Map như sau:
Speaker: 20 -> 12 -> 2
Hp Out: 33 -> 13 -> 3
Input
Quy tắc xác định pathmap input

Tuân theo quy tắc này chúng ta sẽ có như sau

Ta sẽ có Path Map như sau:
Mic In: 17 -> 18
Như vậy là ta đã xác định được hết các path map
Patch Platforms.xml và layoutxx.xml
layoutxx.xml
B1: Mở file layoutxx.xml bằng trình edit xml
Như ở đây mình sẽ sử dụng propertree

B2: Ta sẽ tiến hành chỉ như sau:
LayoutID: bạn thay đổi hoặc giữ nguyên tuỳ thích, đây mình sẽ thay thành 3
CodecID: bạn cần thay bằng
DevID
ở filefinalverbs.txt
Inputs: tuỳ vào codec của bạn có LineIn hay không, nếu không có thì xoá dòng linein đi
PatchMapID: bạn có thể cho vào đây tên codec bạn patch hoặc bất kì số nào bạn thích


Platformsxx.xml
B1: Mở file Platformsxx.xml bằng trình edit xml
Như ở đây mình sẽ sử dụng propertree

B2: Ta sẽ tiến hành chỉ như sau:
PathMaps -> 0 -> PathMap -> 0 -> 0 là Mic
PathMaps -> 0 -> PathMap -> 0 -> 1 là LineIn
Nếu như đã xoá linein ở file layoutxx.xml thì cũng sẽ xoá dòng linein ở đây
PathMaps -> 0 -> PathMap -> 1 -> 0 là HP
PathMaps -> 0 -> PathMap -> 1 -> 1 là Speaker
PathMaps -> 0 -> PathMap -> PathMapID: ở đây bạn cần điền số giống với PathMapID ở layout#.xml.
Sau khi chỉnh sửa ta sẽ được:

Nếu trường hợp không có Audio Mixer/Selector thì bạn xoá đi key 1, chỉ điền vào key 0 và key 2 thôi nhé!
Binary Patch
B1: Các bạn copy folder MacKernelSDK
vào folder Lilu

B2: Mở file Lilu.xcodeproj
bằng xcode
B3: Build kext Lilu như hình

B4: Sau khi build thành công bạn sẽ có như ảnh

B5: Chuột phải vào file lilu chọn Show in finder

B6: Cho kext lilu
vừa build và folder MacKernelSDK
vào folder Apple ALC

B7: Vào folder Resources
xoá hết các codec thừa đi chừa lại codec đang patch mà thôi như của mình là ALC 283

B8: Vào folder codec và xoá đi tất cả chi chừa lại file info.plist
sau đó copy hay file layoutxx.xml và Platforms.xxxml

B9: Rename 2 file layoutxx và platformsxx thành layout và platforms với layout id mà bạn đã chọn ở trên như của mình là
layout3.xml
platforms3.xml
B10: Mở file AppleALC.xcodeproj
bằng xcode
B11: Mở AppleALC.xcodeproj -> PinConfigs -> Info.plist -> IOKitPersonalities -> as.vit9696.AppleALC-> HDAConfigDefault
Bạn có thể tự tạo hoặc edit 1 cái có sẵn

Các bạn cần chỉnh 1 số thứ sau:
Codec/Comment: thay đổi tuỳ thích
CodecID: thay bằng DevID của codec ở file
finalverbs.txt
ConfigData: bạn copy codec verb đã chuẩn bị đưa vào đây
LayoutID: nhập layout-id bạn đã chọn để patch ở trên

B12: Mở AppleALC.xcodeproj -> Resources -> (tên codec bạn đang patch) -> Info.plist -> Information Property List -> Files

B13: Xoá các dòng bên dưới 2 dòng
Layouts
Platforms
Sao cho chỉ chừa 1 item bên dưới 2 dòng này

Ta cần chỉnh một số thứ như sau
Comment: Điền tuỳ thích
Id: Điền layout-id của bạn đã chọn ở trên như của mình là 3
Path: Điền tên của 2 file layout và platforms của bạn như của mình là
layout3.xml.zlib
Platforms3.xml.zlib

B14: Ấn Command + S
B15: Ấn Build

B16: Nếu như bạn làm đùng tất cả thì sẽ có được như hình

Và như vậy là đã patch xong rồi
Cài đặt
B1: Chuột phải vào kext apple ALC chọn show in Finder


B2: Thêm kext Apple ALC vào EFI --> OC --> kext và tiến hành snapshot
Nếu là clover thì copy kext vào EFI --> Clover --> Kext --> Other
B3: Reboot và tận hưởng thôi
Như vậy là xong rồi
Tuy nhiên một số máy sau khi patch xong lần đầu khởi động có thể sẽ cực kì chậm khuyến khích bạn nên bật verbose và hãy kiên nhẫn
Last updated