尊敬的社区:
希望一切都好在你的终点
我最近从 Lenovo ( Legion Gen8 16IRX8H )购买了一台笔记本电脑, 该笔记本电脑在 Linux 用户中没有声音支持。
多亏了 I2C、我相信我找到了一个由德州仪器制造的设备:
/sys/bus/i2c/devices/i2c-TIAS2781:00/
此智能放大器是 TAS2781,它已经支持 ALSA SoC git.ti.com/.../ ,但在 Linux x86/x86_64上无法使用。
tas2781在这台笔记本电脑中与 Realtek (ALC287)编解码器连接。 遗憾的是,Lenovo BIOS 不包含使 Realtek 编解码器与 AMP 芯片通信的正确信息(它遗漏了 init verbs 表),因此需要对 Realtek 驱动程序进行大量的重新设计。
据我所知, 在当前 Linux 内核源代码中有一个名为 patch_Realtek.c 的文件,特别是 sound/pi/hda/patch_Realtek.c。 该文件有一个与 sd_pci_quirk 固定的主板来修复许多笔记本电脑/台式机的扬声器。 例如、包含使用 Cirrus AMP 的特定笔记本电脑的补丁的行如下所示:
SND_PCI_QUIRK (0x17aa、 0x3874、 "Legion 7 16IAX7"、ALC287_fixup_CS35L41_I2C_2 )、
我采用了与我的 alsa-infohttp://alsa-project.org/db/?f=ed0116e9d7235fd5cbece5dccaa589ecad71f534 和 DSDT 表(可在此处找到 https://bugzilla.kernel.org/attachment.cgi?id=303959)相匹配的(0x17aa、0x3884)、其摘录如下:
{
器件(SPKR)
{
名称(_HID、"TIAS2781") //_HID:硬件 ID
名称(_UID、零) //_UID:唯一的 ID
方法(_sub、0、NotSerialized) //_sub: subsystem ID
{
如果((SPID => 0))
{
返回("17AA3886")
}
如果((SPID == one))
{
返回("17AA3884")
}
}