At Wed, 10 Oct 2012 14:59:08 +0200, Da Fox wrote:
Hi all,
Since the official bug-tracker at https://bugtrack.alsa-project.org/alsa-bug/ seems to be down (and moreover this appears to be a kernel bug), I have filed a bug at the kernel's bug-tracker last week ( https://bugzilla.kernel.org/show_bug.cgi?id=48381 ). However, it seems to have gone unnoticed thus-far.
Quick summary of the issue: After a while of inactivity the sound-card seems to go into a sort of power-saving mode (you can hear a faint 'pop' from the speakers). Before the sound would automatically turn back on again as soon as a program attempted to play sound. However now it seems that after resuming from the power-saving mode the driver thinks that there is always a headphone connected, even when it is not. I think this is what happens because toggling the 'Auto-Mute Mode' (setting it to 'Disabled') in alsamixer allows the speakers to produce sound again. This is all on a laptop (please see the linked bug report for more detailed hardware description).
Would a developer please take a look at it? I have bisected the issue down to a commit made by David Henningsson and/or Takashi Iwai: ---8<--------- 80c8bfbe76869bfd6bdf3d260d316e7a32f318c3 is the first bad commit commit 80c8bfbe76869bfd6bdf3d260d316e7a32f318c3 Author: David Henningsson david.henningsson@canonical.com Date: Mon Jun 4 09:33:51 2012 +0200
ALSA: HDA: Create phantom jacks for fixed inputs and outputs
Could you check the patch below whether it fixes your problem? It essentially disables what the commit above introduced.
If the problem persists with the patch, it means that the commit above is no real culprit, thus bisection wasn't correct.
Takashi
--- diff --git a/sound/pci/hda/hda_jack.c b/sound/pci/hda/hda_jack.c index 5c690cb..d3f4ae6 100644 --- a/sound/pci/hda/hda_jack.c +++ b/sound/pci/hda/hda_jack.c @@ -359,6 +359,8 @@ static int add_jack_kctl(struct hda_codec *codec, hda_nid_t nid, return 0; phantom_jack = (conn != AC_JACK_PORT_COMPLEX) || !is_jack_detectable(codec, nid); + if (phantom_jack) + return 0;
snd_hda_get_pin_label(codec, nid, cfg, name, sizeof(name), &idx); if (phantom_jack)