diff mbox series

ALSA: hda/realtek: Fix microphone regression on ASUS N705UD

Message ID 20250226135515.24219-1-adrienverge@gmail.com (mailing list archive)
State New
Headers show
Series ALSA: hda/realtek: Fix microphone regression on ASUS N705UD | expand

Commit Message

Adrien Vergé Feb. 26, 2025, 1:55 p.m. UTC
This fixes a regression introduced a few weeks ago in stable kernels
6.12.14 and 6.13.3. The internal microphone on ASUS Vivobook N705UD /
X705UD laptops is broken: the microphone appears in userspace (e.g.
Gnome settings) but no sound is detected.
I bisected it to commit 3b4309546b48 ("ALSA: hda: Fix headset detection
failure due to unstable sort").

I figured out the cause:
1. The initial pins enabled for the ALC256 driver are:
       cfg->inputs == {
         { pin=0x19, type=AUTO_PIN_MIC,
           is_headset_mic=1, is_headphone_mic=0, has_boost_on_pin=1 },
         { pin=0x1a, type=AUTO_PIN_MIC,
           is_headset_mic=0, is_headphone_mic=0, has_boost_on_pin=1 } }
2. Since 2017 and commits c1732ede5e8 ("ALSA: hda/realtek - Fix headset
   and mic on several ASUS laptops with ALC256") and 28e8af8a163 ("ALSA:
   hda/realtek: Fix mic and headset jack sense on ASUS X705UD"), the
   quirk ALC256_FIXUP_ASUS_MIC is also applied to ASUS X705UD / N705UD
   laptops.
   This added another internal microphone on pin 0x13:
       cfg->inputs == {
         { pin=0x13, type=AUTO_PIN_MIC,
           is_headset_mic=0, is_headphone_mic=0, has_boost_on_pin=1 },
         { pin=0x19, type=AUTO_PIN_MIC,
           is_headset_mic=1, is_headphone_mic=0, has_boost_on_pin=1 },
         { pin=0x1a, type=AUTO_PIN_MIC,
           is_headset_mic=0, is_headphone_mic=0, has_boost_on_pin=1 } }
   I don't know what this pin 0x13 corresponds to. To the best of my
   knowledge, these laptops have only one internal microphone.
3. Before 2025 and commit 3b4309546b48 ("ALSA: hda: Fix headset
   detection failure due to unstable sort"), the sort function would let
   the microphone of pin 0x1a (the working one) *before* the microphone
   of pin 0x13 (the phantom one).
4. After this commit 3b4309546b48, the fixed sort function puts the
   working microphone (pin 0x1a) *after* the phantom one (pin 0x13). As
   a result, no sound is detected anymore.

It looks like the quirk ALC256_FIXUP_ASUS_MIC is not needed anymore for
ASUS Vivobook X705UD / N705UD laptops. Without it, everything works
fine:
- the internal microphone is detected and records actual sound,
- plugging in a jack headset is detected and can record actual sound
  with it,
- unplugging the jack headset makes the system go back to internal
  microphone and can record actual sound.

Cc: stable@vger.kernel.org
Cc: Kuan-Wei Chiu <visitorckw@gmail.com>
Cc: Chris Chiu <chris.chiu@canonical.com>
Fixes: 3b4309546b48 ("ALSA: hda: Fix headset detection failure due to unstable sort")
Tested-by: Adrien Vergé <adrienverge@gmail.com>
Signed-off-by: Adrien Vergé <adrienverge@gmail.com>
---
 sound/pci/hda/patch_realtek.c | 1 -
 1 file changed, 1 deletion(-)


base-commit: d082ecbc71e9e0bf49883ee4afd435a77a5101b6

Comments

Takashi Iwai Feb. 26, 2025, 1:59 p.m. UTC | #1
On Wed, 26 Feb 2025 14:55:15 +0100,
Adrien Vergé wrote:
> 
> This fixes a regression introduced a few weeks ago in stable kernels
> 6.12.14 and 6.13.3. The internal microphone on ASUS Vivobook N705UD /
> X705UD laptops is broken: the microphone appears in userspace (e.g.
> Gnome settings) but no sound is detected.
> I bisected it to commit 3b4309546b48 ("ALSA: hda: Fix headset detection
> failure due to unstable sort").
> 
> I figured out the cause:
> 1. The initial pins enabled for the ALC256 driver are:
>        cfg->inputs == {
>          { pin=0x19, type=AUTO_PIN_MIC,
>            is_headset_mic=1, is_headphone_mic=0, has_boost_on_pin=1 },
>          { pin=0x1a, type=AUTO_PIN_MIC,
>            is_headset_mic=0, is_headphone_mic=0, has_boost_on_pin=1 } }
> 2. Since 2017 and commits c1732ede5e8 ("ALSA: hda/realtek - Fix headset
>    and mic on several ASUS laptops with ALC256") and 28e8af8a163 ("ALSA:
>    hda/realtek: Fix mic and headset jack sense on ASUS X705UD"), the
>    quirk ALC256_FIXUP_ASUS_MIC is also applied to ASUS X705UD / N705UD
>    laptops.
>    This added another internal microphone on pin 0x13:
>        cfg->inputs == {
>          { pin=0x13, type=AUTO_PIN_MIC,
>            is_headset_mic=0, is_headphone_mic=0, has_boost_on_pin=1 },
>          { pin=0x19, type=AUTO_PIN_MIC,
>            is_headset_mic=1, is_headphone_mic=0, has_boost_on_pin=1 },
>          { pin=0x1a, type=AUTO_PIN_MIC,
>            is_headset_mic=0, is_headphone_mic=0, has_boost_on_pin=1 } }
>    I don't know what this pin 0x13 corresponds to. To the best of my
>    knowledge, these laptops have only one internal microphone.
> 3. Before 2025 and commit 3b4309546b48 ("ALSA: hda: Fix headset
>    detection failure due to unstable sort"), the sort function would let
>    the microphone of pin 0x1a (the working one) *before* the microphone
>    of pin 0x13 (the phantom one).
> 4. After this commit 3b4309546b48, the fixed sort function puts the
>    working microphone (pin 0x1a) *after* the phantom one (pin 0x13). As
>    a result, no sound is detected anymore.
> 
> It looks like the quirk ALC256_FIXUP_ASUS_MIC is not needed anymore for
> ASUS Vivobook X705UD / N705UD laptops. Without it, everything works
> fine:
> - the internal microphone is detected and records actual sound,
> - plugging in a jack headset is detected and can record actual sound
>   with it,
> - unplugging the jack headset makes the system go back to internal
>   microphone and can record actual sound.
> 
> Cc: stable@vger.kernel.org
> Cc: Kuan-Wei Chiu <visitorckw@gmail.com>
> Cc: Chris Chiu <chris.chiu@canonical.com>
> Fixes: 3b4309546b48 ("ALSA: hda: Fix headset detection failure due to unstable sort")
> Tested-by: Adrien Vergé <adrienverge@gmail.com>
> Signed-off-by: Adrien Vergé <adrienverge@gmail.com>

Thanks, applied now.


Takashi
diff mbox series

Patch

diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index 224616fbec4f..456dfa2b4b4b 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -10656,7 +10656,6 @@  static const struct hda_quirk alc269_fixup_tbl[] = {
 	SND_PCI_QUIRK(0x1043, 0x19ce, "ASUS B9450FA", ALC294_FIXUP_ASUS_HPE),
 	SND_PCI_QUIRK(0x1043, 0x19e1, "ASUS UX581LV", ALC295_FIXUP_ASUS_MIC_NO_PRESENCE),
 	SND_PCI_QUIRK(0x1043, 0x1a13, "Asus G73Jw", ALC269_FIXUP_ASUS_G73JW),
-	SND_PCI_QUIRK(0x1043, 0x1a30, "ASUS X705UD", ALC256_FIXUP_ASUS_MIC),
 	SND_PCI_QUIRK(0x1043, 0x1a63, "ASUS UX3405MA", ALC245_FIXUP_CS35L41_SPI_2),
 	SND_PCI_QUIRK(0x1043, 0x1a83, "ASUS UM5302LA", ALC294_FIXUP_CS35L41_I2C_2),
 	SND_PCI_QUIRK(0x1043, 0x1a8f, "ASUS UX582ZS", ALC245_FIXUP_CS35L41_SPI_2),