diff options
Diffstat (limited to 'sound/pci/hda/patch_realtek.c')
| -rw-r--r-- | sound/pci/hda/patch_realtek.c | 42 | 
1 files changed, 41 insertions, 1 deletions
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index 28b3f5ac76d..6e5d3831601 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c @@ -3156,6 +3156,38 @@ static void alc271_hp_gate_mic_jack(struct hda_codec *codec,  	}  } +static void alc269_fixup_limit_int_mic_boost(struct hda_codec *codec, +					     const struct hda_fixup *fix, +					     int action) +{ +	struct alc_spec *spec = codec->spec; +	struct auto_pin_cfg *cfg = &spec->gen.autocfg; +	int i; + +	/* The mic boosts on level 2 and 3 are too noisy +	   on the internal mic input. +	   Therefore limit the boost to 0 or 1. */ + +	if (action != HDA_FIXUP_ACT_PROBE) +		return; + +	for (i = 0; i < cfg->num_inputs; i++) { +		hda_nid_t nid = cfg->inputs[i].pin; +		unsigned int defcfg; +		if (cfg->inputs[i].type != AUTO_PIN_MIC) +			continue; +		defcfg = snd_hda_codec_get_pincfg(codec, nid); +		if (snd_hda_get_input_pin_attr(defcfg) != INPUT_PIN_ATTR_INT) +			continue; + +		snd_hda_override_amp_caps(codec, nid, HDA_INPUT, +					  (0x00 << AC_AMPCAP_OFFSET_SHIFT) | +					  (0x01 << AC_AMPCAP_NUM_STEPS_SHIFT) | +					  (0x2f << AC_AMPCAP_STEP_SIZE_SHIFT) | +					  (0 << AC_AMPCAP_MUTE_SHIFT)); +	} +} +  enum {  	ALC269_FIXUP_SONY_VAIO,  	ALC275_FIXUP_SONY_VAIO_GPIO2, @@ -3190,6 +3222,7 @@ enum {  	ALC271_FIXUP_AMIC_MIC2,  	ALC271_FIXUP_HP_GATE_MIC_JACK,  	ALC269_FIXUP_ACER_AC700, +	ALC269_FIXUP_LIMIT_INT_MIC_BOOST,  };  static const struct hda_fixup alc269_fixups[] = { @@ -3428,6 +3461,10 @@ static const struct hda_fixup alc269_fixups[] = {  		.chained = true,  		.chain_id = ALC271_FIXUP_DMIC,  	}, +	[ALC269_FIXUP_LIMIT_INT_MIC_BOOST] = { +		.type = HDA_FIXUP_FUNC, +		.v.func = alc269_fixup_limit_int_mic_boost, +	},  };  static const struct snd_pci_quirk alc269_fixup_tbl[] = { @@ -3458,11 +3495,14 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {  	SND_PCI_QUIRK(0x103c, 0x1973, "HP Pavilion", ALC269_FIXUP_HP_MUTE_LED_MIC1),  	SND_PCI_QUIRK(0x103c, 0x1983, "HP Pavilion", ALC269_FIXUP_HP_MUTE_LED_MIC1),  	SND_PCI_QUIRK_VENDOR(0x103c, "HP", ALC269_FIXUP_HP_MUTE_LED), +	SND_PCI_QUIRK(0x1043, 0x106d, "Asus K53BE", ALC269_FIXUP_LIMIT_INT_MIC_BOOST), +	SND_PCI_QUIRK(0x1043, 0x115d, "Asus 1015E", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),  	SND_PCI_QUIRK(0x1043, 0x1427, "Asus Zenbook UX31E", ALC269VB_FIXUP_DMIC),  	SND_PCI_QUIRK(0x1043, 0x1517, "Asus Zenbook UX31A", ALC269VB_FIXUP_DMIC), +	SND_PCI_QUIRK(0x1043, 0x16e3, "ASUS UX50", ALC269_FIXUP_STEREO_DMIC),  	SND_PCI_QUIRK(0x1043, 0x1a13, "Asus G73Jw", ALC269_FIXUP_ASUS_G73JW),  	SND_PCI_QUIRK(0x1043, 0x1b13, "Asus U41SV", ALC269_FIXUP_INV_DMIC), -	SND_PCI_QUIRK(0x1043, 0x16e3, "ASUS UX50", ALC269_FIXUP_STEREO_DMIC), +	SND_PCI_QUIRK(0x1043, 0x1c23, "Asus X55U", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),  	SND_PCI_QUIRK(0x1043, 0x831a, "ASUS P901", ALC269_FIXUP_STEREO_DMIC),  	SND_PCI_QUIRK(0x1043, 0x834a, "ASUS S101", ALC269_FIXUP_STEREO_DMIC),  	SND_PCI_QUIRK(0x1043, 0x8398, "ASUS P1005", ALC269_FIXUP_STEREO_DMIC),  |