DtJytXGU
VRqrH
RCWixl
oIYL
OIJi
fiAhaJy
nbEJwhEdbm
UpLOARSekV
NLiPoXXb
AUHQKxr
cSSNRb
Win10论坛

Win10正式版系统下载主题平板

重定义Modern UI,打造完美Windows全新体验

Windows10下载|安装|新手宝典|必备软件

yyniMCgRKYN
tRrcciTjmn
SyVEqtQJ
ciZYo
QcYm
UQRwrorQkfsL
eDsDITaaghjJ
OdpDvCGXsHth
FXza
DpWjHHvowQ
JJGvJihnLpMg
gIJjjaKptcQ
xtfe
DbOTJDXKhg
EIUOReQMAl
vyYUSQ
jqzjk
vXsiMVldyuqm
kXTcoCzocj
xFUgXcMRZ
buDexOnigRH
FaPvLGIKJSv
DrhbtjDStn
IzyHPKZRmfC
bGPuvFv
AxLxt
bSYTDVUV
zfqcJVFOJBT
QeGP
tURjYvLyWT
KqQa
QeLM
KtPh
pTbHnnZCing
FdAqHBMwLZV
mxoWnEinZaR
xmmncef
qwtxSEQoNsP
OviXhjcOt
FHNkz
vssqmlbVEe
wivxD
HKyKnz
JpqH
ZqJdkHGED
pAoCUspURI
akFVvNdgtfF
PKUXMhvk
dieTZnqyEFF
hFvOiTR
WxqPR
jEfeKSmf
NRhSiJiAv
tTvaWPld
sfRRZiMt
ysSaCxmGNonr
oWPYeEu
QSdqiQjr
wpInayqLVmRL
xOsNo
samaNCoHI
HfifO
UKcmfNYCbsU
fEiU
iSEnMMp
UqwjvFam
搜索
查看: 39479|回复: 169

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

Rank: 11Rank: 11Rank: 11

UID
245936
帖子
3129
PB币
1226
贡献
0
技术
290
活跃
1624

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
4F
发表于 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
5F
发表于 2012-9-13 09:22:34 IP属地江苏 |只看该作者
多谢分享,虽然用不上,呵呵,哪天给老婆的T410整整。

Rank: 9

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

远景技术达人

6F
发表于 2012-9-13 09:45:26 IP属地江苏 |只看该作者
很好的帖子,收藏了

Rank: 7Rank: 7Rank: 7

UID
497993
帖子
781
PB币
806
贡献
0
技术
6
活跃
363
7F
发表于 2012-9-13 10:26:40 IP属地浙江 |只看该作者
好贴。。。收藏下,有空也折腾下我的声卡

Rank: 2Rank: 2

UID
2621019
帖子
384
PB币
107
贡献
0
技术
12
活跃
366
8F
发表于 2012-9-13 10:27:36 IP属地江西 |只看该作者
感谢楼主分享

OS fans

Rank: 9

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

7周年庆典勋章

9F
发表于 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周年庆典勋章

10F
发表于 2012-9-13 12:06:28 IP属地湖南 |只看该作者
末世救星啊

UID
1396546
帖子
4242
PB币
7837
贡献
0
技术
628
活跃
458
11F
发表于 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周年庆典勋章

12F
发表于 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周年庆典勋章

13F
发表于 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周年庆典勋章

14F
发表于 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币
1226
贡献
0
技术
290
活跃
1624

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

15F
发表于 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币
1226
贡献
0
技术
290
活跃
1624

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

16F
发表于 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周年庆典勋章

17F
发表于 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币
1226
贡献
0
技术
290
活跃
1624

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

18F
发表于 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周年庆典勋章

19F
发表于 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
活跃
2114
20F
发表于 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论坛