[alsa-devel] [PATCH] ALSA: hda - More pop noise fixes for Dell XPS 13 9333

Gabriele Mazzotta gabriele.mzt at gmail.com
Fri Aug 8 10:49:25 CEST 2014


On Friday 08 August 2014 08:11:18 Takashi Iwai wrote:
> At Thu, 07 Aug 2014 18:35:39 +0200,
> Gabriele Mazzotta wrote:
> > 
> > On init, mic-in is always set as input source, indipendently on what
> > is plugged in. Since setting/unsetting mic-in as input source causes
> > a pop noise, make sure the internal microphone is selected as input
> > source on boot.
> > 
> > On shutdown, make sure the codec is not suspended as that would cause
> > a pop noise.
> > 
> > Signed-off-by: Gabriele Mazzotta <gabriele.mzt at gmail.com>
> > ---
> >  sound/pci/hda/hda_codec.c     |  2 ++
> >  sound/pci/hda/hda_codec.h     |  1 +
> >  sound/pci/hda/patch_realtek.c | 12 ++++++++++++
> >  3 files changed, 15 insertions(+)
> > 
> > diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
> > index 4c20277..92d8292 100644
> > --- a/sound/pci/hda/hda_codec.c
> > +++ b/sound/pci/hda/hda_codec.c
> > @@ -5348,6 +5348,8 @@ void snd_hda_bus_reboot_notify(struct hda_bus *bus)
> >  	if (!bus)
> >  		return;
> >  	list_for_each_entry(codec, &bus->codec_list, list) {
> > +		if (codec->resume_at_reboot)
> > +			hda_call_codec_resume(codec);
> 
> Do you really need the resume at reboot?  I thought the codec needs
> power down at reboot, i.e. rather it needs suspend.

Yes, the pop noise happens if it's suspended.
Now that I payed more attention, the pop noise happens only when 
rebooting the laptop and not when powering it down.
Also, the noise is heard quite late, I think the kernel is no longer 
running when I hear it.
I will try to better understand what is actually happening and why
resuming prevents the noise.

> Since you apply actually two individual changes, it's better to split
> patches: one for adding the power-down at reboot, another for
> initializing cur_mux properly.
> 
> Also, it's recommended to put a bugzilla link in the changelog, so
> that other people can follow the information and discussion.
> 
> Last but not least, please put maintainers to Cc at the next time, so
> that it won't be missed.

I will do it.

Thanks,

Gabriele

> 
> thanks,
> 
> Takashi
> 
> >  		if (hda_codec_is_power_on(codec) &&
> >  		    codec->patch_ops.reboot_notify)
> >  			codec->patch_ops.reboot_notify(codec);
> > diff --git a/sound/pci/hda/hda_codec.h b/sound/pci/hda/hda_codec.h
> > index 5825aa1..5c3c66e 100644
> > --- a/sound/pci/hda/hda_codec.h
> > +++ b/sound/pci/hda/hda_codec.h
> > @@ -366,6 +366,7 @@ struct hda_codec {
> >  	unsigned int cached_write:1;	/* write only to caches */
> >  	unsigned int dp_mst:1; /* support DP1.2 Multi-stream transport */
> >  	unsigned int dump_coef:1; /* dump processing coefs in codec proc file */
> > +	unsigned int resume_at_reboot:1; /* resume codec at reboot */
> >  #ifdef CONFIG_PM
> >  	unsigned int power_on :1;	/* current (global) power-state */
> >  	unsigned int d3_stop_clk:1;	/* support D3 operation without BCLK */
> > diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
> > index b60824e..defaa2a 100644
> > --- a/sound/pci/hda/patch_realtek.c
> > +++ b/sound/pci/hda/patch_realtek.c
> > @@ -4018,8 +4018,20 @@ static void alc_fixup_dell_xps13(struct hda_codec *codec,
> >  {
> >  	if (action == HDA_FIXUP_ACT_PROBE) {
> >  		struct alc_spec *spec = codec->spec;
> > +		struct hda_input_mux *imux = &spec->gen.input_mux;
> > +		int i;
> > +
> >  		spec->shutup = alc_no_shutup;
> >  		codec->power_filter = alc_power_filter_xps13;
> > +		codec->resume_at_reboot = 1;
> > +
> > +		/* Make the internal mic the default input source. */
> > +		for (i = 0; i < imux->num_items; i++) {
> > +			if (spec->gen.imux_pins[i] == 0x12) {
> > +				spec->gen.cur_mux[0] = i;
> > +				break;
> > +			}
> > +		}
> >  	}
> >  }
> >  
> 


More information about the Alsa-devel mailing list