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

Commit 04f5ade6 authored by Takashi Iwai's avatar Takashi Iwai
Browse files

ALSA: hda - Introduce snd_hda_get_pin_label()



Create a new helper function snd_hda_get_pin_label() for getting a label
string for both input and output pins.  hda_get_input_pin_label() is
obsoleted by this function, and the callers are replaced appropriately
now by this patch.

Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 8b940fc4
Loading
Loading
Loading
Loading
+60 −3
Original line number Diff line number Diff line
@@ -5004,8 +5004,8 @@ EXPORT_SYMBOL_HDA(snd_hda_get_input_pin_attr);
 * "Rear", "Internal".
 */

const char *hda_get_input_pin_label(struct hda_codec *codec, hda_nid_t pin,
					int check_location)
static const char *hda_get_input_pin_label(struct hda_codec *codec,
					   hda_nid_t pin, bool check_location)
{
	unsigned int def_conf;
	static const char * const mic_names[] = {
@@ -5044,7 +5044,6 @@ const char *hda_get_input_pin_label(struct hda_codec *codec, hda_nid_t pin,
		return "Misc";
	}
}
EXPORT_SYMBOL_HDA(hda_get_input_pin_label);

/* Check whether the location prefix needs to be added to the label.
 * If all mic-jacks are in the same location (e.g. rear panel), we don't
@@ -5101,6 +5100,64 @@ const char *hda_get_autocfg_input_label(struct hda_codec *codec,
}
EXPORT_SYMBOL_HDA(hda_get_autocfg_input_label);

/**
 * snd_hda_get_pin_label - Get a label for the given I/O pin
 *
 * Get a label for the given pin.  This function works for both input and
 * output pins.  When @cfg is given as non-NULL, the function tries to get
 * an optimized label using hda_get_autocfg_input_label().
 */
const char *snd_hda_get_pin_label(struct hda_codec *codec, hda_nid_t nid,
				  const struct auto_pin_cfg *cfg)
{
	unsigned int def_conf = snd_hda_codec_get_pincfg(codec, nid);
	int attr;
	int i;

	if (get_defcfg_connect(def_conf) == AC_JACK_PORT_NONE)
		return NULL;

	attr = snd_hda_get_input_pin_attr(def_conf);
	switch (get_defcfg_device(def_conf)) {
	case AC_JACK_LINE_OUT:
		switch (attr) {
		case INPUT_PIN_ATTR_INT:
			return "Speaker";
		case INPUT_PIN_ATTR_DOCK:
			return "Dock Line-Out";
		case INPUT_PIN_ATTR_FRONT:
			return "Front Line-Out";
		default:
			return "Line-Out";
		}
	case AC_JACK_SPEAKER:
		return "Speaker";
	case AC_JACK_HP_OUT:
		switch (attr) {
		case INPUT_PIN_ATTR_DOCK:
			return "Dock Headphone";
		case INPUT_PIN_ATTR_FRONT:
			return "Front Headphone";
		default:
			return "Headphone";
		}
	case AC_JACK_SPDIF_OUT:
	case AC_JACK_DIG_OTHER_OUT:
		if (get_defcfg_location(def_conf) == AC_JACK_LOC_HDMI)
			return "HDMI";
		else
			return "SPDIF";
	}

	if (cfg) {
		for (i = 0; i < cfg->num_inputs; i++)
			if (cfg->inputs[i].pin == nid)
				return hda_get_autocfg_input_label(codec, cfg, i);
	}
	return hda_get_input_pin_label(codec, nid, true);
}
EXPORT_SYMBOL_HDA(snd_hda_get_pin_label);

/**
 * snd_hda_add_imux_item - Add an item to input_mux
 *
+2 −2
Original line number Diff line number Diff line
@@ -394,11 +394,11 @@ struct auto_pin_cfg_item {
};

struct auto_pin_cfg;
const char *hda_get_input_pin_label(struct hda_codec *codec, hda_nid_t pin,
				    int check_location);
const char *hda_get_autocfg_input_label(struct hda_codec *codec,
					const struct auto_pin_cfg *cfg,
					int input);
const char *snd_hda_get_pin_label(struct hda_codec *codec, hda_nid_t nid,
				  const struct auto_pin_cfg *cfg);
int snd_hda_add_imux_item(struct hda_input_mux *imux, const char *label,
			  int index, int *type_index_ret);

+1 −1
Original line number Diff line number Diff line
@@ -476,7 +476,7 @@ static void parse_input(struct hda_codec *codec)
		if (j >= cfg->num_inputs)
			continue;
		spec->input_pins[n] = pin;
		spec->input_labels[n] = hda_get_input_pin_label(codec, pin, 1);
		spec->input_labels[n] = snd_hda_get_pin_label(codec, pin, NULL);
		spec->adcs[n] = nid;
		n++;
	}
+1 −1
Original line number Diff line number Diff line
@@ -711,7 +711,7 @@ static int cs_capture_source_info(struct snd_kcontrol *kcontrol,
		uinfo->value.enumerated.item = spec->num_inputs - 1;
	idx = spec->input_idx[uinfo->value.enumerated.item];
	strcpy(uinfo->value.enumerated.name,
	       hda_get_input_pin_label(codec, cfg->inputs[idx].pin, 1));
	       snd_hda_get_pin_label(codec, cfg->inputs[idx].pin, NULL));
	return 0;
}

+2 −2
Original line number Diff line number Diff line
@@ -2872,7 +2872,7 @@ static inline int stac92xx_add_jack_mode_control(struct hda_codec *codec,
	}

	if (control) {
		strcpy(name, hda_get_input_pin_label(codec, nid, 1));
		strcpy(name, snd_hda_get_pin_label(codec, nid, NULL));
		return stac92xx_add_control(codec->spec, control,
					strcat(name, " Jack Mode"), nid);
	}
@@ -3563,7 +3563,7 @@ static int stac92xx_auto_create_dmic_input_ctls(struct hda_codec *codec,
		if (index < 0)
			continue;

		label = hda_get_input_pin_label(codec, nid, 1);
		label = snd_hda_get_pin_label(codec, nid, NULL);
		snd_hda_add_imux_item(dimux, label, index, &type_idx);
		if (snd_hda_get_bool_hint(codec, "separate_dmux") != 1)
			snd_hda_add_imux_item(imux, label, index, &type_idx);