How to disable power saving on my Lenovo Y50's subwoofer audio pins?
In addition to setting the power state to D0 for pins 0x17 and 0x1a, try increasing the output volume of node 0x3 (AUD_OUT).
Tested on the same laptop model running debian testing, the subwoofer is now working.
A simple way to test it is to plug in you earphones, the subwoofer won't be muted.
With help from debianuser
in the #alsa IRC channel on freenode, I think I might have gotten us a little closer. It seems the power states can be set with the hda_verb tool, which is a part of alsa-tools, however there doesn't seem to be an option to control power_save_controller
specifically, only power state
. You can get info on what parameters
can be set by running hda-verb -L
Example getting the power state of a device:
sudo hda-verb /dev/snd/hwC1D0 0x1a GET_POWER POWER_STATE
Example setting the power state of a device:
sudo hda-verb /dev/snd/hwC1D0 0x17 SET_POWER 0x0 POWER_STATE
So specifically what you seem to need to do is run:
sudo hda-verb /dev/snd/hwC1D0 0x17 SET_POWER 0x0
sudo hda-verb /dev/snd/hwC1D0 0x1a SET_POWER 0x0
Note that this won't work while HDA Analyzer is running, but it can be launched afterwards to verify if the change worked. It did in my case change it to D0.
I wonder if that solves your problem?
As said I have the same computer, though I'm not entirely sure whether my subwoofer is actually off, as I can't hear much of a difference from an example sound file I created when played back in Windows or Archlinux. Maybe the frequency (65 hz) is too high? In case anyone else wants to test it:
http://miyalys.eu.org/files/65hzsine.wav
Maybe we can find a way to disable the regular speakers so only the subwoofer is on?
Edit: With the help from leneb's answer, I created this script that must be run as root, which does all of these things, only using hda-verb. Not sure the volume level is entirely sane, though. (feedback appreciated) And the problem with headphones being plugged in, not silencing the subwoofer, persists.
#! /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
If necessary all those steps can also be done without hda-verb, only using python, but it would make the code much less clean.