Win10论坛

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

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

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

搜索
查看: 4052|回复: 33

[分享] ALC3232仿冒驱动耳机杂音、睡眠后自动切换失效等问题的解决 [复制链接]

Rank: 2Rank: 2

UID
2135695
帖子
153
PB币
418
贡献
0
技术
2
活跃
503
发表于 2015-12-17 20:09:40 |显示全部楼层
本帖最后由 limser 于 2015-12-17 20:14 编辑

ALC3232其实就是ALC292,Vendor Id: 0x10ec0292。之前看到这个帖子http://www.tonymacx86.com/yosemite-laptop-support/159031-any-fix-garbled-distorted-headphone-issue.html ,然后参考CodecCommander自带的各种profile,锁定Pin Control Widget 和 Unsolicited Response 这两个量的设定,终于让睡前、睡后的耳机和外放能正常自动切换了。

下面先说一下自己的认识:

1)Pin Control Widget的设定是为了解决耳机杂音的。需要设定的是 Mic at Ext  所在的节点,设定的值可以从codec dump中读取,设定命令是 Address+NodeID+707+Pin-ctls值。
如ALC3232,从下面的节点信息得到的命令就是01a70724
  1. Node 0x1a [Pin Complex] wcaps 0x40048b: Stereo Amp-In
  2.   Control: name="Mic Boost Volume", index=0, device=0
  3.     ControlAmp: chs=3, dir=In, idx=0, ofs=0
  4.   Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0
  5.   Amp-In vals:  [0x00 0x00]
  6.   Pincap 0x00003724: IN Detect
  7.     Vref caps: HIZ 50 GRD 80 100
  8.   Pin Default 0x03a11020: [Jack] Mic at Ext Left
  9.     Conn = 1/8, Color = Black
  10.     DefAssociation = 0x2, Sequence = 0x0
  11.   Pin-ctls: 0x24: IN VREF_80
  12.   Unsolicited: tag=04, enabled=1
  13.   Power states:  D0 D1 D2 D3 EPSS
  14.   Power: setting=D0, actual=D0
复制代码

2) Unsolicited Response的设定是为了解决耳机和外放切换的问题。需设定 HP Out at Ext 所在的节点,并且节点信息中有Unsolicited: tag=xx, enabled=1 这一行。
设定命令为Address+NodeID+708+<设定值>。这里比较麻烦,还是以ALC3232为例。

  1. Node 0x15 [Pin Complex] wcaps 0x40058d: Stereo Amp-Out
  2.   Control: name="Headphone Playback Switch", index=1, device=0
  3.     ControlAmp: chs=3, dir=Out, idx=0, ofs=0
  4.   Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
  5.   Amp-Out vals:  [0x00 0x00]
  6.   Pincap 0x0001001c: OUT HP EAPD Detect
  7.   EAPD 0x2: EAPD
  8.   Pin Default 0x0321101f: [Jack] HP Out at Ext Left
  9.     Conn = 1/8, Color = Black
  10.     DefAssociation = 0x1, Sequence = 0xf
  11.   Pin-ctls: 0xc0: OUT HP
  12.   Unsolicited: tag=02, enabled=1
  13.   Power states:  D0 D1 D2 D3 EPSS
  14.   Power: setting=D0, actual=D0
  15.   Connection: 2
  16.      0x0c 0x0d*
复制代码
设定值是8bits的一个数。记作a7 a6 a5 a4 a3 a2 a1 a0.
a7=1,表示enabled。
a6=0,没具体应用,不用管。
a5-a0,存放tag。对于这里的node 0x15,a5-a0是 000010
最后设定值就是 1000,0010。即0x82,不过我从睡眠前正常切换时读取的0x15的设定值是0x83,两者差1。(读取方法后面说)
同样有Unsolicited的0x1a节点(信息在上面),计算它的设定值得到的是0x84,和我读取的0x85也差1.
所以猜测,a0位设成1.

总之,最后得到的command是01570883.

3) profile的添加,如下图


注意,OnWake 和 On init 都要设定为true。CC自带的292默认只有 pin control一个 command,然后根据3232在我这的Subsystem Id: 0x17aa5034(codecdump中有),添加一个 10ec_0292_HDA_17aa_5034 的string和Realtek ALC292 MJ3232的dict。
MJ是马甲的意思。


PS:关于1)、2)两部分是自己琢磨的,更省事的办法是先有一个CC自带的hda-verb命令行程序(其实是移植自linux下的),按照上文中tonymacx86中18楼的方法,找到要设定的节点、以及设定值。如果你有兴趣更深入的理解这些设定的意义,可以百度 high-definition-audio-specification.pdf 查看intel官网上的那篇文档。

PPS:关于2)和mic ext,即0x1a是否需要设置Unsolicited,我还没确认

最后,如果你需要制作ALC3232仿冒驱动的工具,或者上文提到的CC的 ALC3232 profile,可以到这里去 https://github.com/shmilee/T450-Hackintosh/tree/master/ALC3232,我前前后后的过程都在那。



附件: 你需要登录才可以下载或查看附件。没有帐号?注册
2

查看全部评分

凡事都要保持一种低调的心

Rank: 7Rank: 7Rank: 7

UID
1394131
帖子
2726
PB币
2797
贡献
0
技术
212
活跃
780

远景智多星 远景技术达人

发表于 2015-12-17 21:11:49 |显示全部楼层
楼主能说的在清楚些么,我还是没看明白 说不定我能帮上你

Rank: 2Rank: 2

UID
2135695
帖子
153
PB币
418
贡献
0
技术
2
活跃
503
发表于 2015-12-17 21:48:32 |显示全部楼层
c24047 发表于 2015-12-17 21:11
楼主能说的在清楚些么,我还是没看明白 说不定我能帮上你

自己制作ALC3232的仿冒驱动,遇到和ALC292一样的两个问题:耳机杂音、睡眠后耳机外放不能自动切换。
本来有类似问题的声卡都是可以用codeccommander解决的。但它默认给ALC292配的custom command不全。
然后找到了上面两个verb,参考intel的文档,尽量用从linux下读取的codec来获得设定命令,填到codeccommander的Info.plist.

另外,像 01a70724 这些,其实和计算configdata时的格式一样的。只是configdata的verbID(intel就这么称呼的)是71C,71D这些,现在设定Pin Control,verbID是707.

再就是,Unsolicited Response的设定值其实也可以不用像我说的那样麻烦,就看做两个数,前一个8,后一个tag值+1。就像许多计算configdata的教程, Port connectivity和Location这两个数值(verbID 71F的参数)的处理一样,正确的做法是2+6拆分(intel文档7.3.3.31章节),但大家都还是沿用4+4拆分。同样也能说清。

Rank: 5Rank: 5Rank: 5

UID
713168
帖子
1131
PB币
3
贡献
0
技术
6
活跃
1315
发表于 2015-12-18 01:38:28 |显示全部楼层
高大上,看不懂

凡事都要保持一种低调的心

Rank: 7Rank: 7Rank: 7

UID
1394131
帖子
2726
PB币
2797
贡献
0
技术
212
活跃
780

远景智多星 远景技术达人

发表于 2015-12-18 02:10:42 |显示全部楼层
原来你说的是脚本,我一直都是手动来的,关于Config 修改,我已经有另外的解法了,不过也少有人关注

遠景のチーフ火星顧問 遠景の清掃のおばさん

Rank: 9

UID
2107182
帖子
2764
PB币
72
贡献
0
技术
239
活跃
2282

I'm Windows Phone用户 Win10先驱者

发表于 2015-12-18 06:47:00 来自手机 |显示全部楼层
表示我是看到声卡的名字才点进来看的。。

Rank: 2Rank: 2

UID
2135695
帖子
153
PB币
418
贡献
0
技术
2
活跃
503
发表于 2015-12-18 10:23:49 |显示全部楼层
突然发现还有问题,01a70724,这一命令On init 和 On wake 都是true,但在以下情况下,on init会失效。
1)开机前外接一个带麦的耳机,启动,查看0x1a 节点 pin control值为02,不是24.
此时耳机声音正常,拔掉后外放正常。
2)然后再插入耳机,就会有杂音出现。pin control值设定不对,在此时起作用了。
3)怎么办呢?睡眠。在唤醒之后,再去查看pin control值,已经设定为正确的24了。拔插耳机多次都不回出现杂音了。

那,为什么睡眠唤醒之前有杂音呢?出现杂音,还要满足两个条件:
1. 带麦的耳机
2. 插入耳机启动系统

Rank: 2Rank: 2

UID
2135695
帖子
153
PB币
418
贡献
0
技术
2
活跃
503
发表于 2015-12-18 12:16:56 |显示全部楼层
c24047 发表于 2015-12-18 02:10
原来你说的是脚本,我一直都是手动来的,关于Config 修改,我已经有另外的解法了,不过也少有人关注

这个config是指?
1)应该是说configdata吧。我刚看了你的新方法,可以帮助大家理解postconstructioninit...和HDAconfigdefault之间的替换关系。不过感觉工作量变大了。。。(主要是一个data变成了N个字典)
如果是调试节点,我觉得可以用你的方法。先给个大概的结果放在HDAconfigdefault里。然后某一个节点觉得有更准确的configdefault,那我就在Postconstructioninit:widgets下对应加一条,替换掉初始的。
以上是我理解的Postconstructioninit的作用,等有空了,我可以借助hda-verb这个小工具,检验一下。

2)clover的config的话,我和你的处理一样,我也把二进制patch放那里。然后是DSDT打补丁,最后是比照RehabMan的脚本采用AppleHDAInjector顶替系统的AppleHDA的方案。

最后,我想问一下,你之前的帖子提到的“麦克风降噪”原理是什么?HDA Hardware Config Resource里,也是configdata的设定?

凡事都要保持一种低调的心

Rank: 7Rank: 7Rank: 7

UID
1394131
帖子
2726
PB币
2797
贡献
0
技术
212
活跃
780

远景智多星 远景技术达人

发表于 2015-12-25 16:30:31 |显示全部楼层
limser 发表于 2015-12-18 12:16
这个config是指?
1)应该是说configdata吧。我刚看了你的新方法,可以帮助大家理解postconstructionini ...

利用麦克风降噪是真苹果的双mic降噪的原理,所以你只能在内置mic上增加降噪选项,而外接的耳机,不会出现这样的选项,所以开不开对黑果的效果不明显,还会降低mic的语音音量

Rank: 5Rank: 5Rank: 5

UID
4759634
帖子
713
PB币
913
贡献
0
技术
0
活跃
650
发表于 2015-12-29 22:01:50 |显示全部楼层
好深奥哈哈 看不懂

Rank: 5Rank: 5Rank: 5

UID
3604347
帖子
756
PB币
624
贡献
0
技术
1
活跃
941
发表于 2015-12-30 03:52:32 来自手机 |显示全部楼层
本帖最后由 Loueos 于 2016-1-1 16:24 编辑

感谢分享睡眠后扬声器耳机不能切换。Unsolicited Response的设定是为了解决耳机和外放切换的问题,alc892 是Node 0x14设定Address+NodeID+708+803成功解决睡眠唤醒耳机不能识别问题

Rank: 2Rank: 2

UID
2947239
帖子
258
PB币
116
贡献
0
技术
0
活跃
316
发表于 2016-2-3 19:06:33 |显示全部楼层
我的睡眠之后就检测不到外接话筒怎么解?

Rank: 5Rank: 5Rank: 5

UID
4783896
帖子
1119
PB币
625
贡献
0
技术
0
活跃
527
发表于 2016-3-8 00:59:37 |显示全部楼层
好东西,按照楼主的方法修改成功。
请问楼主,windows下重启进mac,耳机无声有办法解决吗

Rank: 5Rank: 5Rank: 5

UID
4783896
帖子
1119
PB币
625
贡献
0
技术
0
活跃
527
发表于 2016-3-8 00:59:54 |显示全部楼层
好东西,按照楼主的方法修改成功。
请问楼主,windows下重启进mac,耳机无声有办法解决吗

Rank: 1

UID
1523377
帖子
78
PB币
111
贡献
0
技术
1
活跃
59
发表于 2016-3-12 23:19:23 |显示全部楼层
我想问一下唤醒无声该如何解决,我也是ALC292 的,用你的方法唤醒后耳机有声音了,但是外放去始终没有,咋办呢?

Rank: 2Rank: 2

UID
65693
帖子
368
PB币
1060
贡献
0
技术
9
活跃
786
发表于 2016-3-13 15:54:04 |显示全部楼层
楼主好、请问能把你完工的AppleHDA.kext 和CodecCommander.kext分享一下么。。。

Rank: 1

UID
1523377
帖子
78
PB币
111
贡献
0
技术
1
活跃
59
发表于 2016-3-14 10:12:00 |显示全部楼层
limser 发表于 2015-12-18 10:23
突然发现还有问题,01a70724,这一命令On init 和 On wake 都是true,但在以下情况下,on init会失效。
1) ...

请问如何查看的pin control 值?

Rank: 1

UID
4796163
帖子
17
PB币
15
贡献
0
技术
0
活跃
11
发表于 2016-3-15 03:26:59 |显示全部楼层
好东西 谢谢 了!!!!

Rank: 5Rank: 5Rank: 5

UID
1431243
帖子
677
PB币
763
贡献
0
技术
13
活跃
1444
发表于 2016-5-24 14:06:53 |显示全部楼层
limser 发表于 2015-12-18 12:16
这个config是指?
1)应该是说configdata吧。我刚看了你的新方法,可以帮助大家理解postconstructionini ...

LZ你好,我的机器是X1 carbon,声卡也是ALC292(ALC3232),Subsystem Id: 0x17aa2227, 仿冒了声卡,现在问题是机器睡眠唤醒后外放无声,耳机OK,参考你的修改codecCommander教程,我修改了codecCommander文件放入L/E, 但是没有改变睡眠唤醒后外放无声的现象,你能帮忙看看吗?

附件: 你需要登录才可以下载或查看附件。没有帐号?注册

Rank: 2Rank: 2

UID
1708353
帖子
400
PB币
50
贡献
0
技术
6
活跃
329
发表于 2016-5-28 09:09:50 |显示全部楼层
好东西啊,看看看啊
关闭

站长推荐

已经开启实名认证了哟
这里可以进行实名操作:点我点我点我
回顶部
Copyright (C) 2005-2018 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛 | 电脑硬件 | 安卓软件