On Fri, 09 Mar 2018 08:56:08 +0100, Jorge Fernandez Monteagudo wrote:
Hi all!
I've updated my system from a 3.16.7 kernel to a 4.14.24 kernel and sound stops working.
I have a Cirrus logic CS4207 codec. I've tracked down the problem using the '/proc/asound/card0/codec#0'
info. With the 3.16.7 kernel all nodes power states are:
Node 0x03: Power: setting=D0, actual=D0 Node 0x0a: Power: setting=D0, actual=D0
and with 4.14.24 they are on
Node 0x03: Power: setting=D0, actual=D3 Node 0x0a: Power: setting=D3, actual=D3
And what nodes are these? At best, please give alsa-info.sh output.
Once in this situation I'm able to go to D0 again and make the sound works. I've used hda-verb 0.4 to SET_POWER_STATE to 0 with no luck. Finally, I've patched the 4.14.24 to avoid changing to D3 and now the sound is working again. I know it's not the way to go but I need the sound...
It's the feature of power-saving, and can be turned off by passing the hint via "patch" firmware. If you can compile, the easiest way would be the oneliner like:
--- a/sound/pci/hda/patch_cirrus.c +++ b/sound/pci/hda/patch_cirrus.c @@ -589,7 +589,7 @@ static struct cs_spec *cs_alloc_spec(struct hda_codec *codec, int vendor_nid) return NULL; codec->spec = spec; spec->vendor_nid = vendor_nid; - codec->power_save_node = 1; + // codec->power_save_node = 1; snd_hda_gen_spec_init(&spec->gen);
return spec;
If the widgets 0x03 and/or 0x0a have to be always turned on, we can keep them on. There are several ways to do that.
Takashi