Contribute
Register

Asus Z690 ProArt Creator WiFi (Thunderbolt 4) + i7-12700K + AMD RX 6800 XT

@CaseySJ
So more updates and observations.

I updated to the latest BIOS, and I did not have the endless loop problem you had. Mine rebooted twice after initial update, each boot continuing to update a different area. After the 2nd reboot it was finished, and it forced me back into the BIOS to update all my settings. Once I did that, I was able to return to macOS, but Thunderbolt Maple Ridge was completely missing. I then went into Windows, and it was missing there as well. I returned to the BIOS to double check that it was turned on, which it was. My solution was the old engineering trick of disabling it in the BIOS, saving that, rebooting, going back into BIOS and re-enabling all Thunderbolt settings. This returned Maple Ridge to macOS and Windows, so I'm writing that off as a BIOS update glitch.

I have also updated to Monterey 12.2, with no issue.

My latest Maple Ridge findings have things working VERY WELL. I now have my UltraFine and Dock daisy chained on one Maple Ridge port. They are both fully functional! I still have my patched GC-Titan Ridge V2 in the bottom slot, which I have now moved to XHC4 with Maple Ridge at XHC3.

One significant finding with this configuration is that hot plug connecting does not seem to work, even on my patched Titan Ridge card. Thunderbolt devices are detected in the Thunderbolt Bus, but they will not activate whether it is a hard drive or the Apple Ethernet port. If I boot with my OWC Envoy Express plugged into either Maple Ridge or Titan Ridge ports, it will mount and works properly. Also, I can eject the drive without error, but I cannot reconnect it. Again, even on my patched Titan Ridge. However if I plug in USB-C devices directly to any Thunderbolt port, they do mount immediately and eject properly.

USB1.jpg
USB2.jpg
TitanRidge.jpg
 
** AppleALC Layout Customization **
Warning: Geek Zone Ahead :)
Please do not quote this guide in its entirely. Post an excerpt or link instead.

This post describes the process of creating a custom audio layout for AppleALC. This guide is based in part on this article by F0x1c.
  1. Discover codec inputs, outputs, mixers, connections, and pin configurations. This is done by booting the system from a Linux Live system (a fully installed copy of Linux will not work) and running a simple shell command.
    • cat /proc/asound/card2/codec#0 > ~/Desktop/codec_dump.txt
      Code:
      Codec: Realtek ALC1220
      Address: 0
      AFG Function Id: 0x1 (unsol 1)
      Vendor Id: 0x10ec1168
      Subsystem Id: 0x1043882a
      Revision Id: 0x100101
      No Modem Function Group found
      Default PCM:
          rates [0x5f0]: 32000 44100 48000 88200 96000 192000
          bits [0xe]: 16 20 24
          formats [0x1]: PCM
      Default Amp-In caps: N/A
      Default Amp-Out caps: N/A
      State of AFG node 0x01:
        Power states:  D0 D1 D2 D3 D3cold CLKSTOP EPSS
        Power: setting=D0, actual=D0
      GPIO: io=8, o=0, i=0, unsolicited=1, wake=0
        IO[0]: enable=0, dir=0, wake=0, sticky=0, data=0, unsol=0
        IO[1]: enable=0, dir=0, wake=0, sticky=0, data=0, unsol=0
        IO[2]: enable=0, dir=0, wake=0, sticky=0, data=0, unsol=0
        IO[3]: enable=0, dir=0, wake=0, sticky=0, data=0, unsol=0
        IO[4]: enable=0, dir=0, wake=0, sticky=0, data=0, unsol=0
        IO[5]: enable=0, dir=0, wake=0, sticky=0, data=0, unsol=0
        IO[6]: enable=0, dir=0, wake=0, sticky=0, data=0, unsol=0
        IO[7]: enable=0, dir=0, wake=0, sticky=0, data=0, unsol=0
      Node 0x02 [Audio Output] wcaps 0x41d: Stereo Amp-Out
        Control: name="Front Playback Volume", index=0, device=0
          ControlAmp: chs=3, dir=Out, idx=0, ofs=0
        Device: name="ALC1220 Analog", type="Audio", device=0
        Amp-Out caps: ofs=0x57, nsteps=0x57, stepsize=0x02, mute=0
        Amp-Out vals:  [0x3c 0x3c]
        Converter: stream=0, channel=0
        PCM:
          rates [0x7e0]: 44100 48000 88200 96000 176400 192000
          bits [0x1e]: 16 20 24 32
          formats [0x1]: PCM
        Power states:  D0 D1 D2 D3 EPSS
        Power: setting=D0, actual=D0
      Node 0x03 [Audio Output] wcaps 0x41d: Stereo Amp-Out
        Control: name="Surround Playback Volume", index=0, device=0
          ControlAmp: chs=3, dir=Out, idx=0, ofs=0
        Amp-Out caps: ofs=0x57, nsteps=0x57, stepsize=0x02, mute=0
        Amp-Out vals:  [0x3c 0x3c]
        Converter: stream=0, channel=0
        PCM:
          rates [0x7e0]: 44100 48000 88200 96000 176400 192000
          bits [0x1e]: 16 20 24 32
          formats [0x1]: PCM
        Power states:  D0 D1 D2 D3 EPSS
        Power: setting=D0, actual=D0
      Node 0x04 [Audio Output] wcaps 0x41d: Stereo Amp-Out
        Control: name="Center Playback Volume", index=0, device=0
          ControlAmp: chs=1, dir=Out, idx=0, ofs=0
        Control: name="LFE Playback Volume", index=0, device=0
          ControlAmp: chs=2, dir=Out, idx=0, ofs=0
        Amp-Out caps: ofs=0x57, nsteps=0x57, stepsize=0x02, mute=0
        Amp-Out vals:  [0x3c 0x3c]
        Converter: stream=0, channel=0
        PCM:
          rates [0x7e0]: 44100 48000 88200 96000 176400 192000
          bits [0x1e]: 16 20 24 32
          formats [0x1]: PCM
        Power states:  D0 D1 D2 D3 EPSS
        Power: setting=D0, actual=D0
      Node 0x05 [Audio Output] wcaps 0x41d: Stereo Amp-Out
        Control: name="Headphone Playback Volume", index=0, device=0
          ControlAmp: chs=3, dir=Out, idx=0, ofs=0
        Amp-Out caps: ofs=0x57, nsteps=0x57, stepsize=0x02, mute=0
        Amp-Out vals:  [0x3c 0x3c]
        Converter: stream=0, channel=0
        PCM:
          rates [0x7e0]: 44100 48000 88200 96000 176400 192000
          bits [0x1e]: 16 20 24 32
          formats [0x1]: PCM
        Power states:  D0 D1 D2 D3 EPSS
        Power: setting=D0, actual=D0
      Node 0x06 [Audio Output] wcaps 0x611: Stereo Digital
        Converter: stream=0, channel=0
        Digital:
        Digital category: 0x0
        IEC Coding Type: 0x0
        PCM:
          rates [0x5f0]: 32000 44100 48000 88200 96000 192000
          bits [0xe]: 16 20 24
          formats [0x1]: PCM
        Power states:  D0 D1 D2 D3 EPSS
        Power: setting=D0, actual=D0
      Node 0x07 [Vendor Defined Widget] wcaps 0xf00000: Mono
      Node 0x08 [Audio Input] wcaps 0x10051b: Stereo Amp-In
        Control: name="Capture Volume", index=0, device=0
          ControlAmp: chs=3, dir=In, idx=0, ofs=0
        Control: name="Capture Switch", index=0, device=0
          ControlAmp: chs=3, dir=In, idx=0, ofs=0
        Device: name="ALC1220 Analog", type="Audio", device=0
        Amp-In caps: ofs=0x17, nsteps=0x3f, stepsize=0x02, mute=1
        Amp-In vals:  [0x27 0x27]
        Converter: stream=0, channel=0
        SDI-Select: 0
        PCM:
          rates [0x7e0]: 44100 48000 88200 96000 176400 192000
          bits [0xe]: 16 20 24
          formats [0x1]: PCM
        Power states:  D0 D1 D2 D3 EPSS
        Power: setting=D0, actual=D0
        Connection: 1
           0x23
      Node 0x09 [Audio Input] wcaps 0x10051b: Stereo Amp-In
        Control: name="Capture Volume", index=1, device=0
          ControlAmp: chs=3, dir=In, idx=0, ofs=0
        Control: name="Capture Switch", index=1, device=0
          ControlAmp: chs=3, dir=In, idx=0, ofs=0
        Device: name="ALC1220 Alt Analog", type="Audio", device=2
        Amp-In caps: ofs=0x17, nsteps=0x3f, stepsize=0x02, mute=1
        Amp-In vals:  [0x80 0x80]
        Converter: stream=0, channel=0
        SDI-Select: 0
        PCM:
          rates [0x7e0]: 44100 48000 88200 96000 176400 192000
          bits [0x1e]: 16 20 24 32
          formats [0x1]: PCM
        Power states:  D0 D1 D2 D3 EPSS
        Power: setting=D0, actual=D0
        Connection: 1
           0x22
      Node 0x0a [Vendor Defined Widget] wcaps 0xf00000: Mono
      Node 0x0b [Audio Mixer] wcaps 0x20010b: Stereo Amp-In
        Control: name="Front Mic Playback Volume", index=0, device=0
          ControlAmp: chs=3, dir=In, idx=1, ofs=0
        Control: name="Front Mic Playback Switch", index=0, device=0
          ControlAmp: chs=3, dir=In, idx=1, ofs=0
        Control: name="Rear Mic Playback Volume", index=0, device=0
          ControlAmp: chs=3, dir=In, idx=0, ofs=0
        Control: name="Rear Mic Playback Switch", index=0, device=0
          ControlAmp: chs=3, dir=In, idx=0, ofs=0
        Control: name="Line Playback Volume", index=0, device=0
          ControlAmp: chs=3, dir=In, idx=2, ofs=0
        Control: name="Line Playback Switch", index=0, device=0
          ControlAmp: chs=3, dir=In, idx=2, ofs=0
        Amp-In caps: ofs=0x17, nsteps=0x1f, stepsize=0x05, mute=1
        Amp-In vals:  [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80]
        Connection: 8
           0x18 0x19 0x1a 0x1b 0x1d 0x15 0x16 0x17
      Node 0x0c [Audio Mixer] wcaps 0x20010b: Stereo Amp-In
        Amp-In caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
        Amp-In vals:  [0x00 0x00] [0x80 0x80]
        Connection: 2
           0x02 0x0b
      Node 0x0d [Audio Mixer] wcaps 0x20010b: Stereo Amp-In
        Amp-In caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
        Amp-In vals:  [0x00 0x00] [0x80 0x80]
        Connection: 2
           0x03 0x0b
      Node 0x0e [Audio Mixer] wcaps 0x20010b: Stereo Amp-In
        Amp-In caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
        Amp-In vals:  [0x00 0x00] [0x80 0x80]
        Connection: 2
           0x04 0x0b
      Node 0x0f [Audio Mixer] wcaps 0x20010b: Stereo Amp-In
        Amp-In caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
        Amp-In vals:  [0x00 0x00] [0x80 0x80]
        Connection: 2
           0x05 0x0b
      Node 0x10 [Vendor Defined Widget] wcaps 0xf00000: Mono
      Node 0x11 [Vendor Defined Widget] wcaps 0xf00000: Mono
      Node 0x12 [Pin Complex] wcaps 0x40040b: Stereo Amp-In
        Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0
        Amp-In vals:  [0x00 0x00]
        Pincap 0x00000020: IN
        Pin Default 0x411111f0: [N/A] Speaker at Ext Rear
          Conn = 1/8, Color = Black
          DefAssociation = 0xf, Sequence = 0x0
          Misc = NO_PRESENCE
        Pin-ctls: 0x00:
        Power states:  D0 D1 D2 D3 EPSS
        Power: setting=D0, actual=D0
      Node 0x13 [Vendor Defined Widget] wcaps 0xf00000: Mono
      Node 0x14 [Pin Complex] wcaps 0x40058d: Stereo Amp-Out
        Control: name="Front 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 0x0001001c: OUT HP EAPD Detect
        EAPD 0x2: EAPD
        Pin Default 0x01014010: [Jack] Line Out at Ext Rear
          Conn = 1/8, Color = Green
          DefAssociation = 0x1, Sequence = 0x0
        Pin-ctls: 0x40: OUT
        Unsolicited: tag=05, enabled=1
        Power states:  D0 D1 D2 D3 EPSS
        Power: setting=D0, actual=D0
        Connection: 1
           0x0c
      Node 0x15 [Pin Complex] wcaps 0x40058d: Stereo Amp-Out
        Control: name="Surround 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 0x00000034: IN OUT Detect
        Pin Default 0x01011012: [Jack] Line Out at Ext Rear
          Conn = 1/8, Color = Black
          DefAssociation = 0x1, Sequence = 0x2
        Pin-ctls: 0x40: OUT
        Unsolicited: tag=06, enabled=1
        Power states:  D0 D1 D2 D3 EPSS
        Power: setting=D0, actual=D0
        Connection: 1
           0x0d
      Node 0x16 [Pin Complex] wcaps 0x40058d: Stereo Amp-Out
        Control: name="Center Playback Switch", index=0, device=0
          ControlAmp: chs=1, dir=Out, idx=0, ofs=0
        Control: name="LFE Playback Switch", index=0, device=0
          ControlAmp: chs=2, dir=Out, idx=0, ofs=0
        Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
        Amp-Out vals:  [0x00 0x00]
        Pincap 0x00000034: IN OUT Detect
        Pin Default 0x01016011: [Jack] Line Out at Ext Rear
          Conn = 1/8, Color = Orange
          DefAssociation = 0x1, Sequence = 0x1
        Pin-ctls: 0x40: OUT
        Unsolicited: tag=07, enabled=1
        Power states:  D0 D1 D2 D3 EPSS
        Power: setting=D0, actual=D0
        Connection: 1
           0x0e
      Node 0x17 [Pin Complex] wcaps 0x40058d: Stereo Amp-Out
        Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
        Amp-Out vals:  [0x80 0x80]
        Pincap 0x00000034: IN OUT Detect
        Pin Default 0x40370000: [N/A] CD at Ext N/A
          Conn = Analog, Color = Unknown
          DefAssociation = 0x0, Sequence = 0x0
        Pin-ctls: 0x20: IN
        Unsolicited: tag=00, enabled=0
        Power states:  D0 D1 D2 D3 EPSS
        Power: setting=D0, actual=D0
        Connection: 1
           0x0f
      Node 0x18 [Pin Complex] wcaps 0x40058f: Stereo Amp-In Amp-Out
        Control: name="Rear 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 0x00003734: IN OUT Detect
          Vref caps: HIZ 50 GRD 80 100
        Pin Default 0x01a19040: [Jack] Mic at Ext Rear
          Conn = 1/8, Color = Pink
          DefAssociation = 0x4, Sequence = 0x0
        Pin-ctls: 0x24: IN VREF_80
        Unsolicited: tag=03, enabled=1
        Power states:  D0 D1 D2 D3 EPSS
        Power: setting=D0, actual=D0
        Connection: 5
           0x0c* 0x0d 0x0e 0x0f 0x26
      Node 0x19 [Pin Complex] wcaps 0x40058f: Stereo Amp-In Amp-Out
        Control: name="Front 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 0x0000373c: IN OUT HP Detect
          Vref caps: HIZ 50 GRD 80 100
        Pin Default 0x02a19050: [Jack] Mic at Ext Front
          Conn = 1/8, Color = Pink
          DefAssociation = 0x5, Sequence = 0x0
        Pin-ctls: 0x24: IN VREF_80
        Unsolicited: tag=02, enabled=1
        Power states:  D0 D1 D2 D3 EPSS
        Power: setting=D0, actual=D0
        Connection: 5
           0x0c* 0x0d 0x0e 0x0f 0x26
      Node 0x1a [Pin Complex] wcaps 0x40058f: Stereo Amp-In Amp-Out
        Control: name="Line 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 0x00003734: IN OUT Detect
          Vref caps: HIZ 50 GRD 80 100
        Pin Default 0x0181304f: [Jack] Line In at Ext Rear
          Conn = 1/8, Color = Blue
          DefAssociation = 0x4, Sequence = 0xf
        Pin-ctls: 0x20: IN VREF_HIZ
        Unsolicited: tag=04, enabled=1
        Power states:  D0 D1 D2 D3 EPSS
        Power: setting=D0, actual=D0
        Connection: 5
           0x0c* 0x0d 0x0e 0x0f 0x26
      Node 0x1b [Pin Complex] wcaps 0x40058f: Stereo Amp-In Amp-Out
        Control: name="Headphone Playback Switch", index=0, device=0
          ControlAmp: chs=3, dir=Out, 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:  [0x00 0x00]
        Pincap 0x0001373c: IN OUT HP EAPD Detect
          Vref caps: HIZ 50 GRD 80 100
        EAPD 0x2: EAPD
        Pin Default 0x02214020: [Jack] HP Out at Ext Front
          Conn = 1/8, Color = Green
          DefAssociation = 0x2, Sequence = 0x0
        Pin-ctls: 0xc0: OUT HP VREF_HIZ
        Unsolicited: tag=01, enabled=1
        Power states:  D0 D1 D2 D3 EPSS
        Power: setting=D0, actual=D0
        Connection: 5
           0x0c 0x0d 0x0e 0x0f* 0x26
      Node 0x1c [Vendor Defined Widget] wcaps 0xf00000: Mono
      Node 0x1d [Pin Complex] wcaps 0x400400: Mono
        Pincap 0x00000020: IN
        Pin Default 0x40e7e629: [N/A] Reserved at Ext N/A
          Conn = Analog, Color = White
          DefAssociation = 0x2, Sequence = 0x9
        Pin-ctls: 0x20: IN
        Power states:  D0 D1 D2 D3 EPSS
        Power: setting=D0, actual=D0
      Node 0x1e [Pin Complex] wcaps 0x400781: Stereo Digital
        Pincap 0x00000010: OUT
        Pin Default 0x411111f0: [N/A] Speaker at Ext Rear
          Conn = 1/8, Color = Black
          DefAssociation = 0xf, 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
           0x06
      Node 0x1f [Vendor Defined Widget] wcaps 0xf00000: Mono
      Node 0x20 [Vendor Defined Widget] wcaps 0xf00040: Mono
        Processing caps: benign=0, ncoeff=127
      Node 0x21 [Vendor Defined Widget] wcaps 0xf00000: Mono
      Node 0x22 [Audio Mixer] wcaps 0x20010b: Stereo Amp-In
        Amp-In caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
        Amp-In vals:  [0x80 0x80] [0x00 0x00] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80]
        Connection: 10
           0x18 0x19 0x1a 0x1b 0x1d 0x15 0x16 0x17 0x12 0x0b
      Node 0x23 [Audio Mixer] wcaps 0x20010b: Stereo Amp-In
        Amp-In caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
        Amp-In vals:  [0x80 0x80] [0x00 0x00] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80]
        Connection: 10
           0x18 0x19 0x1a 0x1b 0x1d 0x15 0x16 0x17 0x12 0x0b
      Node 0x24 [Vendor Defined Widget] wcaps 0xf00000: Mono
      Node 0x25 [Audio Output] wcaps 0x41d: Stereo Amp-Out
        Amp-Out caps: ofs=0x57, nsteps=0x57, stepsize=0x02, mute=0
        Amp-Out vals:  [0x57 0x57]
        Converter: stream=0, channel=0
        PCM:
          rates [0x7e0]: 44100 48000 88200 96000 176400 192000
          bits [0x1e]: 16 20 24 32
          formats [0x1]: PCM
        Power states:  D0 D1 D2 D3 EPSS
        Power: setting=D0, actual=D0
      Node 0x26 [Audio Mixer] wcaps 0x20010b: Stereo Amp-In
        Amp-In caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
        Amp-In vals:  [0x00 0x00] [0x80 0x80]
        Connection: 2
           0x25 0x0b
  2. Parse the output from the shell command into 4 categories:
    • Make a list of Pin Complex (audio jacks) nodes. Each node has a unique Node ID.
    • Make a list of Audio Mixer nodes. Each node has a unique Node ID.
    • Make a list of Audio Output nodes. Each node has a unique Node ID.
    • Make a list of Audio Input nodes. Each node has a unique Node ID.
  3. Because each audio jack (pin complex) is connected through a specific Audio Mixer to a specific Audio Output or Audio Input, we need to create a Path Map for each Pin Complex.
    • Path Map connects each Pin Complex node to an Audio Mixer node and then to an Audio Output or Audio Input node. It is a series of Node IDs in a specific sequence.
  4. Extract the four Pin Default (pin configuration) bytes for each Pin Complex for a total of 4 bytes. These bytes encode a number of configuration details as explained below.
    • Let's use ABCDEFGH (4 bytes; each letter A,B,C,D,E,F,G,H is 4 bits) in the following.
    • Byte AB:
      • A = counter from 1, 2, 3, ..., f
      • B = sequence, which is always 0 in macOS
    • Byte CD:
      • C = color of the jack
        • 0=Unknown; 1=Black; 2=Gray; 3=Blue; 4=Green
        • 5=Red; 6=Orange; 7=Yellow; 8=Purple; 9=Pink
        • A,B,C,D=Reserved; E=White; F=Other
      • D = Jack detect sensing capability (0 for external devices that are plugged in; 1 for built-in devices such as built-in speakers and built-in microphone). Real Macs have built-in speakers and built-in Mics, but Hackintoshes do not, so we set this to 0 for every Pin Complex (jack).
    • Byte EF:
      • E = intended use of the jack
        • 0=Line out; 1=speakers; 2=headphone out; 3=CD; 4=SPDIF (digital out)
        • 5=Digital Out-Other; 6=Modem Line Side; 7=Modem Handset Side
        • 8=Line In; 9=AUX; A=Mic In; B=Telephony; C=SPDIF Input
        • D=Digital Input-Other; E=Reserved; F=Other
      • F = connection type
        • 0=unknown; 1=1/8" stereo/mono jack; 2=1/4" stereo/mono jack
        • 3=ATAPI internal; 4=RCA; 5=Optical; 6=Digital Other
        • 7=Analog Other; 8=Multichannel Analog (DIN); 9=XLR
        • A=RJ-11 (Modem); B=Combination; F=Other
    • Byte GH: Let's label the bits as 7:6:5:4:3:2:1:0
      • port connectivity; indicates the external connectivity of the Pin Complex
        • This is specified in bits 7:6 as follows:
          • 00 = Port complex is connected to a jack
          • 01 = No physical connection for port
          • 10 = Fixed function device (built-in speaker, built-in microphone)
          • 11 = Both a jack and an internal device are attached
      • location (part 1) of pin complex (jack)
        • This is specified in bits 5:4 as follows:
          • 00 = External on primary chassis
          • 01 = Internal
          • 10 = Separate chassis
          • 11 = Other
      • location (part 2) of pin complex (jack)
        • This is specified in bits 3:2:1:0 as follows:
          • 0000 = N/A
          • 0001 = Rear
          • 0010 = Front
          • 0011 = Left
          • 0100 = Right
          • 0101 = Top
  5. For each Pin Complex we must take the original (or raw) Pin Default and modify it according to the section above. Let's take an example:
    • On Asus Z690 ProArt Creator WiFi, we have a Pin Complex for the green rear Line Out jack. Its original Pin Complex from the Linux dump is as follows:
      • Pin Default 0x01014010
    • We reverse the bytes, resulting in this:
      • 10 40 01 01
    • Now we can directly associate these bytes with the mapping tables:
      • 10 = AB --> Counter 1, Sequence 0
      • 40 = CD --> 4=green; 0=jack sense capability
      • 01 = EF --> 0=Line out; 1=1/8" stereo/mono jack
      • 01 = GH --> 0=port complex connected to jack; 1=rear location
    • macOS uses location (part 2) a bit differently; it does not distinguish between rear, front, left, right, and top. Instead, it uses value 0 to mean built-in, and anything else for not-built-in.
    • NOTE:
      • Today's Macs have (a) built-in Microphone and (b) built-in Speakers. On Hackintosh, we must set location (part 2) to N/A or 0 for the equivalent devices:
        • (a) Microphone Input (pink, rear) -- this Node 0x18 (see list in section 6 below)
        • (b) Line Out (green, rear) -- this is Node 0x14 (see list in section 6 below)
      • Therefore we must change location (part 2) to 0 for these two nodes.
      • One more change is needed for the Microphone Input (pink, rear):
        • We must change its Connection Type (item F) to 0 for Unknown.
    • The green rear Line In port can also be mapped as Internal Speakers by using this verb:
      • 10 = AB --> Counter 1, Sequence 0
      • 40 = CD --> 4=green, 0=jack sense capability
      • 11 = EF --> 1=Speakers, 1=1/8" stereo/mono jack
      • 90 = GH --> 9=Fixed-Function / Internal, 0=N/A
    • If SPDIF digital output is available:
      • CD = 20 --> 2=gray, 0=jack sense capability
      • EF = 45 --> 4=SPDIF, 5=Optical
  6. Repeating this for all pin complexes (ignoring the "NO PRESENCE" ones) on the Asus Z690 ProArt Creator, we get Pin Configuration:
    Code:
    Node 0x14 = 10 40 11 90 Green Line Out (Location [part2]=0)
    Node 0x15 = 20 10 01 01 Black Line Out (rear)
    Node 0x16 = 30 60 01 01 Orange Line Out (rear)
    Node 0x17 = 40 20 01 01 (not connected to physical jack so we'll omit from Layout)
    Node 0x18 = 50 90 A0 90 Pink Mic Input (Connection Type=0, Location [part2]=0)
    Node 0x19 = 60 90 81 02 Mic Input (front)
    Node 0x1A = 70 30 81 01 Blue Line In (rear)
    Node 0x1B = 80 40 21 02 Headphone Output (front)
  7. Some pin complexes may have an associated EAPD (External Amplifier Power Down/Up). This will be clearly mentioned in the pin complex description block, along with the EAPD address (typically 0x2).
    • On the Asus Z690 ProArt Creator WiFi, Nodes 0x14 and 0x1B have an EAPD (green Line Out and front headphone jacks), both with address 0x2.
  8. Now we must encode the final Pin Configuration into a series of verbs, where each Pin Configuration is encoded into four verbs, one verb for AB, one for CD, one for EF, and one for GH.
    • If a pin complex has an EAPD, a fifth verb is created to capture the EAPD address.
  9. How to create verbs:
    • Each verb consists of 4 bytes: I JK LMN OP
    • I = Codec address (line 2 from Linux dump, which is 0 for this motherboard)
    • JK = Node ID
    • LMN= macOS pre-defined identifier:
      • 71C for AB part of the pin configuation
      • 71D for CD
      • 71E for EF
      • 71F for GH
      • 70C for EAPD address
    • OP = Value of AB or CD or EF or GH or EAPD Address
  10. This is much easier than it looks! Let's show some examples:
    • From Step 6, let's look at Node 0x14 = 10 40 01 00 Green Line Out (rear).
    • It has an EAPD at address 0x2.
    • Recall that codec address is 0 for this board.
    • We encode this into the following verb:
      • The AB part of pin configuration (10) becomes: 01471C10
      • The CD part of pin configuration (40) becomes: 01471D40
      • The EF part of pin configuration (01) becomes: 01471E01
      • The GH part of pin configuration (00) becomes: 01471F00
      • And EAPD at address 0x2 becomes: 01470C02
    • Hence, the full verb for the green Line Out rear jack is:
      • 01471C10 01471D40 01471E01 01471F00 01470C02
    • Repeating this for all pin complexes (ignoring the NO PRESENCE ones) results in:
      Code:
      01471C10 01471D40 01471E01 01471F00 01470C02
      01571C20 01571D10 01571E01 01571F01
      01671C30 01671D60 01671E01 01671F01
      01871C40 01871D90 01871EA0 01871F90
      01971C50 01971D90 01971E81 01871F02
      01A71C60 01A71D30 01A71E81 01A71F01
      01B71C70 01B71D40 01B71E21 01B71F02 01B70C02
  11. Now we convert the entire verb into a Base64 string using Hackintool:
    Screen Shot 2022-01-30 at 1.05.59 PM.png
  12. The Base64 version can now be added to a new entry in AppleALC's PinConfigs.kext file. In particular, we add it to Info.plist inside the kext:
    Screen Shot 2022-01-30 at 1.10.58 PM.png
  13. Next we turn our attention to Path Maps! We start with audio outputs and then work on audio inputs. Browsing through the Linux dump, we look for a Connection property in each Pin Complex block. Not all pin complexes have a connection property.
    • For node 0x14, the Linux dump is as follows:
      Code:
      Node 0x14 [Pin Complex] wcaps 0x40058d: Stereo Amp-Out
        Control: name="Front 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 0x0001001c: OUT HP EAPD Detect
        EAPD 0x2: EAPD
        Pin Default 0x01014010: [Jack] Line Out at Ext Rear
          Conn = 1/8, Color = Green
          DefAssociation = 0x1, Sequence = 0x0
        Pin-ctls: 0x40: OUT
        Unsolicited: tag=05, enabled=1
        Power states:  D0 D1 D2 D3 EPSS
        Power: setting=D0, actual=D0
        Connection: 1
           0x0c
    • Notice the last part: Connection: 1 followed by 0x0c. This means the green Line Out jack is connected to Node 0x0c, which according to the same Linux dump is an Audio Mixer node. The Linux dump for that node is as follows:
      Code:
      Node 0x0c [Audio Mixer] wcaps 0x20010b: Stereo Amp-In
        Amp-In caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
        Amp-In vals:  [0x00 0x00] [0x80 0x80]
        Connection: 2
           0x02 0x0b
    • If there are multiple connection nodes and one of them has an asterisk, we should choose that one. For example, we would choose 0x0c in the connection list below:
      Code:
        Connection: 5
           0x0c* 0x0d 0x0e 0x0f 0x26
    • This audio mixer has two connections: 0x02 and 0x0b. If we examine the Linux dump for both nodes 0x02 and 0x0b, we find that node 0x02 is an Audio Output node whereas node 0x0b is another audio mixer. Because the node we're on (0x0c) is already an audio mixer, we choose node 0x02 in order to connect this mixer to an Audio Output driver.
    • The Path Map for node 0x14 is therefore:
      • 0x14 --> 0x0C --> 0x02
    • Repeating this for all output nodes, we get:
      Code:
      0x14 --> 0x0C --> 0x02
      0x15 --> 0x0D --> 0x03
      0x16 --> 0x0E --> 0x04
      0x17 --> 0x0F --> 0x05 (this does not correspond to an audio jack so we'll omit from Path Map)
      0x1B --> 0x0F --> 0x05
  14. Now we'll create path maps for audio inputs.
    • Instead of starting from pin complexes, we'll start from the opposite end by looking at each Audio Input node from the Linux dump and tracing back to a pin complex (jack).
    • There are only two audio inputs in the Linux dump: Nodes 0x08 and 0x09.
    • Let's look at the Linux dump for Node 0x08:
      Code:
      Node 0x08 [Audio Input] wcaps 0x10051b: Stereo Amp-In
        Control: name="Capture Volume", index=0, device=0
          ControlAmp: chs=3, dir=In, idx=0, ofs=0
        Control: name="Capture Switch", index=0, device=0
          ControlAmp: chs=3, dir=In, idx=0, ofs=0
        Device: name="ALC1220 Analog", type="Audio", device=0
        Amp-In caps: ofs=0x17, nsteps=0x3f, stepsize=0x02, mute=1
        Amp-In vals:  [0x27 0x27]
        Converter: stream=0, channel=0
        SDI-Select: 0
        PCM:
          rates [0x7e0]: 44100 48000 88200 96000 176400 192000
          bits [0xe]: 16 20 24
          formats [0x1]: PCM
        Power states:  D0 D1 D2 D3 EPSS
        Power: setting=D0, actual=D0
        Connection: 1
           0x23
    • Node 0x08 has only one connection and it goes to Node 0x23. The Linux dump for Node 0x23 shows that it's an Audio Mixer with 10 connections!
      Code:
      Node 0x23 [Audio Mixer] wcaps 0x20010b: Stereo Amp-In
        Amp-In caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
        Amp-In vals:  [0x80 0x80] [0x00 0x00] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80]
        Connection: 10
           0x18 0x19 0x1a 0x1b 0x1d 0x15 0x16 0x17 0x12 0x0b
    • Because there are three audio inputs (Mic Input on rear, Line Input on rear, Mic Input on front) with node IDs 0x18, 0x19, and 0x1A we can connect this particular mixer to any of these three. Let's choose 0x18.
    • This results in the following path map for audio input 0x08:
      • 0x08 --> 0x23 --> 0x18 (Mic input on rear)
    • Repeating this for the second Audio Input, node 0x09, we choose to connect it to node 0x1A (Line Input on rear):
      • 0x08 --> 0x23 --> 0x1A (Line Input on rear)
    • Finally, the Mic input on front panel (Node 0x19) can be connected via Audio Input 0x09:
      • 0x09 --> 0x22 --> 0x19 (Mic input on front)
    • Note that audio mixers 0x22 and 0x23 can be connected to 10 pin complexes, so this gives us some freedom to choose where to connect these mixers.
  15. The entire path map can now be listed as follows:
    • Audio Output path maps:
      Code:
      0x14 --> 0x0C --> 0x02
      0x15 --> 0x0D --> 0x03
      0x16 --> 0x0E --> 0x04
      0x17 --> 0x0F --> 0x05  (this does not correspond to an audio jack so we'll omit from Path Map)
      0x1B --> 0x0F --> 0x05
    • Audio Input path maps:
      Code:
      0x08 --> 0x23 --> 0x18 (Mic input on rear)
      0x08 --> 0x23 --> 0x1A (Line Input on rear)
      0x09 --> 0x22 --> 0x19 (Mic input on front)
  16. Now we need to define these path maps in a new Platform.xml file. Because we chose Layout ID 13, we call the new file Platform13.xml.
    • First, let's see where our path maps are stored in the Platform XML file. This is shown here:
      Screen Shot 2022-02-03 at 5.32.35 AM.png
    • Audio Inputs are specified first, followed by Audio Outputs.
    • To enable auto-switchingbetween two audio jacks we place them in the same <array>...</array> group. In the example above we've combined the Rear and Front Microphone jacks into the same group, and the Front and Rear Line Out/Headphone jacks into the same group.
      • When a headphone is connected to the rear green Line Out, macOS will show "Line Out". When the same headphone is connected to the front Headphone jack, macOS will rename the port to "Headphone" and switch to it automatically.
      Screen Shot 2022-02-03 at 5.42.32 AM.png
      Screen Shot 2022-02-03 at 5.42.08 AM.png
    • All other audio jacks are individually specified.
    • If we separated the rear Line Out and front Headphone path maps into their own <array>...</array> blocks, they would appear as two separate audio outputs and we would need to manually switch between them.
  17. Now let's look at how each Audio Input Path Map is actually specified. This is best explained with a screenshot:
    Screen Shot 2022-01-30 at 3.14.22 PM.png
  18. This is how we define the Audio Output Path Maps using one example:
    Screen Shot 2022-01-30 at 3.35.12 PM.png
  19. Lastly, we create a new Layout XML file called Layout13.xml that in turn will point to the path map file Platforms13.xml created above. Our Layout13.xml looks like this:
    Screen Shot 2022-01-30 at 3.38.30 PM.png
    • Notice that the two inputs (Mic and LineIn) each contain a MuteGPIO section. This is necessary, otherwise the input will be unable to turn on. The first <integer> field under MuteGPIO is a 4-byte value where the first 3 bytes are always 500100 and the last byte is the input's Node ID.
    • Our blue LineIn has a node ID of 0x1A, so the 4-byte value becomes 5001001A, which in decimal is 1342242842.
    • Out pink Mic input has a node ID of 0x18, so the 4-byte value becomes 50010018, which in decimal is 1342242840.
  20. Inside each codec folder (ALCS1220A in this case) is a file called Info.plist. The final step is to add a reference to our Layout and Platform XML files into the Info.plist located in the Resources/ALCS1220A folder. This is done as follows:
    Screen Shot 2022-02-01 at 3.40.54 PM.png
  21. With all these changes in place, we recompile the AppleALC code in Xcode and use the new AppleALC.kext.
 

Attachments

  • Platforms13 and layout13.zip
    3.1 KB · Views: 61
Last edited:
...
One significant finding with this configuration is that hot plug connecting does not seem to work, even on my patched Titan Ridge card. Thunderbolt devices are detected in the Thunderbolt Bus, but they will not activate whether it is a hard drive or the apple ethernet port. If I boot with my OWC Envoy Express plugged into either Maple Ridge or Titan Ridge ports, it will mount and works properly. Also, I can eject the drive without error, but I cannot reconnect it. Again, even on my patched Titan Ridge. However if I plug in USB-C devices directly to any Thunderbolt port, they do mount immediately and eject properly.
Does hot plug work on GC-Titan Ridge after one sleep/wake cycle?
 
No, hot plug seems to have stopped working completely over Thunderbolt on Titan Ridge as well.
 
The aquantia kext wasn’t loading for the aqc113 in the 12.3 beta. Maybe it’s working for you. Aqc107 still works.
I have some good news for Monterey 12.3.
  • The Asus Z690 ProArt Creator WiFi's on-board Aquantia AQC113 is back in business with Monterey 12.3.
  • The Aquantia kernel patch needs to be modified as follows, or better yet, simply disable existing patch and add a new one.
Code:
Identifier: com.apple.driver.AppleEthernetAquantiaAqtion
Comment: AQC 107 10 GbE v3
Find: 0F844503 0000
Replace: 660F1F44 0000
Count: 1
Limit: 0
Skip: 0
Enabled: True
  • We can also use MinKernel and MaxKernel as shown:
Screen Shot 2022-01-30 at 5.06.41 PM.png

After the patch:
Screen Shot 2022-01-30 at 5.00.10 PM.png
 
@gandem @dehjomz

Are you experiencing graphics glitches with display of desktop wallpaper in Monterey 12.3 beta, such as this:
Screen Shot 2022-01-30 at 5.19.36 PM.png


I'm using a MSI RX 6800 XT.

Also, Safari is consuming a lot of CPU time, between 15% and 40% on one core even while idle.
Screen Shot 2022-01-30 at 5.26.16 PM.png


Seems Monterey 12.3 beta has some issues. Fortunately I made a full bootable backup of 12.2 Release version so I may go back to it.
 
Last edited:
@gandem @dehjomz

Are you experiencing graphics glitches with display of desktop wallpaper in Monterey 12.3 beta, such as this:
Not using 12.3 beta, but I can say that I haven't experienced any glitches that you're referencing here.
 
** AppleALC Layout Customization **
Warning: Geek Zone Ahead :)
Please do not quote this guide in its entirely. Post an excerpt or link instead.​

This post describes the process of creating a custom audio layout for AppleALC.
Thanks for this very comprehensive guide.
Was there any reason to pick up the numbering "13" for the new layout, or is it just an arbitrary unique identifier?
 
Thanks for this very comprehensive guide.
Was there any reason to pick up the numbering "13" for the new layout, or is it just an arbitrary unique identifier?
The AppleALC team reserves layout IDs 1 through 10 for original developers such as tolida. We’re free to use any subsequent integers. Because layout 11 is already used, I decided to skip one integer and go with 13.

Some may question why ‘unlucky’ 13 would be chosen. If my iPhone carries that number and the world is still around, then… :)
 
@CaseySJ

I'm trying to test just the flashed GC-Titan Ridge V2 card for hot plug. Currently it is still not working, even when on board Maple Ridge is disabled. Can you verify a few things? Just trying to eliminate a possible configuration error by me.:)

Should I disable the hot plug ssdt for maple ridge if I'm disabling the hardware in BIOS?
Should I use the existing ssdt for Titan Ridge that you fixed on bus 2 or should I create a new one for bus 0?
If I create a new ssdt on our favorite ssdt website, should I use the z690 option or the add-in card option as the base ssdt? (assuming z690)
Thanks!

EDIT:
I'm currently running just patched Titan Ridge V2 (Maple Ridge disabled in BIOS)
I have disabled Maple Ridge ssdt in config.plist, while using the bus 2 ssdt for Titan Ridge. Everything is detected and running with the exception of hot plug. When I hot plug my Envoy Express or Apple ethernet gigabit adapter, they are both detected in the thunderbolt bus, but will not activate. If I have either one plugged in during boot, they are fully activated AND can then be hot plugged. So it appears that having it plugged in on boot activates the port for any device then either device can be hot plugged into that port.
 
Last edited:
Back
Top