]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
ALSA: hda - limit internal mic boost for Asus X202E
authorDavid Henningsson <david.henningsson@canonical.com>
Tue, 18 Sep 2012 12:26:59 +0000 (14:26 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 12 Oct 2012 20:50:27 +0000 (05:50 +0900)
commit 4b527b6516ab1f0af8aaedd02dbf71ee2c1180f4 upstream.

When the input gain for the internal mic is set to its maximum level,
the background noise becomes so high - and any relevant signal clipped -
that the setting becomes unusable. It is better to limit the amplification.

BugLink: https://bugs.launchpad.net/bugs/1052460
Signed-off-by: David Henningsson <david.henningsson@canonical.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
sound/pci/hda/patch_via.c

index 53dfeb072c4464f513c1f566b541d6e8053042b2..4b4072fcec517eb1596bbedd071cf036cf0ac4f6 100644 (file)
@@ -3670,6 +3670,32 @@ static void set_widgets_power_state_vt2002P(struct hda_codec *codec)
                update_power_state(codec, 0x21, AC_PWRST_D3);
 }
 
+/*
+ * pin fix-up
+ */
+enum {
+       VIA_FIXUP_INTMIC_BOOST,
+};
+
+static void via_fixup_intmic_boost(struct hda_codec *codec,
+                                 const struct hda_fixup *fix, int action)
+{
+       if (action == HDA_FIXUP_ACT_PRE_PROBE)
+               override_mic_boost(codec, 0x30, 0, 2, 40);
+}
+
+static const struct hda_fixup via_fixups[] = {
+       [VIA_FIXUP_INTMIC_BOOST] = {
+               .type = HDA_FIXUP_FUNC,
+               .v.func = via_fixup_intmic_boost,
+       },
+};
+
+static const struct snd_pci_quirk vt2002p_fixups[] = {
+       SND_PCI_QUIRK(0x1043, 0x8532, "Asus X202E", VIA_FIXUP_INTMIC_BOOST),
+       {}
+};
+
 /* patch for vt2002P */
 static int patch_vt2002P(struct hda_codec *codec)
 {
@@ -3686,6 +3712,9 @@ static int patch_vt2002P(struct hda_codec *codec)
        override_mic_boost(codec, 0x29, 0, 3, 40);
        add_secret_dac_path(codec);
 
+       snd_hda_pick_fixup(codec, NULL, vt2002p_fixups, via_fixups);
+       snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE);
+
        /* automatic parse from the BIOS config */
        err = via_parse_auto_config(codec);
        if (err < 0) {