Jump to content
InsanelyDeepak

How to fix static noise/distortion/crackling sound and combo jack on laptops?

Recommended Posts

 

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: 

  1. Download latest version of CodecCommander https://bitbucket.org/RehabMan/os-x-eapd-codec-commander/downloads/
  2. Codec_Dump of your codec from linux use this method mention here 
  3. 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

     Screen Shot 2019-02-08 at 3.51.47 PM.png

 

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 

 

 

  • Like 2

Share this post


Link to post
Share on other sites

@InsanelyDeepak 

 

Many thanks the clear and concise guide on resolving issues with combo jacks, I think this is about the clearest guide i've seen on the subject.

 

One question :-

 

Towards the end of the guide you say the following :-

 

Quote

latest version of AppleALC has feature to send command to codecs like CodecCommander , you can modify AppleALC info.plist to stop using CodecCommander, 

 

 

Could you please provide an example of sending commands using AppleALC rather than using hda-verb + codec commander.

There is no mention of the feature in the AppleALC documentation, and i can't find any examples on-line.

 

Many users now use Lilu + AppleALC so being able to resolve combo jack issues without having to install HDA-Verb + Codec Commander would be fantastic.

 

Thanks again

Cheers

Jay

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...