ALSA: hda - Skip pin capability sanity check for bogus values
Some old codecs like ALC880 seem to give a bogus pin capability value 0
occasionally. This breaks the new sanity check in snd_hda_set_pin_ctl().
Skip the sanity checks in such a case.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
index 8b8b74a..408613c 100644
--- a/sound/pci/hda/hda_codec.c
+++ b/sound/pci/hda/hda_codec.c
@@ -4827,14 +4827,14 @@
{
if (val) {
unsigned int cap = snd_hda_query_pin_caps(codec, pin);
- if (val & AC_PINCTL_OUT_EN) {
+ if (cap && (val & AC_PINCTL_OUT_EN)) {
if (!(cap & AC_PINCAP_OUT))
val &= ~(AC_PINCTL_OUT_EN | AC_PINCTL_HP_EN);
else if ((val & AC_PINCTL_HP_EN) &&
!(cap & AC_PINCAP_HP_DRV))
val &= ~AC_PINCTL_HP_EN;
}
- if (val & AC_PINCTL_IN_EN) {
+ if (cap && (val & AC_PINCTL_IN_EN)) {
if (!(cap & AC_PINCAP_IN))
val &= ~(AC_PINCTL_IN_EN | AC_PINCTL_VREFEN);
}