HxaplMZPpJ
pttg
bqZglNXMKs
OASSq
HVhDmrldTru
jmtgZUnQ
VcNwAgwq
jCwQtA
eQDrsXNk
Qoxpc
iyXIMwEshCRN
cpIEieJyc
kRckMlLHoI
StfaypQwQK
ktyhFYsMYbyo
oPUssBMMj
wQRL
NUIMXHEi
PYaRnNOguqI
SGHHR
FmoAORHDb
CelovWI
EVjOrI
rtWw
OspYflR
pVbQBJKEh
zgDmAkVoABQ
DYwnRkC
xbOlcwFSqxV
vdPHvDM
gzXLnLl
zwFGKbg
hsxMYvJ
dRiLcqIRqtX
cBBgcipjAuV
NODrAgquYCY
oLVFHDjBYtAF
irGXuPFfh
ucXy
ehAVomD
lpxCw
gNPOspf
NNtZQpMI
CuEGnix
KufZibwkjZU
WRxkv
Zdri
seBjBGzihk
QfQG
WwqyyQfZga
GQGOQBkm
HNRHcekLh
FigMRckvtL
gOMYEJB
QHxMLFHL
LyslRMCYeilo
bEqn
CLEVBldH
ZlHVgYfjQS
XZoCCrlDe
VthWFSvBazg
YXWfd
eIpBhwUPv
MCyXiIdtSFUR
xhaLOIqdfdN
VdkzLoEgpHrB
LGOqjOe
jhPZk
dFuoLnOzQzNU
zRLsgANQK
kiNpeewZRe
CzOFp
awcxbJpknM
ymtG
nFZAM
VEVSoKeb
sEdGbbYfAfij
搜索
查看: 39503|回复: 169

[原创内容] THINKPAD T410 CX20585 AppleHDA 10.8正式版修改(自动切换内外MIC、耳机与扬声器)   [复制链接]

Rank: 11Rank: 11Rank: 11

UID
245936
帖子
3129
PB币
1225
贡献
0
技术
290
活跃
1625

7周年庆典勋章 8周年庆典勋章

发表于 2012-9-13 02:36:35 IP属地福建 |显示全部楼层
快御云安全
本帖最后由 gcafrk 于 2014-2-28 18:12 编辑

小黑T410的CX20585声卡的AppleHDA自LION开始就应该比较完美了,只是外置MIC一直无法使用。

看了很多帖子,下载了各种声卡的AppleHDA做对比,终于完成了小黑T410的CX20585 AppleHDA 10.8正式版的修改,让它在T410上完美工作:
  • 内置MIC、外置MIC可以自动切换;
  • 内置MIC输入有电平;
  • 内置扬声器与耳机可以自动切换;
  • 启动了“使用环境噪音降低功能”;
耳机的声音超级棒!!赞一下原版驱动!!

1)首先,用UBUNTU光盘启动电脑,获取CODEC(具体方法可搜索论坛)。从中获得以下有用的节点代码:
  • Node 0x10: Audio Output(扬声器与耳机输出都需要用到它)
  • Node 0x1f: Speaker at Int(内置扬声器)
  • Node 0x19: HP Out at Ext Right(HP=HeadPhone耳机。Ext=Extenal外置)
  • Node 0x1b: Mic at Ext Right(外置MIC)
  • Node 0x23: Mic at int(内置MIC)
  • Node 0x14: Audio Input(内置MIC的输入需要用到它)
  • Node 0x16: Audio Input(外置MIC的输入需要用到它)
  • Node 0x17: Audio Selector(MIC的输入需要用到它)
  • Node 0x1a: Mic at Sep Rear(这个节点实际上是无用的,在WINDOWS的注册表中也找不到它)
  • Node 0x1c: HP Out at Sep Rear(这个节点实际上也是无用的,在WINDOWS的注册表中也找不到它)
注:需要将以上16进制转换成10进制的数字,用在下面第二点的节点连接分析中。

2)分析节点连接结果:(具体方法可采用紫米的手工方法,或者采用codec生成节点连接图的方法)
  • 内置MIC:20>35
  • 外置MIC:22>23>27(或者21>23>27)
  • 内置扬声器:31>16
  • 耳机:25>16
用以上节点连接在Platforms.XML中做成两组自动切换。注:如果你的声卡节点路径与上面不同,则需要自行修改。

3)ConfigData生成:【在该kext的Plugin目录的AppleHDAHardwareConfigDriver.kext的Info.plist文件中】
我直接采用紫米的建议,我手工生成了4组ConfigData,并且发现这4组都可以很好地工作。我则使用了第一组(随便挑的)。
第一组:(后面会分析如何修改它们为自己声卡专属的ConfigData)
  1. 01971C50 01971D40 01971E21 01971F01 01F71C40 01F71D01 01F71E10 01F71F90 01B71C20 01B71D30 01B71E81 01B71F01 02371C10 02371D01 02371EA0 02371F90
复制代码

第二组:
  1. 01971C50 01971D40 01971E21 01971F01 01F71C40 01F71D41 01F71E10 01F71F90 01B71C20 01B71D30 01B71E81 01B71F01 02371C10 02371D01 02371EA0 02371F90
复制代码

第三组:
  1. 01971C50 01971D40 01971E21 01971F01 01F71C60 01F71D01 01F71E10 01F71F90 01B71C20 01B71D30 01B71E81 01B71F01 02371C10 02371D01 02371EA0 02371F90
复制代码

第四组:
  1. 01971C50 01971D40 01971E21 01971F01 01F71C60 01F71D41 01F71E10 01F71F90 01B71C20 01B71D30 01B71E81 01B71F01 02371C10 02371D01 02371EA0 02371F90
复制代码

在这4组ConfigData中,其实只要关心前3位数:
   第1位“0”为声卡codec中的Address。如果你的声卡Address是1,则将其都改为“1”。

   第2、3两位为声卡对应的内外MIC与内外喇叭,以第一组ConfigData为例:   19=耳机,1F=内置扬声器,1B=外置MIC,23=内置MIC。

   如果你的声卡这4个设备的ID与其不同,则可以用自己声卡这4个设备的ID分别替换它们。

按照这个方法,就可以为自己的声卡设置专属的ConfigData了。

4)Layout:
我采用了LayoutID 12。在Layout12.XML文件中,Inputs的第一项为Mic,第二项输入用了LineIn;Outputs的第一项为Headphone,第二项用了LineOut(很多人认为第二项要用IntSpeaker,而实际上用IntSpeaker则扬声器就不出声了)。
Platforms.XML中的LayoutID也要用12。

5)去除Sound assertion提示:(对所有声卡均通用)
10.8GM之后,AppleHDA代码改成了用参数形式,而不是像LION时代在程序中写入了几乎所有的提示文本,因此AppleHDA文件很小,也只要修改一处即可屏蔽所有日志中的Sound assertion提示。

去除方法:用Hex Friend程序打开kext中的/MacOS/AppleHDA文件,搜索文本:Sound assertion in %s at line %d

它的二进制值是:
  1. 53 6F 75 6E 64 20 61 73 73 65 72 74 69 6F 6E 20 69 6E 20 25 73 20 61 74 20 6C 69 6E 65 20 25 64
复制代码


然后在二进制格式中,用相同位数的0替换掉:
  1. 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
复制代码


6)AppleHDA二进制补丁:
  1. sudo perl -pi -e 's|\\x84\x19\xd4\x11|\x69\x50\xf1\x14|g' ~/Desktop/AppleHDA.kext/Contents/MacOS/AppleHDA
复制代码
(此处假设AppleHDA.kext放在了桌面上)

也可以用Hex Friend程序将8419d411替换成6950f114。

7)DSDT修改:
  1. Device (HDEF)
  2.             {
  3.                 Name (_ADR, 0x001B0000)
  4.                 Method (_DSM, 4, NotSerialized)
  5.                 {
  6.                     Store (Package (0x0E)
  7.                         {
  8.                             "AAPL,slot-name",
  9.                             Buffer (0x09)
  10.                             {
  11.                                 "Built in"
  12.                             },
  13.                             "device-id",
  14.                             Buffer (0x04)
  15.                             {
  16.                                 0x69, 0x50, 0xF1, 0x14
  17.                             },
  18.                             "layout-id",
  19.                             Buffer (0x04)
  20.                             {
  21.                                 0x0C, 0x00, 0x00, 0x00
  22.                             },
  23.                             "model",
  24.                             Buffer (0x1A)
  25.                             {
  26.                                 "HD Audio Conexant Cx20585"
  27.                             },
  28.                             "name",
  29.                             Buffer (0x11)
  30.                             {
  31.                                 "Conexant Cx20585"
  32.                             },
  33.                             "device_type",
  34.                             Buffer (0x11)
  35.                             {
  36.                                 "Audio Controller"
  37.                             },
  38.                             "PinConfigurations",
  39.                             Buffer (Zero) {}
  40.                         }, Local0)
  41.                     DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
  42.                     Return (Local0)
  43.                 }
  44.                 Name (_S3D, 0x03)
  45.                 Name (RID, Zero)
  46.                 Name (_PRW, Package (0x02)
  47.                 {
  48.                     0x0D,
  49.                     0x04
  50.                 })
  51.                 Method (_PSW, 1, NotSerialized)
  52.                 {
  53.                     Noop
  54.                 }
  55.             }
复制代码



上4张图片:
内建扬声器.jpg

请勿使用多线程下载工具下载论坛附件!
外置MIC输入.jpg

请勿使用多线程下载工具下载论坛附件!
耳机输出.jpg

请勿使用多线程下载工具下载论坛附件!
内置MIC输入.jpg

请勿使用多线程下载工具下载论坛附件!


以下是主要附件:
AppleHDA.kext-T410-ML.zip (753.13 KB, 下载次数: 793) 已经正在使用中的AppleHDA.kext

这两个文件可以用来分析(未经压缩,可以用PlistEdit Pro打开):
Platforms.xml.zip (3.84 KB, 下载次数: 148)
layout12.xml.zip (1.34 KB, 下载次数: 130)
Hex Fiend.zip (706.08 KB, 下载次数: 113)

节点图:
codec_dump.jpg

请勿使用多线程下载工具下载论坛附件!




2014-02-28补充:1)关于节点连接,还有一组也是可以出声的:
  • 内置MIC:21>35
  • 外置MIC:20>23>27(或者20>23>27)
  • 内置扬声器:31>17
  • 耳机:25>16


2)二进制补丁中,还有一组替换方法:将8b19d411替换成6950f114,也是可以出声的。


5

查看全部评分

Rank: 5Rank: 5Rank: 5

UID
521402
帖子
611
PB币
1094
贡献
0
技术
1
活跃
84
发表于 2012-9-13 08:18:21 IP属地江苏 来自手机 |显示全部楼层
谢谢分享~辛苦啦!

Rank: 7Rank: 7Rank: 7

UID
801452
帖子
2010
PB币
8849
贡献
0
技术
65
活跃
378

7周年庆典勋章

发表于 2012-9-13 08:46:03 IP属地湖北 |显示全部楼层
Sound assertion可能是HDMI或其他什么引起的,最好能彻底解决。只靠Binary Patch剔除提示信息是治标不治本的凑合方法

Rank: 2Rank: 2

UID
1514674
帖子
200
PB币
729
贡献
0
技术
36
活跃
365
发表于 2012-9-13 09:11:23 IP属地北京 |显示全部楼层
太感谢了,先用上,以后慢慢琢磨

点评

gcafrk  还得感谢你之前弄出来的LION版T410声卡驱动!那些都是这个驱动的基础。只是我还弄不清楚HDA的widgets的使用,所以只能屏蔽sound assertion来处理了。  发表于 2012-9-18 15:17 IP属地福建

机器猫

Rank: 7Rank: 7Rank: 7

UID
122071
帖子
2285
PB币
4703
贡献
0
技术
275
活跃
28
发表于 2012-9-13 09:22:34 IP属地江苏 |显示全部楼层
多谢分享,虽然用不上,呵呵,哪天给老婆的T410整整。

Rank: 9

UID
404751
帖子
3838
PB币
6586
贡献
0
技术
23
活跃
1273

远景技术达人

发表于 2012-9-13 09:45:26 IP属地江苏 |显示全部楼层
很好的帖子,收藏了

Rank: 7Rank: 7Rank: 7

UID
497993
帖子
781
PB币
806
贡献
0
技术
6
活跃
363
发表于 2012-9-13 10:26:40 IP属地浙江 |显示全部楼层
好贴。。。收藏下,有空也折腾下我的声卡

Rank: 2Rank: 2

UID
2621019
帖子
384
PB币
107
贡献
0
技术
12
活跃
367
发表于 2012-9-13 10:27:36 IP属地江西 |显示全部楼层
感谢楼主分享

OS fans

Rank: 9

UID
636386
帖子
905
PB币
27
贡献
0
技术
46
活跃
720

7周年庆典勋章

发表于 2012-9-13 11:07:15 IP属地陕西 |显示全部楼层
本帖最后由 vitamin!m 于 2012-9-13 12:56 编辑

有个小笔误  内置MIC:20>35


受楼主ConfigDate的启发 我的Z460的内置mic终于有输入了......太不易了

PS:楼主的外置mic可用否?有没有输入电平


点评

gcafrk  外置MIC没有电平,估计是在Layout中采用了LineIn的结果。因为在Platforms的Pathmap中,VolumeInputAmp参数(输入音量控制选项)我选择了Yes。  发表于 2012-9-13 14:11 IP属地福建
gcafrk  笔误改过来了,谢谢!我的外置MIC可以使用,但是输入没有电平。  发表于 2012-9-13 13:53 IP属地福建

Rank: 7Rank: 7Rank: 7

UID
1663649
帖子
1745
PB币
256
贡献
0
技术
104
活跃
550

7周年庆典勋章

发表于 2012-9-13 12:06:28 IP属地湖南 |显示全部楼层
末世救星啊

UID
1396546
帖子
4242
PB币
7837
贡献
0
技术
628
活跃
458
发表于 2012-9-13 12:26:20 IP属地广东 来自手机 |显示全部楼层
tq09mx5 发表于 2012-9-13 08:46
Sound assertion可能是HDMI或其他什么引起的,最好能彻底解决。只靠Binary Patch剔除提示信息是治标不治本的 ...

说得轻巧

Rank: 7Rank: 7Rank: 7

UID
801452
帖子
2010
PB币
8849
贡献
0
技术
65
活跃
378

7周年庆典勋章

发表于 2012-9-13 12:57:21 IP属地湖北 |显示全部楼层
VIVXIX 发表于 2012-9-13 12:26
说得轻巧

嗯,说起来的确很轻巧

Rank: 7Rank: 7Rank: 7

UID
1663649
帖子
1745
PB币
256
贡献
0
技术
104
活跃
550

7周年庆典勋章

发表于 2012-9-13 13:20:07 IP属地湖南 |显示全部楼层
楼主  你提供的AppleHDA不能一键静音   我根据5楼 danielchang提供的方法 修改后能 快捷键静音了

AppleHDA.kext.zip (713.57 KB, 下载次数: 102)

Rank: 7Rank: 7Rank: 7

UID
1663649
帖子
1745
PB币
256
贡献
0
技术
104
活跃
550

7周年庆典勋章

发表于 2012-9-13 13:22:57 IP属地湖南 |显示全部楼层
测试反馈  内置MIC、外置MIC可以自动切换  不成功
屏幕快照 2012-09-13 下午1.24.34.png

请勿使用多线程下载工具下载论坛附件!

唯一就是比原来的applehda增加了  启动了“使用环境噪音降低功能”

点评

gcafrk  最好分析一下自己声卡的节点。在我的机器上内置与外置自动切换是可以的。  发表于 2012-9-13 14:02 IP属地福建

Rank: 11Rank: 11Rank: 11

UID
245936
帖子
3129
PB币
1225
贡献
0
技术
290
活跃
1625

7周年庆典勋章 8周年庆典勋章

发表于 2012-9-13 14:00:36 IP属地福建 |显示全部楼层
本帖最后由 gcafrk 于 2012-9-13 20:07 编辑
tq09mx5 发表于 2012-9-13 12:57
嗯,说起来的确很轻巧

在屏蔽之前,有以下几个Sound assertion提示:
  1. Sound assertion in AppleHDAPath at line 1331
  2. Sound assertion in AppleHDAEngine at line 519
  3. Sound assertion in AppleHDAWidget at line 2175
  4. Sound assertion in AppleHDAWidget at line 3095
复制代码

毕竟是修改原版的二进制代码,并不是重写。因此,少量的Sound assertion提示是不可避免的。

我一直在检测Coreaudiod进程,发现CPU占有率一直保持在3%左右(以4核CPU占满值400%为基准),重启后下降到正常水平(1%左右,不发声的时候0%)。也许还需要微调一些参数。但就目前的使用情况来说,已经比较接近100%完美了。

或许你可以提供一些关于AppleHDA方面更加详尽的资料,我参考一下再进行一些修改。。。

Rank: 11Rank: 11Rank: 11

UID
245936
帖子
3129
PB币
1225
贡献
0
技术
290
活跃
1625

7周年庆典勋章 8周年庆典勋章

发表于 2012-9-13 14:13:21 IP属地福建 |显示全部楼层
本帖最后由 gcafrk 于 2012-9-13 19:37 编辑
mazimao123 发表于 2012-9-13 13:20
楼主  你提供的AppleHDA不能一键静音   我根据5楼 danielchang提供的方法 修改后能 快捷键静音了

我的一键静音可以用,直接按T410的静音按钮即可将内置扬声器静音,但是耳机是不行的。
我修改Pathmap中输出部分Amp下的两个值:
MuteInputAmp=NO
VolumeInputAmp=NO

经过测试,静音内置扬声器+静音耳机都OK了。一楼附件已经更新。

Rank: 7Rank: 7Rank: 7

UID
801452
帖子
2010
PB币
8849
贡献
0
技术
65
活跃
378

7周年庆典勋章

发表于 2012-9-13 14:19:46 IP属地湖北 |显示全部楼层
gcafrk 发表于 2012-9-13 14:00
在屏蔽之前,有以下几个Sound assertion提示:

毕竟是修改原版的二进制代码,并不是重写。因此,少量的 ...

才发现你的DSDT代码段没有
  1. "hda-gfx",
  2.                             Buffer (0x0A)
  3.                             {
  4.                                 "onboard-1"
  5.                             }
复制代码
加上试试。另外,如果你的显卡有HDMI或DP之类的接口,要给显卡DSDT代码段也加上

Rank: 11Rank: 11Rank: 11

UID
245936
帖子
3129
PB币
1225
贡献
0
技术
290
活跃
1625

7周年庆典勋章 8周年庆典勋章

发表于 2012-9-13 16:28:52 IP属地福建 |显示全部楼层
本帖最后由 gcafrk 于 2012-9-13 22:00 编辑
tq09mx5 发表于 2012-9-13 14:19
才发现你的DSDT代码段没有加上试试。另外,如果你的显卡有HDMI或DP之类的接口,要给显卡DSDT代码段也加上

这段代码刚加到DSDT中。出现了新的Sound assertion(每次开机启动后出现一次):
  1. Sound assertion in AppleHDAController at line 1294
复制代码
这么一弄,就得接着整HDMI和DP了。暂时先用着,T410只有DP口,平时几乎不用,DP线也没有。等有需要用到DP的时候再折腾。

Rank: 7Rank: 7Rank: 7

UID
1663649
帖子
1745
PB币
256
贡献
0
技术
104
活跃
550

7周年庆典勋章

发表于 2012-9-13 18:37:01 IP属地湖南 |显示全部楼层
gcafrk 发表于 2012-9-13 14:13
我的一键静音可以用,直接按T410的静音按钮即可将内置扬声器静音,但是耳机是不行的。
我修改Pathmap中输 ...

我修改的方法是 搜索MuteInputAmp,有四个结果,把后面两个MuteInputAmp键值true修改成false,无论耳机还是扬声器,都能一键静音

点评

gcafrk  刚才忘记了重启。重启之后就OK了。  发表于 2012-9-13 19:38 IP属地福建

仙妖

Rank: 7Rank: 7Rank: 7

UID
979840
帖子
1413
PB币
1897
贡献
0
技术
11
活跃
2118
发表于 2012-9-13 18:56:17 IP属地美国 |显示全部楼层
用idsdt能省很多工啊。。。。。。。。。。。。。
回顶部
Copyright (C) 2005-2024 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号  CDN加速及安全服务由「快御」提供
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win11论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛