aboutsummaryrefslogtreecommitdiffstats
path: root/sound
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2015-06-25 02:48:54 -0400
committerTakashi Iwai <tiwai@suse.de>2015-06-25 02:48:54 -0400
commit735c75cf4d434862e38c01dcfb2ce8d2fcb9035f (patch)
treeda0331480de9fbf5b68ab480969e252fe49325ef /sound
parentec56af67a10a0d82b79027878a81fce08d002d50 (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.c8
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;