![我的 ALSA 内核补丁中缺少什么才能让 EAPD 正确关闭此内部扬声器?](https://linux22.com/image/139893/%E6%88%91%E7%9A%84%20ALSA%20%E5%86%85%E6%A0%B8%E8%A1%A5%E4%B8%81%E4%B8%AD%E7%BC%BA%E5%B0%91%E4%BB%80%E4%B9%88%E6%89%8D%E8%83%BD%E8%AE%A9%20EAPD%20%E6%AD%A3%E7%A1%AE%E5%85%B3%E9%97%AD%E6%AD%A4%E5%86%85%E9%83%A8%E6%89%AC%E5%A3%B0%E5%99%A8%EF%BC%9F%20.png)
我正在使用由已故的 OpenPeak Inc. 制造的类似相框的设备,称为 OpenFrame(在英国称为 O2 Joggler)。它有一个内置扬声器和一个 3.5mm 线路输出插座;其 STAC9202 编解码器芯片的其他连接均不会向最终用户公开。我已经将 Ubuntu Bionic 移植到设备上,除了音频驱动程序之外,一切都已完成。
回到内核 3.18,可以使用以下内核补丁和用户态 ALSA 补丁来使这两个输出正常工作,将插头插入线路输出,使内部扬声器正确静音。
在内核 4.14 中,同样的技巧不再起作用,因此我重写了补丁,以更正确地向 ALSA 添加对 STAC9202 变体的支持。现在看起来像这样:
这似乎正确地排列了引脚配置,但是当将插头插入线路输出时,尽管内部扬声器的音频被静音,但每当设备正在处理时扬声器都会发出噼啪声。它似乎没有被正确断电,并且放大了一般电路噪声。拔下插头后,内部扬声器就会恢复声音,并且爆裂声会停止。这在多个设备上都是可靠的。
这是来自 crackling kernel 4.14 和working-just-fine kernel 3.18 的 alsa-info 输出。
我对 ALSA 驱动程序和补丁没有足够的了解,并且多年来一直纯粹根据其他人使用的配置进行工作,因此我非常感谢有人查看 alsa-info 输出和新补丁来确定我应该去哪里从这里。我相信这都与 EAPD 控制有关,但我现在不知道有哪些控制选项。
理想情况下,我希望在插入插孔时能够正确地实现音频静音和切换。一个好处是失去 alsamixer 中未使用的(或至少无法访问的)音频输入和输出选项,并获得对内部扬声器和线路输出电平的单独控制(目前似乎是配对在一起的)。