Идентифицировать элемент, запрашивающий звуковой чип для сна

Спустя несколько месяцев звук внезапно останавливается на моем ноутбуке через некоторое время. Мой компьютер - Toshiba 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 показывает, что звук звука не передается звуковым драйвером при отключении звука:

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?

2
задан 7 May 2017 в 22:36

2 ответа

На самом деле это происходит из-за перегрева звукового чипа.

Правильное аппаратное исправление приложит к звуковому чипу небольшой радиатор.

Для чипа есть программное обеспечение, которое задерживает перегрев. Я передал команду в спутник Toshiba моей сестры /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
2
ответ дан 18 July 2018 в 13:40

На самом деле это происходит из-за перегрева звукового чипа.

Правильное аппаратное исправление приложит к звуковому чипу небольшой радиатор.

Для чипа есть программное обеспечение, которое задерживает перегрев. Я передал команду в спутник Toshiba моей сестры /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
2
ответ дан 24 July 2018 в 20:14
  • 1
    Я попробовал свой вариант и несколько других, но, к сожалению, в моем случае ничего не работает: power_save=1, power_save=10 или даже power_save=10 power_save_controller=N. (Вместо того, чтобы помещать его в /etc/rc.local, я только что отредактировал файл /etc/modprobe.d/alsa-base.conf, добавив options snd-hda-intel power_save=10 power_save_controller=N в конец и каждый раз перезагружаясь) – dohseven 8 May 2017 в 17:01
  • 2
    Почему бы вам не попробовать это так, как я предложил, и посмотреть, работает ли это для вас? В противном случае рассмотрим аппаратное исправление. – heynnema 8 May 2017 в 17:16
  • 3
    Я дважды проверил: put options snd-hda-intel power_save=1 в /etc/modprobe.d/alsa-base.conf делает то же, что и echo "1" > /sys/module/snd_hda_intel/parameters/power_save. В обоих случаях чтение /sys/module/snd_hda_intel/parameters/power_save дает 1. – dohseven 8 May 2017 в 17:44

Другие вопросы по тегам:

Похожие вопросы: