几个月以来,一段时间后我的笔记本电脑上的声音突然停止了。我的电脑是东芝 Satellite L755,配有 Conexant CX20585 声音芯片,运行 Ubuntu 17.04。
我发现这是由于声音芯片处于睡眠状态造成的,正如解释的那样这里。
当声音起作用时,读数/proc/asound/card0/codec\#0
显示:
Codec: Conexant CX20585
Address: 0
AFG Function Id: 0x1 (unsol 1)
Vendor Id: 0x14f15069
Subsystem Id: 0x1179fc50
Revision Id: 0x100302
[...]
Node 0x1f [Pin Complex] wcaps 0x400501: Stereo
Pincap 0x00000010: OUT
Pin Default 0x92170110: [Fixed] Speaker at Int Front
Conn = Analog, Color = Unknown
DefAssociation = 0x1, Sequence = 0x0
Misc = NO_PRESENCE
Pin-ctls: 0x40: OUT
Power states: D0 D1 D2 D3 D3cold EPSS
Power: setting=D0, actual=D0
当声音不工作时,它会显示:
Node 0x1f [Pin Complex] wcaps 0x400501: Stereo
Pincap 0x00000010: OUT
Pin Default 0x92170110: [Fixed] Speaker at Int Front
Conn = Analog, Color = Unknown
DefAssociation = 0x1, Sequence = 0x0
Misc = NO_PRESENCE
Pin-ctls: 0x40: OUT
Power states: D0 D1 D2 D3 D3cold EPSS
Power: setting=D3, actual=D3
因此,问题在于节点 0x1f 被设置为电源状态 D3。正如我在上一个链接中发现的那样,我可以使用命令将其恢复到电源状态 D0 sudo hda-verb /dev/snd/hwC0D0 0x1f SET_POWER_STATE 0
。然后声音又恢复了,但只能持续几分钟。
跟踪 hda 事件echo 1 > /sys/kernel/debug/tracing/events/hda/enable
表明,当声音中断时,声音驱动程序没有发送任何 hda 事件:
cat /sys/kernel/debug/tracing/trace
# tracer: nop
#
# entries-in-buffer/entries-written: 20/20 #P:4
#
# _-----=> irqs-off
# / _----=> need-resched
# | / _---=> hardirq/softirq
# || / _--=> preempt-depth
# ||| / delay
# TASK-PID CPU# |||| TIMESTAMP FUNCTION
# | | | |||| | |
alsa-sink-CX205-2584 [001] d... 240.469929: snd_hdac_stream_stop: stream_tag: 5
hda-verb-3617 [003] .... 257.329599: hda_send_cmd: [0000:00:1b.0:0] val=0x01f70500
hda-verb-3617 [003] .... 257.329672: hda_get_response: [0000:00:1b.0:0] val=0x00000000
alsa-sink-CX205-2584 [001] .... 279.844834: hda_send_cmd: [0000:00:1b.0:0] val=0x010a0000
alsa-sink-CX205-2584 [001] .... 279.844888: hda_get_response: [0000:00:1b.0:0] val=0x00004011
alsa-sink-CX205-2584 [001] .... 279.855672: hda_send_cmd: [0000:00:1b.0:0] val=0x01020011
alsa-sink-CX205-2584 [001] .... 279.855722: hda_get_response: [0000:00:1b.0:0] val=0x00000000
alsa-sink-CX205-2584 [001] .... 279.855725: hda_send_cmd: [0000:00:1b.0:0] val=0x011a0000
alsa-sink-CX205-2584 [001] .... 279.855758: hda_get_response: [0000:00:1b.0:0] val=0x00004011
alsa-sink-CX205-2584 [001] .... 279.867648: hda_send_cmd: [0000:00:1b.0:0] val=0x01120011
alsa-sink-CX205-2584 [001] .... 279.867701: hda_get_response: [0000:00:1b.0:0] val=0x00000000
alsa-sink-CX205-2584 [001] d... 279.867829: snd_hdac_stream_start: stream_tag: 5
alsa-sink-CX205-2584 [001] d... 297.821668: snd_hdac_stream_stop: stream_tag: 5
[Set sound on with hda-verb]
hda-verb-3649 [002] .... 300.602038: hda_send_cmd: [0000:00:1b.0:0] val=0x01f70500
hda-verb-3649 [002] .... 300.602087: hda_get_response: [0000:00:1b.0:0] val=0x00000000
[Start/stop a Youtube video]
alsa-sink-CX205-2584 [001] d... 312.264676: snd_hdac_stream_start: stream_tag: 5
alsa-sink-CX205-2584 [001] d... 376.447668: snd_hdac_stream_stop: stream_tag: 5
alsa-sink-CX205-2584 [001] d... 389.212522: snd_hdac_stream_start: stream_tag: 5
alsa-sink-CX205-2584 [001] d... 405.072648: snd_hdac_stream_stop: stream_tag: 5
alsa-sink-CX205-2584 [001] d... 410.938035: snd_hdac_stream_start: stream_tag: 5
[Sound cuts]
我尝试使用内核选项进行启动,"acpi=off"
以检查 ACPI 是否与此问题有关,因为这个错误建议这可能是由于电源管理过于激进造成的。但是在没有 ACPI 的情况下,声音在一段时间后仍然会中断。
因此,声音芯片被另一个我无法找到的元件置于休眠状态,只能通过更改引脚的电源状态来做到这一点。有什么办法可以识别它吗?可能是 BIOS 吗?
答案1
这其实是因为声音芯片过热造成的。
适当的硬件修复会将一个小的散热器连接到声音芯片上。
芯片上有一个软件可以延迟过热。我把命令输入了我姐姐的东芝 Satellite /etc/rc.local
。我必须联系她才能获得命令,因为我记不清了。一旦我了解详细信息,我会立即更新此答案。
更新:
# turn on power management for audio codec
# to solve loosing sound after a few minutes
echo "1" > /sys/module/snd_hda_intel/parameters/power_save