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

Commit 546861f1 authored by Takashi Iwai's avatar Takashi Iwai
Browse files

Merge branch 'fix/hda' into topic/hda

parents a983b9e5 1d955ebd
Loading
Loading
Loading
Loading
+38 −8
Original line number Diff line number Diff line
@@ -945,11 +945,12 @@ static void alc_fix_pll_init(struct hda_codec *codec, hda_nid_t nid,
static void alc_automute_pin(struct hda_codec *codec)
{
	struct alc_spec *spec = codec->spec;
	unsigned int present;
	unsigned int present, pincap;
	unsigned int nid = spec->autocfg.hp_pins[0];
	int i;
	/* need to execute and sync at first */
	pincap = snd_hda_query_pin_caps(codec, nid);
	if (pincap & AC_PINCAP_TRIG_REQ) /* need trigger? */
		snd_hda_codec_read(codec, nid, 0, AC_VERB_SET_PIN_SENSE, 0);
	present = snd_hda_codec_read(codec, nid, 0,
				     AC_VERB_GET_PIN_SENSE, 0);
@@ -1392,7 +1393,7 @@ static struct hda_verb alc888_fujitsu_xa3530_verbs[] = {
static void alc_automute_amp(struct hda_codec *codec)
{
	struct alc_spec *spec = codec->spec;
	unsigned int val, mute;
	unsigned int val, mute, pincap;
	hda_nid_t nid;
	int i;
@@ -1401,6 +1402,10 @@ static void alc_automute_amp(struct hda_codec *codec)
		nid = spec->autocfg.hp_pins[i];
		if (!nid)
			break;
		pincap = snd_hda_query_pin_caps(codec, nid);
		if (pincap & AC_PINCAP_TRIG_REQ) /* need trigger? */
			snd_hda_codec_read(codec, nid, 0,
					   AC_VERB_SET_PIN_SENSE, 0);
		val = snd_hda_codec_read(codec, nid, 0,
					 AC_VERB_GET_PIN_SENSE, 0);
		if (val & AC_PINSENSE_PRESENCE) {
@@ -1471,6 +1476,10 @@ static struct hda_verb alc888_acer_aspire_4930g_verbs[] = {
static struct hda_verb alc888_acer_aspire_6530g_verbs[] = {
/* Bias voltage on for external mic port */
	{0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN | PIN_VREF80},
/* Front Mic: set to PIN_IN (empty by default) */
	{0x12, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
/* Unselect Front Mic by default in input mixer 3 */
	{0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0xb)},
/* Enable unsolicited event for HP jack */
	{0x15, AC_VERB_SET_UNSOLICITED_ENABLE, ALC880_HP_EVENT | AC_USRSP_EN},
/* Enable speaker output */
@@ -1560,18 +1569,22 @@ static struct hda_input_mux alc888_2_capture_sources[2] = {
static struct hda_input_mux alc888_acer_aspire_6530_sources[2] = {
	/* Interal mic only available on one ADC */
	{
		.num_items = 3,
		.num_items = 5,
		.items = {
			{ "Ext Mic", 0x0 },
			{ "Line In", 0x2 },
			{ "CD", 0x4 },
			{ "Input Mix", 0xa },
			{ "Int Mic", 0xb },
		},
	},
	{
		.num_items = 2,
		.num_items = 4,
		.items = {
			{ "Ext Mic", 0x0 },
			{ "Line In", 0x2 },
			{ "CD", 0x4 },
			{ "Input Mix", 0xa },
		},
	}
};
@@ -1639,6 +1652,17 @@ static void alc888_acer_aspire_4930g_init_hook(struct hda_codec *codec)
	alc_automute_amp(codec);
}
static void alc888_acer_aspire_6530g_init_hook(struct hda_codec *codec)
{
	struct alc_spec *spec = codec->spec;
	spec->autocfg.hp_pins[0] = 0x15;
	spec->autocfg.speaker_pins[0] = 0x14;
	spec->autocfg.speaker_pins[1] = 0x16;
	spec->autocfg.speaker_pins[2] = 0x17;
	alc_automute_amp(codec);
}
static void alc889_acer_aspire_8930g_init_hook(struct hda_codec *codec)
{
	struct alc_spec *spec = codec->spec;
@@ -8189,6 +8213,8 @@ static struct snd_kcontrol_new alc888_acer_aspire_6530_mixer[] = {
	HDA_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT),
	HDA_CODEC_VOLUME("LFE Playback Volume", 0x0f, 0x0, HDA_OUTPUT),
	HDA_BIND_MUTE("LFE Playback Switch", 0x0f, 2, HDA_INPUT),
	HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT),
	HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT),
	HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT),
	HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT),
	HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT),
@@ -9064,7 +9090,7 @@ static struct snd_pci_quirk alc883_cfg_tbl[] = {
	SND_PCI_QUIRK(0x1025, 0x0157, "Acer X3200", ALC883_AUTO),
	SND_PCI_QUIRK(0x1025, 0x0158, "Acer AX1700-U3700A", ALC883_AUTO),
	SND_PCI_QUIRK(0x1025, 0x015e, "Acer Aspire 6930G",
		ALC888_ACER_ASPIRE_4930G),
		ALC888_ACER_ASPIRE_6530G),
	SND_PCI_QUIRK(0x1025, 0x0166, "Acer Aspire 6530G",
		ALC888_ACER_ASPIRE_6530G),
	/* default Acer -- disabled as it causes more problems.
@@ -9317,7 +9343,7 @@ static struct alc_config_preset alc883_presets[] = {
			ARRAY_SIZE(alc888_2_capture_sources),
		.input_mux = alc888_acer_aspire_6530_sources,
		.unsol_event = alc_automute_amp_unsol_event,
		.init_hook = alc888_acer_aspire_4930g_init_hook,
		.init_hook = alc888_acer_aspire_6530g_init_hook,
	},
	[ALC888_ACER_ASPIRE_8930G] = {
		.mixers = { alc888_base_mixer,
@@ -12437,6 +12463,8 @@ static int alc268_parse_auto_config(struct hda_codec *codec)
	if (err < 0)
		return err;
	alc_ssid_check(codec, 0x15, 0x1b, 0x14);
	return 1;
}
@@ -13345,6 +13373,8 @@ static int alc269_parse_auto_config(struct hda_codec *codec)
	if (!spec->cap_mixer && !spec->no_analog)
		set_capture_mixer(spec);
	alc_ssid_check(codec, 0x15, 0x1b, 0x14);
	return 1;
}