Dell Precision M4800 AppleALC声卡驱动修复教程

news/2024/10/25 2:20:45/

前言

对于我的Dell Precision M4800来说,用acidanthera的AppleALC.kext并不能完全驱动,换了好几个layout-id都没鸟用,具体表现为:

  1. Dell Dock 底座的两个声音插孔不能用
  2. 左面板的耳机有严重杂音,耳机基本不能正常使用

因此,不得已只好自己修复,特此记录下修复过程如下。

 

准备工作

首先根据Apple的PinConfig规范自己用Excel(WPS兼容)做了个PinConfigData配置模板工具pinconfigs.xlsx以备用。

 

Linux环境 (需先确保Linux下声音正常)

 

工具准备:

安装hda-tools:
此工具我已经同步到我的仓库AppleALC_Dell_M4800. Linux下能用到的其实只有codecgraphverbit.sh,其他大部分Mac下才能用, 以下有几步也可以在Mac下执行。

git clone https://github.com/badfellow/AppleALC_Dell_M4800
chmod 755 -R ./AppleALC_Dell_M4800/hda-tools
sudo cp ./AppleALC_Dell_M4800/hda-tools/* /usr/local/bin/
rm -rf ./AppleALC_Dell_M4800        //删除

安装WPS: 命令行安装或者直接到WPS官网下载。(如果只想在Windows或者Mac上用Microsoft Office编辑Excel文件,此步骤略)

sudo dnf install https://wdl1.cache.wps.cn/wps/download/ep/Linux2019/10161/wps-office-11.1.0.10161-1.x86_64.rpm    //fedora
sudo apt install https://wdl1.cache.wps.cn/wps/download/ep/Linux2019/10161/wps-office_11.1.0.10161_amd64.deb    //ubuntu or debian
  1. 提取Codec

    我本来安装了Fedora双系统,所以就直接在Fedora下提取了. 为了纯净提取,先清除NVAM再进入BIOS恢复出厂设置,再在BIOS里手工配置下Fedora的EFI进入Fedora系统。
    进入终端Shell环境

    cp /proc/asound/card1/codec* ./   // 提取声卡codec到当前路径 (我的板载声卡在card1,有的可能是card0)
  2. 查找所有节点 (此步骤也可在Mac下执行)

    整理所有节点并记录到Excel模板pinconfigs.xlsx里, Linux环境可以安装个WPS。输入命令verbit.sh codec#0得到以下屏幕打印信息

    % ../hda-tools/verbit.sh codec#0Verbs from Linux Codec Dump File: codec#0Codec: Realtek ALC3226   Address: 0   DevID: 283902610 (0x10ec0292)Jack   Color  Description                  Node     PinDefault             Original Verbs
    --------------------------------------------------------------------------------------------------------
    Digital Unknown  Mic at Int N/A              18 0x12   0x90a60140   01271c40 01271d01 01271ea6 01271f901/8   Black  Speaker at Ext Rear         19 0x13   0x411111f0   01371cf0 01371d11 01371e11 01371f41
    Analog Unknown  Speaker at Int N/A          20 0x14   0x90170110   01471c10 01471d01 01471e17 01471f901/8   Green  HP Out at Ext Front         21 0x15   0x0221401f   01571c1f 01571d40 01571e21 01571f021/8   Green  Line Out at Ext Rear        22 0x16   0x01014020   01671c20 01671d40 01671e01 01671f01
    Mic at Ext Front    0x18 0x18                        44142641 01871c31 01871d90     01871ea1 01871f02  1/8    Pink  Mic at Ext Rear             25 0x19   0x01a1903e   01971c3e 01971d90 01971ea1 01971f011/8   Black  Speaker at Ext Rear         26 0x1a   0x411111f0   01a71cf0 01a71d11 01a71e11 01a71f411/8   Black  Speaker at Ext Rear         27 0x1b   0x411111f0   01b71cf0 01b71d11 01b71e11 01b71f41
    Unknown Unknown  Modem Hand at Ext N/A       29 0x1d   0x40700001   01d71c01 01d71d00 01d71e70 01d71f401/8   Black  Speaker at Ext Rear         30 0x1e   0x411111f0   01e71cf0 01e71d11 01e71e11 01e71f41
    --------------------------------------------------------------------------------------------------------Jack   Color  Description                  Node     PinDefault             Modified Verbs
    --------------------------------------------------------------------------------------------------------
    Digital Unknown  Mic at Int N/A              18 0x12   0x90a60140   01271c40 01271d00 01271ea6 01271f90
    Analog Unknown  Speaker at Int N/A          20 0x14   0x90170110   01471c10 01471d00 01471e17 01471f901/8   Green  HP Out at Ext Front         21 0x15   0x0221401f   01571c50 01571d40 01571e21 01571f011/8   Green  Line Out at Ext Rear        22 0x16   0x01014020   01671c20 01671d40 01671e01 01671f01
    Mic at Ext Front    0x18 0x18                        44142641 01871c30 01871d90     01871ea1 01871f01  1/8    Pink  Mic at Ext Rear             25 0x19   0x01a1903e   01971c60 01971d90 01971ea1 01971f01
    Unknown Unknown  Modem Hand at Ext N/A       29 0x1d   0x40700001   01d71c70 01d71d00 01d71e70 01d71f40
    --------------------------------------------------------------------------------------------------------Modified Verbs in One Line: 01271c40 01271d00 01271ea6 01271f90 01471c10 01471d00 01471e17 01471f90 01571c50 01571d40 01571e21 01571f01 01671c20 01671d40 01671e01 01671f01 01871c30 01871d90 01871ea1 01871f01 01971c60 01971d90 01971ea1 01971f01 01d71c70 01d71d00 01d71e70 01d71f40
    --------------------------------------------------------------------------------------------------------

    以上第一部分即列出来来了所有节点为 0x12, 0x13, 0x14, 0x15, 0x16, 0x18, 0x19, 0x1a, 0x1b, 0x1d, 0x1e,记录到Excel模板的PinConfig生成模板工作表的第一列节点(HEX)<十六进制度>, 第二列节点(DEC)<十进制>Excel公式会自动生成。
    同时我们得到Address: 0,记录到地址列。这里的其他pinDefault/ModifiedVerbs等信息我们都不需要。

  3. 查找有效节点

    然后再执行命令dmesg | grep hdaaudio 得到有效节点:

       % dmesg | grep hdaudio
    [    6.890268] snd_hda_codec_realtek hdaudioC1D0: autoconfig for ALC3226: line_outs=1 (0x16/0x0/0x0/0x0/0x0) type:line
    [    6.890276] snd_hda_codec_realtek hdaudioC1D0:    speaker_outs=1 (0x14/0x0/0x0/0x0/0x0)
    [    6.890279] snd_hda_codec_realtek hdaudioC1D0:    hp_outs=1 (0x15/0x0/0x0/0x0/0x0)
    [    6.890282] snd_hda_codec_realtek hdaudioC1D0:    mono: mono_out=0x0
    [    6.890283] snd_hda_codec_realtek hdaudioC1D0:    inputs:
    [    6.890285] snd_hda_codec_realtek hdaudioC1D0:      Front Mic=0x18
    [    6.890288] snd_hda_codec_realtek hdaudioC1D0:      Dock Mic=0x19
    [    6.890290] snd_hda_codec_realtek hdaudioC1D0:      Headset Mic=0x1a
    [    6.890292] snd_hda_codec_realtek hdaudioC1D0:      Internal Mic=0x12
    

    得到有效节点为0x12, 0x14, 0x15, 0x16, 0x18, 0x19, 0x1a, 记录到Excel模板是否有效列, 有效填,无效填

  4. 查找EAPD节点 (此步骤也可以在Mac下执行)

    下一步再执行命令cat codec#0 | grep "EAPD 0x" | wc -l 得到返回值3,我们需要找到3个EAPD节点。运行vim codec#0查找EAPD所在的节点。

    % cat codec#0 | grep "EAPD 0x" | wc -l3vim codec#0:EAPD       //直接输入:EAPD回车查找,按’n'键查找下一个

    最终得到EAPD节点为0x14, 0x15, 0x16,填入Excel模板EAPD列, 有填,无填

  5. 整理有效路径 (此步骤也可以在Mac下执行)

    执行命令codecgraph codec\#0, 生成codec#0.svg,直接可以用浏览器打开,也可导入Excel。下图是我的Dell Precision M4800的路径图。

    为了方便我们导入Excel,新建一个工作表HDA Map,插入图片,将刚才生成的codec#0.svg插入到工作表HDA Map

    现在可以看到codec#0.svg节点都是十六进制,由于路径需要10进制,先将所有16进制记录到 PinConfig生成模板 Excel工作表的进制转换单元格,Excel公式HEX2DEC会一次性批量计算出对应的十进制数字备用。

    注意箭头方向,从左到右是输入到输出。所以左边麦克风>中间混响设备>右边耳机和喇叭。据此我们可以整理出声音输入路径。

     

    最终,历经以上步骤1到步骤5,我们在Excel模板里整理出以下表格.

    节点(HEX)节点(DEC)设备名称说明路径地址EAPD是否有效
    0x1218Digital Unknown Mic at Int N/A内置麦克风18>34>90
    0x13191/8 Black Speaker at Ext Rear无效0
    0x1420Analog Unknown Speaker at Int N/A内置喇叭2>12>200
    0x15211/8 Green HP Out at Ext Front左耳麦二合一3.5mm耳机插孔3>13>21, 2>12>210
    0x16221/8 Green Line Out at Ext Rear戴尔Dock底座耳机插孔2>12>22, 3>13>220
    0x1824Mic at Ext Front左耳麦麦克风插孔24>35>80
    0x19251/8 Pink Mic at Ext Rear戴尔Dock底座3.5mm麦克风插孔25>34>90
    0x1a261/8 Black Speaker at Ext Rear左耳麦二合一3.5mm麦克风插孔26>34>90
    0x1b271/8 Black Speaker at Ext Rear无效0
    0x1d29Modem Hand at Ext无效0
    0x1e301/8 Black Speaker at Ext Rear无效0

     

  6. 定制PinConfig

    Excel模板工作表PinConfig生成模板的以下几列,按照每个物理接口的实际情况,通过下拉菜单选择合适的类型(如下), 此Excel模板就会自动生成符合苹果设计规范的Final ConfigDataWakeConfigData两个参数。具体操作参见pinconfigs.xlsx。

    节点说明默认关联序列插孔颜色插孔侦测设备类型连接类型端口端口位置
    0x12内置麦克风1. Mic0.后左与后右0=Unknown1=Jack Detect Disabled [内部设备]A=Mic6=Digital9=Internal Fixed Function Device [内 置设备]0=N/A
    0x13无效F. 屏蔽0.后左与后右0=Unknown0=Jack Detect Override [外接设备]0=Line Out0=Unknow4=External No Connection [屏蔽设备]0=N/A
    0x14内置喇叭4. IntSpeaker0.后左与后右0=Unknown1=Jack Detect Disabled [内部设备]1=Speaker7=0ther Analog9=Internal Fixed Function Device [内 置设备]0=N/A
    0x15左耳麦二合一3.5mm耳机插孔5. Headphone0.后左与后右4=Green0=Jack Detect Override [外接设备]2=HeadPhone OutB=Combination0=External Jack [外 接设备]2=Front
    0x16戴尔Dock底座耳机插孔8. Line Out0.后左与后右4=Green0=Jack Detect Override [外接设备]0=Line Out1=1/8 Stereo/Mono [也即3.5mm接口]0=External Jack [外 接设备]1=Rear
    0x18左耳麦麦克风插孔2. Line In0.后左与后右2=Gray0=Jack Detect Override [外接设备]8=Line In1=1/8 Stereo/Mono [也即3.5mm接口]0=External Jack [外 接设备]2=Front
    0x19戴尔Dock底座3.5mm麦克风插孔2. Line In0.后左与后右9=Pink0=Jack Detect Override [外接设备]8=Line In1=1/8 Stereo/Mono [也即3.5mm接口]0=External Jack [外 接设备]1=Rear
    0x1a左耳麦二合一3.5mm麦克风插孔2. Line In0.后左与后右1=Black0=Jack Detect Override [外接设备]F=0therB=Combination0=External Jack [外 接设备]2=Front
    0x1b无效F. 屏蔽0.后左与后右0=Unknown0=Jack Detect Override [外接设备]0=Line Out0=Unknow4=External No Connection [屏蔽设备]0=N/A
    0x1d无效F. 屏蔽0.后左与后右0=Unknown0=Jack Detect Override [外接设备]0=Line Out0=Unknow4=External No Connection [屏蔽设备]0=N/A
    0x1e无效F. 屏蔽0.后左与后右0=Unknown0=Jack Detect Override [外接设备]0=Line Out0=Unknow4=External No Connection [屏蔽设备]0=N/A

 

至此,我们得到Final ConfigDataWakeConfigData如下:

Final ConfigData      <01271C10 01271D01 01271EA6 01271F90 01371CF0 01371D00 01371E00 01371F40 01471C40 01471D01 01471E17 01471F90 01470C02 01571C50 01571D40 01571E2B 01571F02 01570C02 01671C80 01671D40 01671E01 01671F01 01670C02 01871C20 01871D20 01871E81 01871F02 01971C20 01971D90 01971E81 01971F01 01A71C20 01A71D10 01A71EFB 01A71F02 01B71CF0 01B71D00 01B71E00 01B71F40 01D71CF0 01D71D00 01D71E00 01D71F40 01E71CF0 01E71D00 01E71E00 01E71F40>WakeConfigData    <01470C02 01570C02 01670C02>

Linux上能干的活儿我们都干完了,只待进入Mac改写AppleALC了, 因此让我们保存下我们的劳动成果,把这个Excel文件放在Mac系统也能访问的地方,重启电脑进入Mac。

 

Mac环境

 

由于我们已经成功得到了Final ConfigDataWakeConfigData,在Mac上操作就很简单了,唯一能做的事情就是改写AppleALC并编译。

  1. 同步AppleALC源码

    git clone git@github.com:acidanthera/AppleALC.git
  2. Xcode 打开AppleALC项目AppleALC.xcodeproj,根据自己的系统版本配置一下环境,测试编译通过。

  3. AppleALC/Resources/PinConfigs.kext/Contents/info.plist/IOKitPersonalities/HDAConfigDefault/下添加一组数据,新增一个原ALC292下没有用过的layout-id,我这里新增了layout-id 59.

    AFGLowPowerState  Data     <03000000>
    Codec             String   ALC 292 for Dell M4800 with Dock
    CodecID           Number   283,902,610                            //it's for ALC292
    Comment           String   ALC 292 for Dell M4800 with Dock
    ConfigData        Data     从Excel模板里生成的Final ConfigData复制过来即可
    FuncGroup         Number   1
    LayoutID          Number   59
    WakeConfigData    Data     从Excel模板里生成的Final ConfigData复制过来即可
    WakeVerbReinit    Boolean  1
    
  4. AppleALC/Resources/ALC292/Info.plist/Files/Layouts/下添加layout59.xml.zlib,同时在AppleALC/Resources/ALC292/Info.plist/Files/Platforms/下添加Platforms59.xml.zlib
    (注:此处IDlayoutid,但建议与layoutid保持一致)

    // AppleALC/Resources/ALC292/Info.plist/Files/Layouts/
    Comments    String      ALC 292 for Dell M4800 with Dock
    Id          Number      59
    Path        String      layout59.xml.zlib// AppleALC/Resources/ALC292/Info.plist/Files/Platforms/
    Comments    String      ALC 292 for Dell M4800 with Dock
    Id          Number      59
    Path        String      Platforms59.xml.zlib
    
  5. AppleALC/Resources/ALC292/路径中复制其他layout和Platforms文件改名为layout59.xmlPlatforms59.xml

  6. 根据我们前面Excel文件生成的路径, 改写 Platforms59.xml文件,填入我们自己的路径。(具体改写方法可参考其他Platforms文件的例子)

  7. 修改layout59.xml文件里的layoutidPathMapID为59。(注: PathMapID不一定需要和layoutid保持一致,但必须和AppleALC/Resources/ALC292/Info.plist/Files/Layouts/AppleALC/Resources/ALC292/Info.plist/Files/Platforms/ID保持一致)

    <key>LayoutID</key><integer>59</integer><key>PathMapID</key>
    <integer>59</integer>
  8. 自此,驱动修改已经全部完成,如果需要精简只留下你需要的声卡型号ALC292,可以删除AppleALC/Resources其他所有非ALC292的文件,同时删除AppleALC/Resources/PinConfigs.kext/Contents/info.plist/IOKitPersonalities/HDAConfigDefault/下非ALC292的几百个PinConfig配置。

  9. 编译打包,将生成的AppleALC.kext替换掉/EFI/OC/Kexts/下原来的驱动, 重启测试成功。

 

转载自我的github

 

致谢

 

部分参考黑果小兵的部落阁


http://www.ppmy.cn/news/319232.html

相关文章

用动漫之家下载的漫画在哪里

此电脑\Honor 9\内部存储\Android\data\com.dmzj.manhua\files\dmzj\DownLoad 良心软件, 不做任何加密 有些随时会被和谐的内容,要养成经常下载的习惯

介绍2个在线看漫画,小人书网站

热血漫画 http://www.jumpcn.com.cn 28lu连环画 http://www.28lu.com/ 转载于:https://blog.51cto.com/freebird/552624

写本子不错的素材积累

1.xx has solidified its status as a communication powerhouse through engineering and technology education and knowledge transfer via the presentation of demand, research directions, and major research results. 通过工程技术教育和知识转移&#xff0c;通过提出…

【水汐のpython】 用python抓取外网的本子站并获取本子封面和信息

放假了正事不干&#xff0c;天天闲着ghs&#xff0c;顺便记录下吧 头文件祖传的实际上没用到那么多&#xff0c;看着加吧 import datetime import socketserver import time from json import loads from xml import etree import requests #禁用安全请求警告pip install requ…

论如何科学的看小本子

看本子的问题一直困扰着很多人&#xff0c;有些需要注册&#xff0c;有些没有资源&#xff0c;有些广告很多。 这里&#xff0c;推荐一款用起来比较好的本子应用。 大概长这个样子 这个东西怎么用&#xff1f;我不知道。 这个东西能干什么&#xff1f;我也不知道。 但是&am…

绅士导航-集合樱花动漫,AGE动漫等动漫网站 动漫软件最新可用地址

绅士导航LOGO 绅士导航网址&#xff1a;http://www.s8d.net/ 绅士导航栏目&#xff1a; 动画资源-漫画资源-游戏资源&#xff08;galgame&#xff0c;PC游戏&#xff0c;单机游戏等&#xff09; 美图分享&#xff08;cosplay等&#xff09;-动漫资讯 绅士导航主要是收集整理目前…

我的新本子

我的新本子 终于买新电脑了~~ 日思月想&#xff0c;终于有了自己的笔记本&#xff0c;可以干一些自己想干的事了~~我的新本本的型号是联想Z501&#xff0c;cpu&#xff1a;i5-3230M&#xff0c;内存&#xff1a;4G&#xff0c;硬盘&#xff1a;500G&#xff0c;显卡&#xff1…

有哪些漫画在线观看?最好是好看的完结漫画

在线漫画就是指把原有的漫画书籍以图片加文字的形式绘画出来&#xff0c;再连载于各大漫画网站或者漫画软件上&#xff0c;漫画在线观看&#xff0c;不用下载。而现在好看的漫画太多了&#xff0c;有些漫画是新番&#xff0c;有些漫画是完结作品。机智的我&#xff0c;当然是要…