Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e35d9d6a authored by Takashi Iwai's avatar Takashi Iwai
Browse files

ALSA: hda - Check unsol-cap in is_jack_detectalbe()



Also replace more open-codes with this function.

Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 43c1b2e9
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -495,7 +495,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)
{
	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_wcaps(codec, nid) & AC_WCAP_UNSOL_CAP);
}

/* flags for hda_nid_item */
+1 −1
Original line number Diff line number Diff line
@@ -922,7 +922,7 @@ static void init_output(struct hda_codec *codec)
				    AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP);
		if (!cfg->speaker_outs)
			continue;
		if (get_wcaps(codec, nid) & AC_WCAP_UNSOL_CAP) {
		if (is_jack_detectable(codec, nid)) {
			snd_hda_codec_write(codec, nid, 0,
					    AC_VERB_SET_UNSOLICITED_ENABLE,
					    AC_USRSP_EN | HP_EVENT);
+1 −1
Original line number Diff line number Diff line
@@ -1628,7 +1628,7 @@ static void alc_init_auto_mic(struct hda_codec *codec)
	}
	if (!ext || !fixed)
		return;
	if (!(get_wcaps(codec, ext) & AC_WCAP_UNSOL_CAP))
	if (!is_jack_detectable(codec, ext))
		return; /* no unsol support */
	snd_printdd("realtek: Enable auto-mic switch on NID 0x%x/0x%x\n",
		    ext, fixed);
+4 −7
Original line number Diff line number Diff line
@@ -3114,8 +3114,7 @@ static int create_multi_out_ctls(struct hda_codec *codec, int num_outs,

	for (i = 0; i < num_outs && i < ARRAY_SIZE(chname); i++) {
		if (type == AUTO_PIN_HP_OUT && !spec->hp_detect) {
			wid_caps = get_wcaps(codec, pins[i]);
			if (wid_caps & AC_WCAP_UNSOL_CAP)
			if (is_jack_detectable(codec, pins[i]))
				spec->hp_detect = 1;
		}
		nid = dac_nids[i];
@@ -3611,7 +3610,7 @@ static int stac_check_auto_mic(struct hda_codec *codec)
			return 0;
	if (!fixed || (!ext && !dock))
		return 0; /* no input to switch */
	if (!(get_wcaps(codec, ext) & AC_WCAP_UNSOL_CAP))
	if (!is_jack_detectable(codec, ext))
		return 0; /* no unsol support */
	if (set_mic_route(codec, &spec->ext_mic, ext) ||
	    set_mic_route(codec, &spec->int_mic, fixed) ||
@@ -3926,13 +3925,11 @@ static int stac9200_auto_create_hp_ctls(struct hda_codec *codec,
{
	struct sigmatel_spec *spec = codec->spec;
	hda_nid_t pin = cfg->hp_pins[0];
	unsigned int wid_caps;

	if (! pin)
		return 0;

	wid_caps = get_wcaps(codec, pin);
	if (wid_caps & AC_WCAP_UNSOL_CAP)
	if (is_jack_detectable(codec, pin))
		spec->hp_detect = 1;

	return 0;
@@ -4143,7 +4140,7 @@ static int enable_pin_detect(struct hda_codec *codec, hda_nid_t nid,
	struct sigmatel_event *event;
	int tag;

	if (!(get_wcaps(codec, nid) & AC_WCAP_UNSOL_CAP))
	if (!is_jack_detectable(codec, nid))
		return 0;
	event = stac_get_event(codec, nid);
	if (event) {