Commit dd6dd6e3 authored by Werner Sembach's avatar Werner Sembach Committed by Takashi Iwai
Browse files

ALSA: hda/realtek: Add quirk for TongFang PHxTxX1



This applies a SND_PCI_QUIRK(...) to the TongFang PHxTxX1 barebone. This
fixes the issue of the internal Microphone not working after booting
another OS.

When booting a certain another OS this barebone keeps some coeff settings
even after a cold shutdown. These coeffs prevent the microphone detection
from working in Linux, making the Laptop think that there is always an
external microphone plugged-in and therefore preventing the use of the
internal one.

The relevant indexes and values where gathered by naively diff-ing and
reading a working and a non-working coeff dump.

Signed-off-by: default avatarWerner Sembach <wse@tuxedocomputers.com>
Cc: <stable@vger.kernel.org>
Link: https://lore.kernel.org/r/20211006130415.538243-1-wse@tuxedocomputers.com


Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 5aec9891
Loading
Loading
Loading
Loading
+25 −1
Original line number Diff line number Diff line
@@ -6453,6 +6453,24 @@ static void alc287_fixup_legion_15imhg05_speakers(struct hda_codec *codec,
/* for alc285_fixup_ideapad_s740_coef() */
#include "ideapad_s740_helper.c"

static void alc256_fixup_tongfang_reset_persistent_settings(struct hda_codec *codec,
							    const struct hda_fixup *fix,
							    int action)
{
	/*
	* A certain other OS sets these coeffs to different values. On at least one TongFang
	* barebone these settings might survive even a cold reboot. So to restore a clean slate the
	* values are explicitly reset to default here. Without this, the external microphone is
	* always in a plugged-in state, while the internal microphone is always in an unplugged
	* state, breaking the ability to use the internal microphone.
	*/
	alc_write_coef_idx(codec, 0x24, 0x0000);
	alc_write_coef_idx(codec, 0x26, 0x0000);
	alc_write_coef_idx(codec, 0x29, 0x3000);
	alc_write_coef_idx(codec, 0x37, 0xfe05);
	alc_write_coef_idx(codec, 0x45, 0x5089);
}

enum {
	ALC269_FIXUP_GPIO2,
	ALC269_FIXUP_SONY_VAIO,
@@ -6667,7 +6685,8 @@ enum {
	ALC287_FIXUP_LEGION_15IMHG05_SPEAKERS,
	ALC287_FIXUP_LEGION_15IMHG05_AUTOMUTE,
	ALC287_FIXUP_YOGA7_14ITL_SPEAKERS,
	ALC287_FIXUP_13S_GEN2_SPEAKERS
	ALC287_FIXUP_13S_GEN2_SPEAKERS,
	ALC256_FIXUP_TONGFANG_RESET_PERSISTENT_SETTINGS,
};

static const struct hda_fixup alc269_fixups[] = {
@@ -8365,6 +8384,10 @@ static const struct hda_fixup alc269_fixups[] = {
		.chained = true,
		.chain_id = ALC269_FIXUP_HEADSET_MODE,
	},
	[ALC256_FIXUP_TONGFANG_RESET_PERSISTENT_SETTINGS] = {
		.type = HDA_FIXUP_FUNC,
		.v.func = alc256_fixup_tongfang_reset_persistent_settings,
	},
};

static const struct snd_pci_quirk alc269_fixup_tbl[] = {
@@ -8796,6 +8819,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
	SND_PCI_QUIRK(0x1b7d, 0xa831, "Ordissimo EVE2 ", ALC269VB_FIXUP_ORDISSIMO_EVE2), /* Also known as Malata PC-B1303 */
	SND_PCI_QUIRK(0x1c06, 0x2013, "Lemote A1802", ALC269_FIXUP_LEMOTE_A1802),
	SND_PCI_QUIRK(0x1c06, 0x2015, "Lemote A190X", ALC269_FIXUP_LEMOTE_A190X),
	SND_PCI_QUIRK(0x1d05, 0x1132, "TongFang PHxTxX1", ALC256_FIXUP_TONGFANG_RESET_PERSISTENT_SETTINGS),
	SND_PCI_QUIRK(0x1d72, 0x1602, "RedmiBook", ALC255_FIXUP_XIAOMI_HEADSET_MIC),
	SND_PCI_QUIRK(0x1d72, 0x1701, "XiaomiNotebook Pro", ALC298_FIXUP_DELL1_MIC_NO_PRESENCE),
	SND_PCI_QUIRK(0x1d72, 0x1901, "RedmiBook 14", ALC256_FIXUP_ASUS_HEADSET_MIC),