Sfoglia il codice sorgente

ALSA: hda - Check NO_PRESENCE pincfg default bit

HD-audio spec defines a bit in pin default configuration for indicating
that the pin isn't used for jack-detection although the codec is capable
of it.  Better to check this bit as well in jack_is_detectable() helper
function.

Reported-by: Raymond Yau <superquad.vortex2@gmail.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Takashi Iwai 13 anni fa
parent
commit
08a1f5eb43
1 ha cambiato i file con 4 aggiunte e 0 eliminazioni
  1. 4 0
      sound/pci/hda/hda_local.h

+ 4 - 0
sound/pci/hda/hda_local.h

@@ -442,6 +442,8 @@ struct auto_pin_cfg {
 	(cfg & AC_DEFCFG_SEQUENCE)
 	(cfg & AC_DEFCFG_SEQUENCE)
 #define get_defcfg_device(cfg) \
 #define get_defcfg_device(cfg) \
 	((cfg & AC_DEFCFG_DEVICE) >> AC_DEFCFG_DEVICE_SHIFT)
 	((cfg & AC_DEFCFG_DEVICE) >> AC_DEFCFG_DEVICE_SHIFT)
+#define get_defcfg_misc(cfg) \
+	((cfg & AC_DEFCFG_MISC) >> AC_DEFCFG_MISC_SHIFT)
 
 
 /* bit-flags for snd_hda_parse_pin_def_config() behavior */
 /* bit-flags for snd_hda_parse_pin_def_config() behavior */
 #define HDA_PINCFG_NO_HP_FIXUP	(1 << 0) /* no HP-split */
 #define HDA_PINCFG_NO_HP_FIXUP	(1 << 0) /* no HP-split */
@@ -509,6 +511,8 @@ int snd_hda_jack_detect(struct hda_codec *codec, hda_nid_t nid);
 static inline bool is_jack_detectable(struct hda_codec *codec, hda_nid_t nid)
 static inline bool is_jack_detectable(struct hda_codec *codec, hda_nid_t nid)
 {
 {
 	return (snd_hda_query_pin_caps(codec, nid) & AC_PINCAP_PRES_DETECT) &&
 	return (snd_hda_query_pin_caps(codec, nid) & AC_PINCAP_PRES_DETECT) &&
+		!(get_defcfg_misc(snd_hda_codec_get_pincfg(codec, nid) &
+		  AC_DEFCFG_MISC_NO_PRESENCE)) &&
 		(get_wcaps(codec, nid) & AC_WCAP_UNSOL_CAP);
 		(get_wcaps(codec, nid) & AC_WCAP_UNSOL_CAP);
 }
 }