wx3124558 发表于 2016-6-26 23:54

(已解决)HD4600的HDMI音频到底应该如何修改才能输出

本帖最后由 wx3124558 于 2017-12-13 20:19 编辑

------------------------------ 2017.12.13更新 ------------------------------
自从论坛打不开之后就一直没玩黑果了,差不多过去快一年了吧,上周刷回10.12.6,用的是10.12.3的EFI,目前没有BUG,今天呢,突然可以打开远景了,上来看到很多私信,那么就把我现在用的EFI放出来吧,具体的教程我以前的帖子中有,适用的型号也有说明,祝大家早日吃上10.13吧!


10.12.6_EFI配置文件:
https://pan.baidu.com/s/1mhO91uK
折腾了一天一夜,终于解决了HDMI音频输出的问题,这里要感谢@biggreat帮忙修改了DSDT,现在简单说下步骤:

1. 即DSDT中要确保有HDAU、HDEF、IGPU,对于Haswell/Broadwell集成显卡:dsdt需要打入补丁 renaming B0D3 to HDAU (device at 0x00030000);
2. dsdt中,对于HDAU、IGPU、HDEF三个装备注入相同的"hda-gfx" = "onboard-1" or= “onboard-2”;
3. 对于Haswell/Broadwell集成显卡,dsdt中HDAU和HDEF注入的layout id要一致;
4. 对于Haswell集成显卡还要安装rehabman的FakePCIID.kext和FakePCIID_Intel_HDMI_Audio.kext;
5. kextstopatch下加入以下补丁,记得把补丁里面的disable取消勾选:
<key>Comment</key>
<string>HDMI-audio, port 0105, 0x0a260005 0x0a260006, 0x0d220003, 0x0a2e000a, 0x0a26000a</string>
<key>Disabled</key>
<true/>
<key>Find</key>
<data>
AQUJAAAEAACHAAAA
</data>
<key>Name</key>
<string>AppleIntelFramebufferAzul</string>
<key>Replace</key>
<data>
AQUJAAAIAACHAAAA
</data>
</dict>
<dict>
<key>Comment</key>
<string>HDMI-audio, port 0105(12), 0x0a260005 0x0a260006, 0x0d220003, 0x0a2e000a, 0x0a26000a</string>
<key>Disabled</key>
<true/>
<key>Find</key>
<data>
AQUJAAAEAACHAAAA
</data>
<key>Name</key>
<string>AppleIntelFramebufferAzul</string>
<key>Replace</key>
<data>
AQUSAAAIAACHAAAA
</data>
</dict>
<dict>
<key>Comment</key>
<string>HDMI-audio, port 0204(12), 0x0d220003, 0x0a2e000a, 0x0a26000a</string>
<key>Disabled</key>
<true/>
<key>Find</key>
<data>
AgQKAAAEAACHAAAA
</data>
<key>Name</key>
<string>AppleIntelFramebufferAzul</string>
<key>Replace</key>
<data>
AgQSAAAIAACHAAAA
</data>
</dict>
<dict>
<key>Comment</key>
<string>HDMI-audio, port 0204, 0x0d220003, 0x0a2e000a, 0x0a26000a</string>
<key>Disabled</key>
<true/>
<key>Find</key>
<data>
AgQKAAAEAACHAAAA
</data>
<key>Name</key>
<string>AppleIntelFramebufferAzul</string>
<key>Replace</key>
<data>
AgQKAAAIAACHAAAA
</data>
</dict>
<dict>6. 我的情况是修改ig-platform-id为0x0a260006即可输出音频,如果不行,请自行尝试更换ig-platform-id,还有一点要说明一下,我用的是仿冒声卡,如果你们用的是AppleALC的话,可能效果会不同,即HDMI开启失败,因我没试过AppleALC来驱动声卡,所以需自行测试,如果这两种都有效果的话,请在楼下反馈;
------------------------------------------------------我是华丽的分割线------------------------------------------------------
现在视频输出是正常的,就是输出的时候没有声音,音频下包括声音下都没有HDMI选项,声卡ALC282已经驱动,目前DSDT里有IGPU、HDEF、但是没有HDAU,注入了FakePCIID_Intel_HDMI_Audio.kext驱动,真心不知道应该怎么添加,心力憔悴啊,翻遍了论坛也没有个规范的说法,拜托各路大神指导一下{:9_365:}


Jevons-Chan 发表于 2016-6-26 23:56

你试过提取code注入声卡信息了吗

biggreat 发表于 2016-6-26 23:59

看我签名帖子,2楼更新帖子,有个开启集成显卡hdmi 的说明

wx3124558 发表于 2016-6-27 07:01

biggreat 发表于 2016-6-26 23:59 https://www.pcbeta.com/static/image/common/back.gif
看我签名帖子,2楼更新帖子,有个开启集成显卡hdmi 的说明

看了你的帖子,教程里提到HDAU、IPGU、HDEF下注入相同的"hda-gfx" = "onboard-1" or= “onboard-2”;
但是我的DSDT里HDAU下没有这段代码,而我添加后:
Method (_DSM, 4, NotSerialized)// _DSM: Device-Specific Method
            {
                Store (Package (0x0C)
                  {
                        "built-in",
                        Buffer (One)
                        {
                           0x00
                        },

                        "hda-gfx",
                        Buffer (0x0A)
                        {
                            "onboard-1"
                     },

                        "layout-id",
                        Buffer (0x04)
                        {
                           0x03, 0x00, 0x00, 0x00
                        },

                        "PinConfigurations",
                        Buffer (Zero) {}
                  }, Local0)
                DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                Return (Local0)
            }
就会出现200个错误如下:

wx3124558 发表于 2016-6-27 07:04

Jevons-Chan 发表于 2016-6-26 23:56 https://www.pcbeta.com/static/image/common/back.gif
你试过提取code注入声卡信息了吗

我的仿冒声卡就是自己提取codec节点信息修改的,ubuntu下提取的时候,提取了两个一个是ALC282的音频信息,还有一个是HDMI的音频信息,这个HDMI的节点信息有用吗?

wx3124558 发表于 2016-6-27 07:26

biggreat 发表于 2016-6-26 23:59 https://www.pcbeta.com/static/image/common/back.gif
看我签名帖子,2楼更新帖子,有个开启集成显卡hdmi 的说明

修改了一下加入的代码,但是目前出现这一个错误:
syntax error, unexpected PARSEOP_DEVICE, expecting $end and premature End-Of-FileDevice (HDAU)
      {
            Name (_ADR, 0x00030000)// _ADR: Address
            Name (BARA, 0x80000000)
            Name (TBAR, Zero)
            Name (TCMD, Zero)
            Name (MODB, Zero)
            Name (MODC, Zero)
            Method (_DSM, 4, NotSerialized)
            {
                If (LEqual (Arg2, Zero)) { Return (Buffer() { 0x03 } ) }
                Return (Package()
                {
                  "layout-id", Buffer() { 0x03, 0x00, 0x00, 0x00 },
                  "hda-gfx", Buffer() { "onboard-1" },
                })
            }
      }
    }
            Method (_STA, 0, NotSerialized)// _STA: Status
            {
                If (LNotEqual (AUVD, 0xFFFF))
                {
                  Return (0x0F)
                }

                Return (Zero)
            }

            Method (_INI, 0, NotSerialized)// _INI: Initialize
            {
                If (LAnd (LNotEqual (And (ABAR, 0xFFFFC004), 0xFFFFC004), LNotEqual (And (ABAR, 0xFFFFC000), Zero)))
                {
                  Store (ABAR, BARA)
                }
            }

            OperationRegion (RPCS, SystemMemory, XBAS, 0x00018040)
            Field (RPCS, AnyAcc, NoLock, Preserve)
            {
                Offset (0x18004),
                ACMD,   8,
                Offset (0x18010),
                ABAR,   32
            }

            OperationRegion (RPCZ, PCI_Config, Zero, 0x40)
            Field (RPCZ, DWordAcc, Lock, Preserve)
            {
                AUVD,   16
            }

            Method (ASTR, 0, Serialized)
            {
                If (LAnd (LNotEqual (And (ABAR, 0xFFFFC004), 0xFFFFC004), LNotEqual (And (ABAR, 0xFFFFC000), Zero)))
                {
                  And (ABAR, 0xFFFFFFF0, BBAR)
                  Add (BBAR, 0x1000, BBAR)
                  OperationRegion (RPCY, SystemMemory, BBAR, 0x25)
                  Field (RPCY, DWordAcc, NoLock, Preserve)
                  {
                        Offset (0x0C),
                        EM4W,   32,
                        EMWA,   32,
                        Offset (0x1C),
                        ADWA,   32
                  }

                  Store (AUDA, EMWA)
                  Store (AUDB, ADWA)
                  Store (AUDC, EM4W)
                }
            }

            Method (VSTR, 1, Serialized)
            {
                Name (CONT, 0x03E8)
                Name (ADDR, 0x80000000)
                Store (Arg0, ADDR)
                OperationRegion (CCDC, SystemMemory, ADDR, 0x04)
                Field (CCDC, ByteAcc, NoLock, Preserve)
                {
                  CDEC,   32
                }

                If (LAnd (LNotEqual (And (ABAR, 0xFFFFC004), 0xFFFFC004), LNotEqual (And (ABAR, 0xFFFFC000), Zero)))
                {
                  If (LNotEqual (CDEC, Zero))
                  {
                        And (ABAR, 0xFFFFFFF0, BBAR)
                        OperationRegion (IPCV, SystemMemory, BBAR, 0x70)
                        Field (IPCV, DWordAcc, NoLock, Preserve)
                        {
                            Offset (0x60),
                            AVIC,   32,
                            Offset (0x68),
                            AIRS,   16
                        }

                        Store (0x03E8, CONT)
                        While (LAnd (LEqual (And (AIRS, One), One), LNotEqual (CONT, Zero)))
                        {
                            Stall (One)
                            Decrement (CONT)
                        }

                        Or (AIRS, 0x02, AIRS)
                        Store (CDEC, AVIC)
                        Or (AIRS, One, AIRS)
                        Store (0x03E8, CONT)
                        While (LAnd (LEqual (And (AIRS, One), One), LNotEqual (CONT, Zero)))
                        {
                            Stall (One)
                            Decrement (CONT)
                        }
                  }
                }
            }

            Method (CXDC, 0, Serialized)
            {
                Name (IDDX, 0x80000000)
                If (LAnd (LNotEqual (CADR, Zero), LNotEqual (CCNT, Zero)))
                {
                  Store (CADR, IDDX)
                  While (LLess (IDDX, Add (CADR, Multiply (CCNT, 0x04))))
                  {
                        VSTR (IDDX)
                        Add (IDDX, 0x04, IDDX)
                  }
                }
            }

            Method (ARST, 0, Serialized)
            {
                If (LAnd (LNotEqual (And (ABAR, 0xFFFFC004), 0xFFFFC004), LNotEqual (And (ABAR, 0xFFFFC000), Zero)))
                {
                  And (ABAR, 0xFFFFFFF0, BBAR)
                  OperationRegion (IPCV, SystemMemory, BBAR, 0xBF)
                  Field (IPCV, AnyAcc, NoLock, Preserve)
                  {
                        Offset (0x08),
                        CRST,   32,
                        Offset (0x4C),
                        CORB,   32,
                        Offset (0x5C),
                        RIRB,   32,
                        Offset (0x80),
                        OSD1,   32,
                        Offset (0xA0),
                        OSD2,   32
                  }

                  And (CORB, 0xFFFFFFFD, CORB)
                  And (RIRB, 0xFFFFFFFD, RIRB)
                  And (OSD1, 0xFFFFFFFD, OSD1)
                  And (OSD2, 0xFFFFFFFD, OSD2)
                  And (CRST, 0xFFFFFFFE, CRST)
                }
            }

            Method (AINI, 0, Serialized)
            {
                Name (CONT, 0x03E8)
                If (LAnd (LNotEqual (And (ABAR, 0xFFFFC004), 0xFFFFC004), LNotEqual (And (ABAR, 0xFFFFC000), Zero)))
                {
                  And (ABAR, 0xFFFFFFF0, BBAR)
                  OperationRegion (IPCV, SystemMemory, BBAR, 0x70)
                  Field (IPCV, DWordAcc, NoLock, Preserve)
                  {
                        GCAP,   16,
                        Offset (0x08),
                        GCTL,   32,
                        Offset (0x0E),
                        SSTS,   8,
                        Offset (0x60),
                        AVIC,   32,
                        Offset (0x68),
                        AIRS,   16
                  }

                  Or (GCTL, One, GCTL)
                  Store (0x03E8, CONT)
                  While (LAnd (LEqual (And (GCTL, One), Zero), LNotEqual (CONT, Zero)))
                  {
                        Stall (One)
                        Decrement (CONT)
                  }

                  And (GCAP, 0xFFFF, GCAP)
                  Or (SSTS, 0x0F, SSTS)
                  And (GCTL, 0xFFFFFFFE, GCTL)
                  Store (0x03E8, CONT)
                  While (LAnd (LEqual (And (GCTL, One), One), LNotEqual (CONT, Zero)))
                  {
                        Stall (One)
                        Decrement (CONT)
                  }

                  Or (GCTL, One, GCTL)
                  Store (0x03E8, CONT)
                  While (LAnd (LEqual (And (GCTL, One), Zero), LNotEqual (CONT, Zero)))
                  {
                        Stall (One)
                        Decrement (CONT)
                  }
                }
            }

            Method (ABWA, 1, Serialized)
            {
                If (Arg0)
                {
                  If (LOr (LEqual (And (ABAR, 0xFFFFC004), 0xFFFFC004), LEqual (And (ABAR, 0xFFFFC000), Zero)))
                  {
                        If (LNotEqual (BARA, 0x80000000))
                        {
                            Store (ABAR, TBAR)
                            Store (ACMD, TCMD)
                            Store (BARA, ABAR)
                            Store (0x06, ACMD)
                            Store (One, MODB)
                        }
                  }
                  ElseIf (LNotEqual (And (ACMD, 0x06), 0x06))
                  {
                        Store (ACMD, TCMD)
                        Store (0x06, ACMD)
                        Store (One, MODC)
                  }
                }
                ElseIf (MODB)
                {
                  If (LEqual (ABAR, BARA))
                  {
                        Store (TBAR, ABAR)
                        Store (TCMD, ACMD)
                  }
                }
            }

            Method (_DSM, 4, NotSerialized)// _DSM: Device-Specific Method
            {
                If (LEqual (Arg2, Zero))
                {
                  Return (Buffer (One)
                  {
                         0x03                                          
                  })
                }

                Return (Package (0x04)
                {
                  "layout-id",
                  Buffer (0x04)
                  {
                         0x0C, 0x00, 0x00, 0x00                        
                  },

                  "hda-gfx",
                  Buffer (0x0A)
                  {
                        "onboard-1"
                  }
                })
            }
      }

      Device (IGPU)
      {
            Name (_ADR, 0x00020000)// _ADR: Address
            Method (_DEP, 0, NotSerialized)// _DEP: Dependencies
            {
                ADBG ("GFX0 DEP Call")
                If (LEqual (S0ID, One))
                {
                  ADBG ("GFX0 DEP")
                  Return (Package (0x01)
                  {
                        PEPD
                  })
                }
                Else
                {
                  ADBG ("GFX0 DEP NULL")
                  Return (Package (0x00) {})
                }
            }

wx3124558 发表于 2016-6-27 11:42

防沉补丁x1

关云长羽 发表于 2016-6-27 12:07

你可以试试clover打补丁的方法,这是一个带HDMI补丁的配置文件,你参照着给你的配置文件打补丁吧

biggreat 发表于 2016-6-27 12:09

wx3124558 发表于 2016-6-27 11:42 https://www.pcbeta.com/static/image/common/back.gif
防沉补丁x1

ssdt和dsdt 发上来看看,再说下你机子的配置,cpu 集显 还是 独显

wx3124558 发表于 2016-6-27 12:14

biggreat 发表于 2016-6-27 12:09 https://www.pcbeta.com/static/image/common/back.gif
ssdt和dsdt 发上来看看,再说下你机子的配置,cpu 集显 还是 独显



神舟K610D-I7-D2,
CPU I7 4710MQ 2.5GHZ
HD4600集显
声卡ALC282
谢谢了

biggreat 发表于 2016-6-27 16:05

dsdt已修改,试试吧 hdmi-audio.kext或者clover打入fb补丁,应该就可以了

wx3124558 发表于 2016-6-27 17:29

biggreat 发表于 2016-6-27 16:05 https://www.pcbeta.com/static/image/common/back.gif
dsdt已修改,试试吧 hdmi-audio.kext或者clover打入fb补丁,应该就可以了

刚试了一下,clover下注入了HDMIAudio.kext和FakePCIID_Intel_HDMI_Audio.kext还是没有声音;
在你的贴子596楼中,提到“根据自己集成显卡注入的ig-platform-id结合以下信息,选择正确的补丁打入clover或者二进制文件”,下面列出的一段代码中,怎么样才叫正确选择呢?是全部都注入到kextstopatch中吗?
你提到:ig-platform-id:集成显卡注入的此属性有以下对应关系
0x01660003: HD4000 1366x768
0x01660004: HD4000 1600x900, 1920x1080
0x01660008: HD4000 1600x900, 1920x1080
0x01660009: HD4000 1600x900, 1920x1080
0x0a260006: HD4400/HD4600/HD5000
但是我注入的ig-platform-id为0x0d270006,是否把代码中0x0a260006替换为0x0d270006呢?

wx3124558 发表于 2016-6-27 17:30

biggreat 发表于 2016-6-27 16:05 https://www.pcbeta.com/static/image/common/back.gif
dsdt已修改,试试吧 hdmi-audio.kext或者clover打入fb补丁,应该就可以了

目前的情况是,在音频信息下有HDMI信息,声音面板下找不到HDMI的选项;

biggreat 发表于 2016-6-27 18:10

wx3124558 发表于 2016-6-27 17:30 https://www.pcbeta.com/static/image/common/back.gif
目前的情况是,在音频信息下有HDMI信息,声音面板下找不到HDMI的选项;

要接上HDMI设备才会出现在声音输出设备中

关云长羽 发表于 2016-6-27 18:14

审核好慢,上午给你发的带附件的回复到现在还在审核{:5_270:}

wx3124558 发表于 2016-6-27 18:18

关云长羽 发表于 2016-6-27 18:14 https://www.pcbeta.com/static/image/common/back.gif
审核好慢,上午给你发的带附件的回复到现在还在审核

...感谢了,这两天弄HDMI音频这块搞得人都快废掉了,还好有你们能指导{:5_264:}

wx3124558 发表于 2016-6-27 19:09

biggreat 发表于 2016-6-26 23:59 https://www.pcbeta.com/static/image/common/back.gif
看我签名帖子,2楼更新帖子,有个开启集成显卡hdmi 的说明

谢了大神,托你的福我弄好了,用你改的DSDT,然后把IG改为0x0a260006之后就能输出音频了,thx{:5_264:}

biggreat 发表于 2016-6-27 19:11

wx3124558 发表于 2016-6-27 19:09 https://www.pcbeta.com/static/image/common/back.gif
谢了大神,托你的福我弄好了,用你改的DSDT,然后把IG改为0x0a260006之后就能输出音频了,thx

恭喜,离完美又前进一步了

wx3124558 发表于 2016-6-27 19:12

biggreat 发表于 2016-6-27 18:10 https://www.pcbeta.com/static/image/common/back.gif
要接上HDMI设备才会出现在声音输出设备中

还有个问题哦,就是连上HDMI后,不能自动切换到HDMI音频,要手动切换,这样正常吗?

biggreat 发表于 2016-6-27 19:14

本帖最后由 biggreat 于 2016-6-27 19:15 编辑

wx3124558 发表于 2016-6-27 19:12 https://www.pcbeta.com/static/image/common/back.gif
还有个问题哦,就是连上HDMI后,不能自动切换到HDMI音频,要手动切换,这样正常吗?
我这里是自动切换的,第一次手动切换,以后可能自动吧,即使手动也能接受吧
页: [1] 2 3 4
查看完整版本: (已解决)HD4600的HDMI音频到底应该如何修改才能输出