diff options
author | Takashi Iwai <tiwai@suse.de> | 2015-06-25 02:48:54 -0400 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2015-06-25 02:48:54 -0400 |
commit | 735c75cf4d434862e38c01dcfb2ce8d2fcb9035f (patch) | |
tree | da0331480de9fbf5b68ab480969e252fe49325ef /sound | |
parent | ec56af67a10a0d82b79027878a81fce08d002d50 (diff) |
ALSA: hda - Disable widget power-save for VIA codecs
The widget power-save that was enabled in 4.1 kernel seems resulting
in the silent output on VIA codecs by some reason. Some widgets get
wrong power states.
As a quick fix, turn this flag off while keeping power_down_unused
flag. This will bring back to the state of 4.0.x.
Fixes: 688b12cc3ca8 ('ALSA: hda - Use the new power control for VIA codecs')
Reported-and-tested-by: Harald Dunkel <harri@afaics.de>
Cc: <stable@vger.kernel.org> # v4.1
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound')
-rw-r--r-- | sound/pci/hda/patch_via.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/sound/pci/hda/patch_via.c b/sound/pci/hda/patch_via.c index 0521be8d46a8..da5366405eda 100644 --- a/sound/pci/hda/patch_via.c +++ b/sound/pci/hda/patch_via.c | |||
@@ -241,7 +241,9 @@ static int via_pin_power_ctl_get(struct snd_kcontrol *kcontrol, | |||
241 | struct snd_ctl_elem_value *ucontrol) | 241 | struct snd_ctl_elem_value *ucontrol) |
242 | { | 242 | { |
243 | struct hda_codec *codec = snd_kcontrol_chip(kcontrol); | 243 | struct hda_codec *codec = snd_kcontrol_chip(kcontrol); |
244 | ucontrol->value.enumerated.item[0] = codec->power_save_node; | 244 | struct via_spec *spec = codec->spec; |
245 | |||
246 | ucontrol->value.enumerated.item[0] = spec->gen.power_down_unused; | ||
245 | return 0; | 247 | return 0; |
246 | } | 248 | } |
247 | 249 | ||
@@ -252,9 +254,9 @@ static int via_pin_power_ctl_put(struct snd_kcontrol *kcontrol, | |||
252 | struct via_spec *spec = codec->spec; | 254 | struct via_spec *spec = codec->spec; |
253 | bool val = !!ucontrol->value.enumerated.item[0]; | 255 | bool val = !!ucontrol->value.enumerated.item[0]; |
254 | 256 | ||
255 | if (val == codec->power_save_node) | 257 | if (val == spec->gen.power_down_unused) |
256 | return 0; | 258 | return 0; |
257 | codec->power_save_node = val; | 259 | /* codec->power_save_node = val; */ /* widget PM seems yet broken */ |
258 | spec->gen.power_down_unused = val; | 260 | spec->gen.power_down_unused = val; |
259 | analog_low_current_mode(codec); | 261 | analog_low_current_mode(codec); |
260 | return 1; | 262 | return 1; |