This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TAS2781:TAS2781 - Linux 内核补丁和关于在节能模式下更改 TIAS2781RCA2.bin 固件的问题/建议

Guru**** 2782615 points

Other Parts Discussed in Thread: TAS2781

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1610979/tas2781-tas2781---linux-kernel-patch-and-question-suggestion-for-tias2781rca2-bin-firmware-change-for-power-saving-mode

器件型号: TAS2781

大家好、我是 Arch Linux 用户、刚刚有一个适用于 TAS2781 音频子系统的内核补丁。 我对此有一些信息、以防它有用、以及有关固件中节能模式的问题/建议。

下面是我的补丁、如果能够通过测试、它将从 6.19 开始出现在内核中:

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/diff/sound/hda/codecs/realtek/alc269.c?id=v6.19-rc7&id2=v6.19-rc6

此更改会针对 PCI SSID 0x17aa3843 和子系统 ID 0x17aa3881 的组合启用 ALC287_fixup_TAS2781 _I2C 固定。 从我对 ALSA cardinfo 数据库的分析来看,这看起来应该只适用于联想瑜伽书 9i 13IRU8 模型,但我认为这里的人可能会欣赏头部,以防可能有任何副作用。

之前、我们拿起 PCI SSID 0x17aa3843 并应用 ALC287_fixup_IdeaPad_Bass_SPK_AMP。 不幸的是,固定对我的机器没有影响。 从查看这里的帖子, Reddit 和 Linux 支持论坛我怀疑一些类似的事情正在发生与其他联想笔记本电脑由于 PCI SSID 的重复使用,导致混淆关于哪些怪癖/固定应用.

我的内核补丁立即产生了出色的音质,通过 EasyEffects / JamesDSP 进行进一步调整,它很容易与 Windows 下的性能相媲美 — 如果不是稍好一些:-)

但是、经过一段时间后、TAS2781 会再次断电...

我找到了一些论坛帖子和人们发布的 HOWTO、他们讨论了用“00 00 5c 19“替换固件中“00 00 5c D9“的所有实例、这显然会将硬断电转换为软复位。 这似乎对我有效,在十六进制编辑 TIAS2781RCA2.bin 文件作为 Arch Linux-Firmware-other 包的一部分分发后。

如果 TI 工程师能从您的角度确认此次固件更改是可以安全进行的、我们将不胜感激。

我应该说、我还尝试了将该器件的 I2C 电源/控制设置从默认(自动)更改为“打开“和“关闭“、但据我所知、这没有影响...

echo on > /sys/bus/i2c/drivers/tas2781-hda/i2c-TIAS2781\:00/power/control

假设我所描述的固件更改没有问题、 我想知道您是否可以考虑更新 Linux TIAS2781RCA2.bin 固件以将软关机行为设置为默认值? 进入电源控制设置的底部也会很好、尽管我怀疑我在这里做了一些错误、因为我只是在学习所有这些内容。

对于任何阅读此帖子并希望在自己的计算机上重现的人 — 应用了我的 ALC269.c 补丁并且没有与声音相关的内核命令行或 modprobe 选项、内核默认选择 HDA 路径、但也加载一些 SOF 模块以支持 DMIC 数字麦克风。 这似乎可以正常工作、但有点令人困惑、因此我选择了通过设置以下 modprobe 选项以纯 SOF 模式运行:

snd_intel_dspcfg dsp_driver=3
blacklist snd_hda_intel

希望这个信息是有用的,并提前感谢任何想法!

谢谢、

Martin

PS FYI 我也正在起草一个 ArchWiki 条目,这将尝试提取所有这些学习到一些民间智慧,并希望对未来的 Linux 用户尝试得到这些非常令人印象深刻的音频芯片/扬声器子系统的底部有用。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Matin:  

    伟大的写.

    我发现一些讨论描述了你提到的解决方法 GitHub - darinpp/yoga-slim-7:联想瑜伽 Slim 7 的一些信息、脚本等

    从器件角度来看、设置寄存器 0x5c = 0x19 是 可以的。  

    我将与我们的 Linux 支持团队分享这一点、  

    此致、
    Arthur

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    非常感谢、Arthur — 这是很好的了解! 您提到的存储库是我遇到电源控制建议的存储库。

    我认为可能还有几台机器会从应用固定装置中受益。 当我有一些空闲时间时、我打算再次遍历相关线程、并对照 TAS2781 的内核查询和修复进行交叉参考、以防出现其他一些特殊情况。

    谢谢、

    Martin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Martin。

    很高兴为您提供支持。 我已经使用 RCA 解析工具来分析您的  TIAS2781RCA2.bin。 下面是工具链接

    Parser«toolset«regbin - tas2781-linux-drivers/tas2781-linux-driver - Unnamed repository;编辑此文件“description"以“以命名存储库。

    e2e.ti.com/.../TIAS2781RCA2.bin.log

    Kiundly 检查  您的设备中是否调用了 sound/hda/codecs/side-codecs/tas2781_hda_i2c.c 中的 tas2781_hda_playback_hook ()。

    tasdevice_tuning_switch() 是在 sound/modecs/tas2781-fmwlib.c soc 
    祝你好运!

    BR
    丁胜豪
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的、我在 switch 语句中添加了一些调试代码、以确保其采用的路径为:

    --../../../tas2781_hda_i2c.c.orig 2026年01月28日 10:37:00.886246880 +0000
    ++ Linux-6.18.5/sound/hda/codecs/side-codecs/tas2781_hda_i2c.c 2026年01月28日 10:39:50.989571126 +0000
    @@–170,6 +170,7 @@
    dev_dbg(tas_hda->dev、“%s":“:操作=%d\n“、__func__,操作);
    开关(操作){
    案例 HDA_GEN_PCM_ACT_OPEN:
    + dev_dbg (TAS_hda->dev、“HDA_GEN_PCM_ACT_OPEN_")“);
    PM_RUNTIME_GET_SYNC (dev);
    Scopeed_guard(互斥量,&TAS_hda->priv->codec_lock){
    tasdevice_tuning_switch (TAS_hda->priv、0);
    @@–177,6 +178,7 @@
    }
    休息;
    案例 HDA_GEN_PCM_ACT_CLOSE:
    + dev_dbg (TAS_hda->dev、“HDA_GEN_PCM_ACT_CLOSE")“);
    Scopeed_guard(互斥量,&TAS_hda->priv->codec_lock){
    tasdevice_tuning_switch(tas_hda->priv, 1);
    tas_hda->priv->replaying_started = false;

    并通过 debugfs 激活该源文件的调试:

    echo "file tas2781_hda_i2c.c +p" >/sys/kernel/debug/dynamic_debug/control

    下面是我得到的当我停止播放 YouTube 视频,然后开始播放它几分钟后再次...  

    Jan 28 22:22:25 软盘内核:tas2781-hda i2c-TIAS2781:00: tas2781_hda_playback_hook:操作= 2.
    Jan 28 22:22:25 软盘内核:tas2781-hda i2c-TIAS2781:00: tas2781_hda_playback_hook:操作= 3.
    Jan 28 22:22:25 软盘内核:tas2781-hda i2c-TIAS2781:00:hda_GEN_PCM_ACT_close
    Jan 28 22:22:29 软盘内核:tas2781-hda i2c-TIAS2781:00:运行时暂停
    Jan 28 22:24:14 软盘内核:tas2781-hda i2c-TIAS2781:00: tas2781_hda_playback_hook:操作= 0
    Jan 28 22:24:14 软盘内核:tas2781-hda i2c-TIAS2781:00: hda_GEN_PCM_ACT_open
    Jan 28 22:24:14 软盘内核:tas2781-hda i2c-TIAS2781:00:运行时恢复
    Jan 28 22:24:14 软盘内核:tas2781-hda i2c-TIAS2781:00: tas2781_hda_playback_hook:操作= 1.

    这是否与您期望看到的相符、 Shenghao?

    PS 在相关情况下、这是根据之前的消息对固件进行 hexedit。 声音子系统完全是 SOF(HDA 阻塞)、并使用管道线作为媒体服务器。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    日志似乎还可以。 在运行时暂停模式下、TAS2781 已关断。

    您还可以在运行时暂停时转储 TAS2781 寄存器、以便进一步确认是否设置了 SHUTDOWN 位。

    以下脚本可以帮助您转储 book0page0 寄存器。

    e2e.ti.com/.../2pa_2D00_dumpbook0page0.sh

    祝你好运