识别请求声音芯片睡眠的元素

几个月后,声音在一段时间后突然停在我的笔记本电脑上。 我的电脑是带有Conexant CX20585声音芯片的东芝Satellite L755,运行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 

因此,在功率状态D3中设置的节点0x1f是问题。 正如我在上一个链接中发现的那样,我可以使用命令sudo hda-verb /dev/snd/hwC0D0 0x1f SET_POWER_STATE 0将其恢复到电源状态D0。 声音然后回来,但只有几分钟。

使用echo 1 > /sys/kernel/debug/tracing/events/hda/enable hda事件表明声音驱动器在声音切断时没有发送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吗?

这实际上是因为声音芯片过热。

适当的硬件修复会将一个小散热片连接到声音芯片上。

芯片有一个软件戳可以延迟过热。 我将命令放入我姐姐的东芝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