Hi Everyone
All new laptops and OSX causing Distortion/Crackling Sound and these new laptop has combojack instead traditional seperate jacks , so fixing this requires more workaround similar as linux is doing to work natively in OSX , i remember in July 2016 Goodwin_C ask me to fix ALC298 (ALC3266) for Dell XPS 9550, after understanding how linux is doing i was able to fix this with help of hda-verb Rehabman Port of linux hda-verb , special thanks to him , so i created a custom SSDT298 to use with CodecCommander this fixed combojack and static noise from headphone , after few days we found CodecCommander is not good when Speaker changes to Headphone same when Mic changes to Line-In , then commands need to send manually bcoz CodecCommander can't understand changes on OS Level , then i took break from Hack scene in 2017 Goodwin_C found a workaround to fix this issue , so he made ALCPlugFix and implemented same command in this and it was best method to fix this issue so far and using same method till now
i'm receiving lots of request to fix same issue from very long time for many codecs , so it's time to share this method so it could help you fix this easily according your codec
Requirements:
Download latest version of CodecCommander https://bitbucket.org/RehabMan/os-x-eapd-codec-commander/downloads/
Codec_Dump of your codec from linux use this method mention here
ALCPlugFix https://github.com/goodwin/ALCPlugFix
How to fix Static Noise/Distortion/Crackling issue :
1. Copy hda-verb to /usr/bin folder
2. Find Pin-ctls in you codec_dump , below is example Pin Complex Nodes for Headphone
Node 0x18 [Pin Complex] wcaps 0x40048b: Stereo Amp-In
Control: name="Headset Mic Boost Volume", index=0, device=0
ControlAmp: chs=3, dir=In, idx=0, ofs=0
Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0
Amp-In vals: [0x00 0x00]
Pincap 0x00003724: IN Detect
Vref caps: HIZ 50 GRD 80 100
Pin Default 0x411111f0: [N/A] Speaker at Ext Rear
Conn = 1/8, Color = Black
DefAssociation = 0xf, Sequence = 0x0
Misc = NO_PRESENCE
Pin-ctls: 0x20: IN VREF_80
Unsolicited: tag=00, enabled=0
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
so Pin-ctls in headphone nodes is
Pin-ctls: 0x20: IN VREF_80
3. now we have to send command to codec using hda-verb use below command in terminal for Headphone :
hda-verb 0x18 SET_PIN_WIDGET_CONTROL 0x20 = (Headphones Pin-ctls: 0x20 from codecDump)
Now you will notice this issue is fixed
Note : usually you don't need to send command for headphone only but in few case you need to send command to Line-In, Mic or Speaker too ,
you can create Custom SSDT to use with CodecCommander is better approach
How to fix ComboJack issue:
to fix combojack you need to send additional commands to Line-In (External Microphone) nodes
1. First find out which is your Line-In (External Microphone Combojack Node) is connected to Headphone Jack , below example : codec_dump
Node 0x19 [Pin Complex] wcaps 0x40048b: Stereo Amp-In
Control: name="Headset Mic Boost Volume", index=0, device=0
ControlAmp: chs=3, dir=In, idx=0, ofs=0
Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0
Amp-In vals: [0x00 0x00]
Pincap 0x00003724: IN Detect
Vref caps: HIZ 50 GRD 80 100
Pin Default 0x411111f0: [N/A] Speaker at Ext Rear
Conn = 1/8, Color = Black
DefAssociation = 0xf, Sequence = 0x0
Misc = NO_PRESENCE
Pin-ctls: 0x24: IN VREF_80
Unsolicited: tag=00, enabled=0
Power states: D0 D1 D2 D3 EPSS
Power: setting=D3, actual=D3
Node 0x1a [Pin Complex] wcaps 0x40058f: Stereo Amp-In Amp-Out
Control: name="Headphone Mic Boost Volume", index=0, device=0
ControlAmp: chs=3, dir=In, idx=0, ofs=0
Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0
Amp-In vals: [0x00 0x00]
Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-Out vals: [0x80 0x80]
Pincap 0x0001373c: IN OUT HP EAPD Detect
Vref caps: HIZ 50 GRD 80 100
EAPD 0x2: EAPD
Pin Default 0x411111f0: [N/A] Speaker at Ext Rear
Conn = 1/8, Color = Black
DefAssociation = 0xf, Sequence = 0x0
Misc = NO_PRESENCE
Pin-ctls: 0x20: IN VREF_HIZ
Unsolicited: tag=00, enabled=0
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Connection: 2
0x0c* 0x0d
there is two node 19 and node 1a , we have to use node 1a this is combojack node one jack for Headphone/Mic
Node 0x19 "Headset Mic Boost Volume"
Node 0x1a "Headphone Mic Boost Volume"
"Headset Mic Boost Volume" = External Port (Sperate Mic Jack)
"Headphone Mic Boost Volume" = ComboJack (One Jack for Headphone/Mic)
2. Find Pin-ctls in your codec_dump , below is example Pin Complex Nodes for Line-In
Node 0x1a [Pin Complex] wcaps 0x40058f: Stereo Amp-In Amp-Out
Control: name="Headphone Mic Boost Volume", index=0, device=0
ControlAmp: chs=3, dir=In, idx=0, ofs=0
Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0
Amp-In vals: [0x00 0x00]
Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-Out vals: [0x80 0x80]
Pincap 0x0001373c: IN OUT HP EAPD Detect
Vref caps: HIZ 50 GRD 80 100
EAPD 0x2: EAPD
Pin Default 0x411111f0: [N/A] Speaker at Ext Rear
Conn = 1/8, Color = Black
DefAssociation = 0xf, Sequence = 0x0
Misc = NO_PRESENCE
Pin-ctls: 0x20: IN VREF_HIZ
Unsolicited: tag=00, enabled=0
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Connection: 2
0x0c* 0x0d
so Pin-ctls in line-in nodes is
Pin-ctls: 0x20: IN VREF_HIZ
3. now we have to send command to codec using hda-verb use below command in terminal for Line-In (External Microphone) :
hda-verb 0x1a SET_PIN_WIDGET_CONTROL 0x20
before send command you need to plug headphone in combojack , this will fix your issue but when you unplug and replug headphone again you need to send command everytime so to fix this use ALCPlufix
4. Open ALCPlufix project in Xcode , you need Xcode to build and modify source
now change your node and Pin-ctls as in above image in 3 sections
hda-verb 0x18 SET_PIN_WIDGET_CONTROL 0x20 (Node18 Headphone)
hda-verb 0x1a SET_PIN_WIDGET_CONTROL 0x20 (Node1a Line-In)
5. Build project and copy ALCPlugFix to alc_fix folder and then run install.sh file
Now you don't need to worry about switching between combojack to mic
Note : for better performance you must use Custom SSDT + CodecCommander + ALCPlugfix
if still combojack doesn't work for you, then you need good patch for your codec, feel free ask here
PS: most of codec in my git repo using this method and working good so far https://github.com/insanelydeepak/cloverHDA-for-Mac-OS-Sierra-10.13
you can switch between commands to get best result , below are pin-ctls i have found in different codec_dumps so far , you can use any below and this will work for you
Pin-ctls: 0xc0: ALC292 (ALC3232)
Pin-ctls: 0x24: ALC288 (ALC3263)
Pin-ctls: 0x20: ALC298 (ALC3266)
Pin-ctls: 0x25: ALC255 (ALC3234)
Pin-ctls: 0xc0: ALC256 (ALC3246)
Pin-ctls: 0x40: ALC299
you can use this method on AppleALC, cloverHDA or DummyHDA ,
latest version of AppleALC has feature to send command to codecs like CodecCommander , you can modify AppleALC info.plist to stop using CodecCommander,
also while using AppleALC if you need CodecCommander you must use SSDTALC.aml , otherwise AppleALC will conflict with CodecCommander
latest version of CodecCommander is aware of AppleALC so you don't SSDTALC.aml at all , you can use both at same time
Hope this guide could help you in fixing these issue to enjoy a good sound
Regards
Credits: RehabMan