[alsa-devel] [regression] Sound not transferred to docking station after resume from StR

Scenario: - suspend laptop while *un*docked, i.e. with laptop speakers in use - dock laptop - resume
With 2.6.33 and earlier the sound would always come from the external speakers connected to the docking station. But with 2.6.34-rc4 I get sound still coming from the laptop's internal speakers, which is not correct.
System: HP 2510p running Debian stable ("Lenny") Sound driver: snd_hda_intel; codec: AD1981
Attached my kernel config for .34, and dmesg output for both .33 and .34 showing: - boot (docked) - undocking (visible as several USB disconnects) - suspend - resume after docking
I don't see any significant changes in dmesg output during resume.
I'll do a bisect, unless someone has some idea what may be causing this.

On Friday 16 April 2010, Frans Pop wrote:
With 2.6.33 and earlier the sound would always come from the external speakers connected to the docking station. But with 2.6.34-rc4 I get sound still coming from the laptop's internal speakers, which is not correct.
Forgot to mention that sound does get transferred to the external speakers with .34 if I do an extra undock and redock after the resume.

On Friday 16 April 2010, Frans Pop wrote:
Scenario:
- suspend laptop while *un*docked, i.e. with laptop speakers in use
- dock laptop
- resume
With 2.6.33 and earlier the sound would always come from the external speakers connected to the docking station. But with 2.6.34-rc4 I get sound still coming from the laptop's internal speakers, which is not correct.
The problem is slightly different than I thought. Turns out *both* the internal (laptop) and external (docking station) speakers are active after the resume. So the problem is that the internal speakers are not switched off.
I have traced this to an ALSA merge: 524df55725217. Unfortunately I get boot failures when I try to bisect down into that merge.
Here's the bisect log: # bad: [0d0fb0f9c5fddef4a10242fe3337f00f528a3099] Linux 2.6.34-rc4 # good: [724e6d3fe8003c3f60bf404bf22e4e331327c596] Linux 2.6.33-rc8 git bisect start 'v2.6.34-rc4' 'v2.6.33-rc8' # bad: [94468080220162f74dc6ce5c3e95e5fec8022902] Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty-2.6 git bisect bad 94468080220162f74dc6ce5c3e95e5fec8022902 # bad: [524df55725217b13d5a232fb5badb5846418ea0e] Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6 git bisect bad 524df55725217b13d5a232fb5badb5846418ea0e # good: [0f4533979473a456a8adb3869365e12c7a99cf65] Merge branches 'futexes-for-linus', 'irq-core-for-linus' and 'bkl-drivers-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip git bisect good 0f4533979473a456a8adb3869365e12c7a99cf65
Cheers, FJP

At Sat, 17 Apr 2010 11:06:22 +0200, Frans Pop wrote:
On Friday 16 April 2010, Frans Pop wrote:
Scenario:
- suspend laptop while *un*docked, i.e. with laptop speakers in use
- dock laptop
- resume
With 2.6.33 and earlier the sound would always come from the external speakers connected to the docking station. But with 2.6.34-rc4 I get sound still coming from the laptop's internal speakers, which is not correct.
The problem is slightly different than I thought. Turns out *both* the internal (laptop) and external (docking station) speakers are active after the resume. So the problem is that the internal speakers are not switched off.
I have traced this to an ALSA merge: 524df55725217. Unfortunately I get boot failures when I try to bisect down into that merge.
Here's the bisect log: # bad: [0d0fb0f9c5fddef4a10242fe3337f00f528a3099] Linux 2.6.34-rc4 # good: [724e6d3fe8003c3f60bf404bf22e4e331327c596] Linux 2.6.33-rc8 git bisect start 'v2.6.34-rc4' 'v2.6.33-rc8' # bad: [94468080220162f74dc6ce5c3e95e5fec8022902] Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty-2.6 git bisect bad 94468080220162f74dc6ce5c3e95e5fec8022902 # bad: [524df55725217b13d5a232fb5badb5846418ea0e] Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6 git bisect bad 524df55725217b13d5a232fb5badb5846418ea0e # good: [0f4533979473a456a8adb3869365e12c7a99cf65] Merge branches 'futexes-for-linus', 'irq-core-for-linus' and 'bkl-drivers-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip git bisect good 0f4533979473a456a8adb3869365e12c7a99cf65
Could you give alsa-info.sh on your machine, preferably before/after suspend on both working (2.6.33) and non-working kernels?
Also, you can try to copy sound/pci/hda/patch_analog.c from 2.6.33 to 2.6.34 to check whether it works. There shouldn't be many changes in that file.
thanks,
Takashi

On Monday 19 April 2010, Takashi Iwai wrote:
Could you give alsa-info.sh on your machine, preferably before/after suspend on both working (2.6.33) and non-working kernels?
See files in attached tarball. Contents are: * system boot (docked) => alsa-info.txt_3[34]_docked * undock => alsa-info.txt_3[34]_undocked * suspend - dock (while suspended) - resume => alsa-info.txt_3[34]_after_resume_docked * undock - redock (this disables the internal speakers) => alsa-info.txt_34_after_resume_redocked
Also, you can try to copy sound/pci/hda/patch_analog.c from 2.6.33 to 2.6.34 to check whether it works. There shouldn't be many changes in that file.
That fixes the problem.
Thanks, FJP

At Mon, 19 Apr 2010 13:38:14 +0200, Frans Pop wrote:
On Monday 19 April 2010, Takashi Iwai wrote:
Could you give alsa-info.sh on your machine, preferably before/after suspend on both working (2.6.33) and non-working kernels?
See files in attached tarball. Contents are:
- system boot (docked) => alsa-info.txt_3[34]_docked
- undock => alsa-info.txt_3[34]_undocked
- suspend - dock (while suspended) - resume => alsa-info.txt_3[34]_after_resume_docked
- undock - redock (this disables the internal speakers) => alsa-info.txt_34_after_resume_redocked
Also, you can try to copy sound/pci/hda/patch_analog.c from 2.6.33 to 2.6.34 to check whether it works. There shouldn't be many changes in that file.
That fixes the problem.
Then my rough guess is
commit ea52bf260ecbb175339af3178c15788df21b7516 Author: Daniel T Chen crimsun@ubuntu.com Date: Sun Dec 27 18:48:29 2009 -0500
ALSA: hda: Add powerdown for Analog Devices HDA codecs
Could you try to revert it?
thanks,
Takashi

At Mon, 19 Apr 2010 13:59:36 +0200, I wrote:
At Mon, 19 Apr 2010 13:38:14 +0200, Frans Pop wrote:
On Monday 19 April 2010, Takashi Iwai wrote:
Could you give alsa-info.sh on your machine, preferably before/after suspend on both working (2.6.33) and non-working kernels?
See files in attached tarball. Contents are:
- system boot (docked) => alsa-info.txt_3[34]_docked
- undock => alsa-info.txt_3[34]_undocked
- suspend - dock (while suspended) - resume => alsa-info.txt_3[34]_after_resume_docked
- undock - redock (this disables the internal speakers) => alsa-info.txt_34_after_resume_redocked
Also, you can try to copy sound/pci/hda/patch_analog.c from 2.6.33 to 2.6.34 to check whether it works. There shouldn't be many changes in that file.
That fixes the problem.
Then my rough guess is
commit ea52bf260ecbb175339af3178c15788df21b7516 Author: Daniel T Chen crimsun@ubuntu.com Date: Sun Dec 27 18:48:29 2009 -0500
ALSA: hda: Add powerdown for Analog Devices HDA codecs
Could you try to revert it?
Or how about the patch below?
Takashi
--- diff --git a/sound/pci/hda/patch_analog.c b/sound/pci/hda/patch_analog.c index 9cbd80c..2cf7d19 100644 --- a/sound/pci/hda/patch_analog.c +++ b/sound/pci/hda/patch_analog.c @@ -85,6 +85,9 @@ struct ad198x_spec { const char **slave_sws; };
+#define AD_HP_EVENT 0x01 +#define AD_MIC_EVENT 0x02 + /* * input MUX handling (common part) */ @@ -533,6 +536,11 @@ static int ad198x_resume(struct hda_codec *codec) ad198x_init(codec); snd_hda_codec_resume_amp(codec); snd_hda_codec_resume_cache(codec); + if (codec->patch_ops.unsol_event) { + /* fake unsol events */ + codec->patch_ops.unsol_event(codec, AD_HP_EVENT << 26); + codec->patch_ops.unsol_event(codec, AD_MIC_EVENT << 26); + } return 0; } #endif @@ -822,7 +830,7 @@ static void ad1986a_automic(struct hda_codec *codec) present ? 0 : 2); }
-#define AD1986A_MIC_EVENT 0x36 +#define AD1986A_MIC_EVENT AD_MIC_EVENT
static void ad1986a_automic_unsol_event(struct hda_codec *codec, unsigned int res) @@ -865,7 +873,7 @@ static void ad1986a_hp_automute(struct hda_codec *codec) ad1986a_update_hp(codec); }
-#define AD1986A_HP_EVENT 0x37 +#define AD1986A_HP_EVENT AD_HP_EVENT
static void ad1986a_hp_unsol_event(struct hda_codec *codec, unsigned int res) { @@ -1609,8 +1617,8 @@ static struct hda_amp_list ad1981_loopbacks[] = { * speaker output enabled _and_ mute-LED off. */
-#define AD1981_HP_EVENT 0x37 -#define AD1981_MIC_EVENT 0x38 +#define AD1981_HP_EVENT AD_HP_EVENT +#define AD1981_MIC_EVENT AD_MIC_EVENT
static struct hda_verb ad1981_hp_init_verbs[] = { {0x05, AC_VERB_SET_EAPD_BTLENABLE, 0x00 }, /* default off */ @@ -2599,7 +2607,7 @@ static struct hda_verb ad1988_laptop_hp_off[] = { { } /* end */ };
-#define AD1988_HP_EVENT 0x01 +#define AD1988_HP_EVENT AD_HP_EVENT
static struct hda_verb ad1988_laptop_init_verbs[] = { /* Front, Surround, CLFE, side DAC; unmute as default */ @@ -3936,8 +3944,8 @@ static void ad1884a_hp_automic(struct hda_codec *codec) present ? 0 : 1); }
-#define AD1884A_HP_EVENT 0x37 -#define AD1884A_MIC_EVENT 0x36 +#define AD1884A_HP_EVENT AD_HP_EVENT +#define AD1884A_MIC_EVENT AD_MIC_EVENT
/* unsolicited event for HP jack sensing */ static void ad1884a_hp_unsol_event(struct hda_codec *codec, unsigned int res)

On Monday 19 April 2010, Takashi Iwai wrote:
commit ea52bf260ecbb175339af3178c15788df21b7516 Author: Daniel T Chen crimsun@ubuntu.com Date: Sun Dec 27 18:48:29 2009 -0500
ALSA: hda: Add powerdown for Analog Devices HDA codecs
Could you try to revert it?
Yep, that's the culprit.
Let me know if a fix needs to be tested.
Thanks, FJP
participants (2)
-
Frans Pop
-
Takashi Iwai