[alsa-devel] Grey noise with HDA Intel PCH

Takashi Iwai tiwai at suse.de
Thu Aug 14 17:48:55 CEST 2014


At Thu, 14 Aug 2014 17:26:58 +0200,
Julian Wollrath wrote:
> 
> Am Thu, 14 Aug 2014 17:11:32 +0200
> schrieb Takashi Iwai <tiwai at suse.de>:
> 
> > At Thu, 14 Aug 2014 17:04:59 +0200,
> > Julian Wollrath wrote:
> > > 
> > > Am Thu, 14 Aug 2014 16:47:46 +0200
> > > schrieb Takashi Iwai <tiwai at suse.de>:
> > > 
> > > > At Thu, 14 Aug 2014 16:39:14 +0200,
> > > > Julian Wollrath wrote:
> > > > > 
> > > > > Am Thu, 14 Aug 2014 16:09:51 +0200
> > > > > schrieb Takashi Iwai <tiwai at suse.de>:
> > > > > 
> > > > > > At Thu, 14 Aug 2014 16:07:37 +0200,
> > > > > > Julian Wollrath wrote:
> > > > > > > 
> > > > > > > > > > > Simple mixer control 'Mic',0
> > > > > > > > > > >   Front Left: Playback 0 [0%] [-34.50dB] [on]
> > > > > > > > > > >   Front Right: Playback 0 [0%] [-34.50dB] [on]
> > > > > > > > > > 
> > > > > > > > > > This plays any noise from the mic input.
> > > > > > > > > Turning it off makes no difference since capture is
> > > > > > > > > turned off anyway:
> > > > > > > > 
> > > > > > > > This is a loopback mixer element, it has nothing to do
> > > > > > > > with capture stream.
> > > > > > > > 
> > > > > > > > The likely culprit of the static noises is the signal
> > > > > > > > from the analog loopback.  In some cases, you can disable
> > > > > > > > the whole loopback via "Loopback Mixing" mixer element on
> > > > > > > > the fly.  In some cases, you'd need to disable each mixer
> > > > > > > > input (e.g. "Mic Playback Switch"). In some cases (e.g.
> > > > > > > > on some Sony and Dell laptops), you'd need to disable the
> > > > > > > > complete analog loopback at the initialization.
> > > > > > > > 
> > > > > > > > The last one can be done via the early patching or sysfs
> > > > > > > > reconfiguration, pass "mixer_nid = 0" hint.  See
> > > > > > > > HD-Audio.txt for a brief instruction.
> > > > > > > Sadly, that did not help.
> > > > > > 
> > > > > > Give alsa-info.sh output after your change to verify whether
> > > > > > you did correctly.
> > > > > Here it is, cheers:
> > > > 
> > > > Thanks.  The setup looks OK, the path is:
> > > >   DAC (0x02) -> mixer (0x0c) -> mixer (0x14)
> > > > and the mixer mutes the loopback path (index 1).
> > > > 
> > > > Is it the state where you still hear the static noise?
> > > Yes, the alsa-info.sh script was executed, while hearing the static
> > > noise.
> > 
> > OK.  And if you mute "Speaker" or "Headphone", the noise is gone, too,
> > right?
> No, if I mute "Speaker" (the internal laptop speaker) it is not gone. It
> is only gone, if I mute "Master" or have a headphone plugged in and
> mute "Headphone" or "Master".

Interesting.  The "Speaker" mute changes "Speaker Playback Switch",
and as you can see in alsa-info.sh output, this toggles the mute of
the speaker pin NID 0x14, i.e. the endpoint.  If "Master" influences,
it means to mute *both* Headphone and Speaker mutes would work.
Could you check this?

> More fascinating, it is not present, if the speaker is not muted and I
> disable powersaving via "echo '0' >
> '/sys/module/snd_hda_intel/parameters/power_save'" but even then, it is
> still present on the headphone.

Hm.  Is the noise audible when you playback a PCM stream, too?
For example, you can play a silent stream.

> > > > Also, what if you use the module option for snd-hda-intel
> > > > model=nofixup or model=generic?
> > > That did not change anything either. Passing the "mixer_nid = 0"
> > > hint also did not get rid of the static noise, when loading
> > > snd-hda-intel with model=nofixup resp. model=generic.
> > 
> > Did you reboot with setting the option in /etc/modprobe.d/*?
> > Reloading the module might not work for such a problem.
> No, I just unloaded every sound-related module and than loaded the
> module via "modprobe snd-hda-intel model=..." again.

Then always test with reboot.  The problem is about the
vendor-specific setups, and it's often sticky unless the cold boot.
At best, do the cold boot.  The warm boot doesn't cure always.

> > In either way, there should be some difference in alsa-info.sh output,
> > e.g. more (or less) mixer items with the model option.
> The difference is their, all the "Dock ..." entries were missing, when
> loading with the model="..." option.

Yes, and you should also see the difference in the kernel messages.

Another thing to check is to swap the DAC assignment.  There was a
similar problem on some Sony laptops, and we had to swap the DAC
assignment since the hardware seems to have some implicit assumption
of the DAC.  A test patch is below.


Takashi

---
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index 6b38ec3c6e57..10c47a0e6c70 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -3280,6 +3280,22 @@ static void alc269_fixup_pincfg_no_hp_to_lineout(struct hda_codec *codec,
 		spec->parse_flags = HDA_PINCFG_NO_HP_FIXUP;
 }
 
+static void alc269_fixup_thinkpad_dac_bind(struct hda_codec *codec,
+					   const struct hda_fixup *fix,
+					   int action)
+{
+	struct alc_spec *spec = codec->spec;
+	static hda_nid_t preferred_pairs[] = {
+		0x15, 0x02,
+		0x1b, 0x02,
+		0x14, 0x03,
+		0,
+	};
+
+	if (action == HDA_FIXUP_ACT_PRE_PROBE)
+		spec->gen.preferred_dacs = preferred_pairs;
+}
+
 static void alc269_fixup_hweq(struct hda_codec *codec,
 			       const struct hda_fixup *fix, int action)
 {
@@ -4358,6 +4374,7 @@ enum {
 	ALC269_FIXUP_HP_LINE1_MIC1_LED,
 	ALC269_FIXUP_INV_DMIC,
 	ALC269_FIXUP_LENOVO_DOCK,
+	ALC269_FIXUP_THINKPAD_DAC_BIND,
 	ALC269_FIXUP_NO_SHUTUP,
 	ALC286_FIXUP_SONY_MIC_NO_PRESENCE,
 	ALC269_FIXUP_PINCFG_NO_HP_TO_LINEOUT,
@@ -4576,6 +4593,12 @@ static const struct hda_fixup alc269_fixups[] = {
 		.chained = true,
 		.chain_id = ALC269_FIXUP_PINCFG_NO_HP_TO_LINEOUT
 	},
+	[ALC269_FIXUP_THINKPAD_DAC_BIND] = {
+		.type = HDA_FIXUP_FUNC,
+		.v.func = alc269_fixup_thinkpad_dac_bind,
+		.chained = true,
+		.chain_id = ALC269_FIXUP_LENOVO_DOCK,
+	},
 	[ALC269_FIXUP_PINCFG_NO_HP_TO_LINEOUT] = {
 		.type = HDA_FIXUP_FUNC,
 		.v.func = alc269_fixup_pincfg_no_hp_to_lineout,
@@ -5044,7 +5067,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
 	SND_PCI_QUIRK(0x17aa, 0x21ca, "Thinkpad L412", ALC269_FIXUP_SKU_IGNORE),
 	SND_PCI_QUIRK(0x17aa, 0x21e9, "Thinkpad Edge 15", ALC269_FIXUP_SKU_IGNORE),
 	SND_PCI_QUIRK(0x17aa, 0x21f6, "Thinkpad T530", ALC269_FIXUP_LENOVO_DOCK),
-	SND_PCI_QUIRK(0x17aa, 0x21fa, "Thinkpad X230", ALC269_FIXUP_LENOVO_DOCK),
+	SND_PCI_QUIRK(0x17aa, 0x21fa, "Thinkpad X230", ALC269_FIXUP_THINKPAD_DAC_BIND),
 	SND_PCI_QUIRK(0x17aa, 0x21f3, "Thinkpad T430", ALC269_FIXUP_LENOVO_DOCK),
 	SND_PCI_QUIRK(0x17aa, 0x21fb, "Thinkpad T430s", ALC269_FIXUP_LENOVO_DOCK),
 	SND_PCI_QUIRK(0x17aa, 0x2203, "Thinkpad X230 Tablet", ALC269_FIXUP_LENOVO_DOCK),


More information about the Alsa-devel mailing list