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

Takashi Iwai tiwai at suse.de
Mon Apr 19 14:14:57 CEST 2010


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 at 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)


More information about the Alsa-devel mailing list