2021-10-06 13:07:59

by Werner Sembach

[permalink] [raw]
Subject: [PATCH] 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: Werner Sembach <[email protected]>
---
sound/pci/hda/patch_realtek.c | 26 +++++++++++++++++++++++++-
1 file changed, 25 insertions(+), 1 deletion(-)

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),
--
2.25.1


2021-10-06 14:15:18

by Takashi Iwai

[permalink] [raw]
Subject: Re: [PATCH] ALSA: hda/realtek: Add quirk for TongFang PHxTxX1

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 <[email protected]>

Thanks, applied.


Takashi

2021-10-06 14:28:46

by Takashi Iwai

[permalink] [raw]
Subject: Re: [PATCH] ALSA: hda/realtek: Add quirk for TongFang PHxTxX1

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 <[email protected]>
> > 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

2021-10-06 14:29:18

by Werner Sembach

[permalink] [raw]
Subject: Re: [PATCH] ALSA: hda/realtek: Add quirk for TongFang PHxTxX1

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 <[email protected]>
> 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