diff mbox series

ALSA: hda/realtek: Add quirk for TongFang PHxTxX1

Message ID 20211006130415.538243-1-wse@tuxedocomputers.com (mailing list archive)
State Accepted
Commit dd6dd6e3c791db7fdbc5433ec7e450717aa3a0ce
Headers show
Series ALSA: hda/realtek: Add quirk for TongFang PHxTxX1 | expand

Commit Message

Werner Sembach Oct. 6, 2021, 1:04 p.m. UTC
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: Werner Sembach <wse@tuxedocomputers.com>
---
 sound/pci/hda/patch_realtek.c | 26 +++++++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

Comments

Takashi Iwai Oct. 6, 2021, 2:10 p.m. UTC | #1
On Wed, 06 Oct 2021 15:04:15 +0200,
Werner Sembach wrote:
> 
> 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: Werner Sembach <wse@tuxedocomputers.com>

Thanks, applied.


Takashi
Werner Sembach Oct. 6, 2021, 2:25 p.m. UTC | #2
Am 06.10.21 um 16:10 schrieb Takashi Iwai:

> On Wed, 06 Oct 2021 15:04:15 +0200,
> Werner Sembach wrote:
>> 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: Werner Sembach <wse@tuxedocomputers.com>
> Thanks, applied.
>
>
> Takashi

Thanks for being quick as always ^^

I forgot to add cc: stable to the patch. Whats the best practie to do that after the patch has already been applied?

Just send it again mit with cc: stable?

Kind regards,

Werner Sembach
Takashi Iwai Oct. 6, 2021, 2:26 p.m. UTC | #3
On Wed, 06 Oct 2021 16:25:13 +0200,
Werner Sembach wrote:
> 
> Am 06.10.21 um 16:10 schrieb Takashi Iwai:
> 
> > On Wed, 06 Oct 2021 15:04:15 +0200,
> > Werner Sembach wrote:
> >> 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: Werner Sembach <wse@tuxedocomputers.com>
> > Thanks, applied.
> >
> >
> > Takashi
> 
> Thanks for being quick as always ^^
> 
> I forgot to add cc: stable to the patch. Whats the best practie to do that after the patch has already been applied?
> 
> Just send it again mit with cc: stable?

Don't worry, I already added it :)


Takashi
diff mbox series

Patch

diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index 4407f7da57c4..55d3c9d85fd2 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -6449,6 +6449,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,
@@ -6663,7 +6681,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[] = {
@@ -8361,6 +8380,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[] = {
@@ -8789,6 +8812,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),