Como desativar a economia de energia nos pinos de áudio do subwoofer do meu Lenovo Y50?

3

Follow-up de: Como Faço o subwoofer do meu Lenovo Y50 funcionar no linux?

Para reduzir as coisas, eu tenho um Lenovo Y50 que tem um subwoofer integrado, que só funciona no Linux Mint se eu definir algumas configurações em dois pinos usando o HDA Analyzer. A mesma solução não funciona no Fedora e em outras distribuições. Mais informações no link acima.

Eu tive algum tempo para investigar um pouco mais e notei que há diferenças no que as guias de despejo de texto do HDA Analyzer me dizem para cada um dos pinos, em cada uma das distribuições (Linux Mint à esquerda, Fedora à direita) :

EuaprendiqueD0significaestadodeenergiatotaleD3significaestadodebaixaenergia.Eupesquiseisobrecomodesativarcompletamenteaeconomiadeenergianaminhaplacadeáudio,entãoeutenteioseguintenoFedora,inserindonoterminaletestandoantesedepoisdareinicialização,masissonãoresolveuomeuproblema:

echo0>/sys/module/snd_hda_intel/parameters/power_save

echoN>/sys/module/snd_hda_intel/parameters/power_save_controller

EutambémtenteiativaraeconomiadeenergianoLinuxMinterealmentedesabilitarosubwooferantesdereinicializar(eaindaestavadesabilitadoapósareinicialização).

Gostariadesabersealguémtemalgumaidéiasobrecomotentarmaisealternaroestadodeenergianessesdoispinos(0x17e0x1a)deD3paraD0parafazerosomdesaídadomeusubwoofer.Obrigada!

EDIT:Aquiestáumasoluçãobaseadaemumscriptpythonfeitopormim aqui . Não desconsidere as respostas abaixo que ajudaram (obrigado novamente!).

    
por Dragoș 19.09.2015 / 14:27

2 respostas

3

Além de definir o estado de energia como D0 para os pinos 0x17 e 0x1a, tente aumentar o volume de saída do nó 0x3 (AUD_OUT).

Testado no mesmo modelo de laptop executando o teste Debian, o subwoofer agora está funcionando.

Uma maneira simples de testá-lo é conectando seus fones de ouvido, o subwoofer não será silenciado.

    
por 20.09.2015 / 10:34
3

Com a ajuda de debianuser no canal de IRC #alsa em freenode, acho que poderia ter nos aproximado um pouco mais. Parece que os estados de energia podem ser definidos com a ferramenta hda_verb, que é parte de alsa-tools, no entanto, parece não haver uma opção para controlar power_save_controller especificamente, apenas power state . Você pode obter informações sobre o parameters que pode ser definido executando hda-verb -L

Exemplo obtendo o estado de energia de um dispositivo:

sudo hda-verb /dev/snd/hwC1D0 0x1a GET_POWER POWER_STATE

Exemplo configuração do estado de energia de um dispositivo:

sudo hda-verb /dev/snd/hwC1D0 0x17 SET_POWER 0x0 POWER_STATE

Então, especificamente, o que você parece precisar fazer é executar:

sudo hda-verb /dev/snd/hwC1D0 0x17 SET_POWER 0x0
sudo hda-verb /dev/snd/hwC1D0 0x1a SET_POWER 0x0

Observe que isso não funcionará enquanto HDA Analyzer estiver em execução, mas pode ser ativado posteriormente para verificar se a alteração funcionou. No meu caso, alterei para D0.

Eu me pergunto se isso resolve o seu problema?
Como disse, eu tenho o mesmo computador, embora eu não esteja inteiramente certo se meu subwoofer está realmente desligado, já que não consigo ouvir muita diferença de um arquivo de som de exemplo que eu criei quando reproduzido no Windows ou Archlinux. Talvez a frequência (65 hz) seja alta demais? Caso alguém mais queira testá-lo: link

Talvez possamos encontrar uma maneira de desativar os alto-falantes normais para que apenas o subwoofer esteja ativado?

Editar: Com a ajuda da resposta do leneb , criei este script que deve ser executado como root, que faz todas essas coisas, usando apenas o hda-verbo. Não tenho certeza se o volume está totalmente são, no entanto. (feedback apreciado) E o problema com fones de ouvido sendo conectados, não silenciando o subwoofer, persiste.

#! /usr/bin/env sh

# Run this script as root!

dev="/dev/snd/hwC1D0"

hda-verb $dev 0x17 SET_POWER 0x0
hda-verb $dev 0x1a SET_POWER 0x0
hda-verb $dev 0x03 0x300 0xa055
hda-verb $dev 0x03 0x300 0x9055
hda-verb $dev 0x17 0x300 0xb000
hda-verb $dev 0x17 0x707 0x40
hda-verb $dev 0x1a 0x707 0x25

Se necessário, todas essas etapas também podem ser feitas sem o hda-verbo, usando apenas o python, mas isso tornaria o código muito menos limpo.

    
por 19.09.2015 / 23:51