diff mbox

PROBLEM: [Lenovo ThinkPad X61s] Speaker volume mutes itself in random intervals after upgrading from 3.11 to 3.15.

Message ID s5hwqcy5pit.wl%tiwai@suse.de (mailing list archive)
State New, archived
Headers show

Commit Message

Takashi Iwai June 3, 2014, 9:08 a.m. UTC
At Tue, 03 Jun 2014 00:41:48 -0700,
Alex Fedora wrote:
> 
> On 06/02/2014 05:05 AM, Takashi Iwai wrote:
> > At Mon, 02 Jun 2014 02:49:16 -0700,
> > Alex Fedora wrote:
> >> On 06/02/2014 02:15 AM, Takashi Iwai wrote:
> >>> At Mon, 02 Jun 2014 01:55:16 -0700,
> >>> Alex Fedora wrote:
> >>>> On 06/02/2014 01:03 AM, Takashi Iwai wrote:
> >>>>> At Sat, 31 May 2014 23:54:26 -0700,
> >>>>> Alex Fedora wrote:
> >>>>>> Hi,
> >>>>>>
> >>>>>> Please see problem description below. I've captured alsa info output for
> >>>>>> the latest kernel. Kernel just before the regression. And info from the
> >>>>>> kernel with the offending commit. But I had to calculate diff from first
> >>>>>> one to fit to 100K limit. If you want, I can send all 3 files as an
> >>>>>> attachments. Also the latest version of the kernel was took from
> >>>>>> http://kernel.ubuntu.com/~kernel-ppa/mainline/daily/current/linux-image-3.15.0-999-generic_3.15.0-999.201405310205_amd64.deb
> >>>>>> .
> >>>>>>
> >>>>>> Thank you,
> >>>>>> Alex
> >>>>>>
> >>>>>> [1.] One line summary of the problem: [Lenovo ThinkPad X61s] Speaker
> >>>>>> volume mutes itself in random intervals after upgrade to latest kernel
> >>>>>> [2.] Full description of the problem/report:
> >>>>>>
> >>>>>> Speaker mutes itself in random intervals. Headphones are working fine at
> >>>>>> that moment. I can see what volume of the Speaker drops to 0% and then
> >>>>>> back to 100% using alsamixer. It seems like Internal Mic Boost also
> >>>>>> jumps from 100% to 0% and back. It is regression from
> >>>>>> 5ccc618fee67f0f0b2122dd4b32a02fd2b6a1569 (ALSA: hda - Remove static
> >>>>>> quirks for AD1884/1984 & variants). I've tested previous commit
> >>>>>> aa95d61b43e0fcb0b2ce68e5efa37174fd9e5cd3 (ALSA: hda - Remove static
> >>>>>> quirks for AD1882) and audio works as expected.
> >>>>>>
> >>>>>> New kernel shows two controls "Headphone Playback Volume" and "Speaker
> >>>>>> Playback Volume". But old one shows single control "PCM Playback
> >>>>>> Volume". "Speaker Playback Volume" is the one which gets muted randomly.
> >>>>> Are you using PulseAudio?  If yes, does the problem happen without PA?
> >>>>> This kind of random mute/unmute tends to be an issue of bogus
> >>>>> headphone or mic jack detection.
> >>>>>
> >>>>>
> >>>>> Takashi
> >>>>>
> >>>> Hi Takashi,
> >>>>
> >>>> Yes, I'm using  PulseAudio. I've removed it and issue gone away. It
> >>>> returned back after reinstalling it. This is still driver bug, right?
> >>> Yes.  So PA seems confused by some bogus information by the driver.
> >>>
> >>> Try to run "alsactl monitor 0", maybe better without PA at first.
> >>> Do you see occasional events about the jack detection even if you
> >>> don't plug/unplug?  And, try it also with PA.
> >>>
> >>>
> >>> Takashi
> >>>
> >> Yes, I can see a lot of events even if I don't plug/unplug anything.
> >> Even more if I'm using PA.
> >>
> >> No pulseaudio:
> >>
> >> card 0, #22 (0,0,0,Mic Jack,0) VALUE
> >> card 0, #23 (0,0,0,Headphone Jack,0) VALUE
> >> card 0, #23 (0,0,0,Headphone Jack,0) VALUE
> > Thanks.  These are definitely bogus events.  No wonder that PA gets
> > screwed up.
> >
> > Could you try the patch below?
> >
> >
> > Takashi
> >
> > ---
> > diff --git a/sound/pci/hda/patch_analog.c b/sound/pci/hda/patch_analog.c
> > index 06275f8807a8..fa626648d746 100644
> > --- a/sound/pci/hda/patch_analog.c
> > +++ b/sound/pci/hda/patch_analog.c
> > @@ -191,7 +191,6 @@ static int ad198x_parse_auto_config(struct hda_codec *codec, bool indep_hp)
> >   	int err;
> >   
> >   	codec->spdif_status_reset = 1;
> > -	codec->no_trigger_sense = 1;
> >   	codec->no_sticky_stream = 1;
> >   
> >   	spec->gen.indep_hp = indep_hp;
> > @@ -377,6 +376,8 @@ static int patch_ad1986a(struct hda_codec *codec)
> >   	/* AD1986A has the inverted EAPD implementation */
> >   	codec->inv_eapd = 1;
> >   
> > +	codec->no_trigger_sense = 1;
> > +
> >   	spec->gen.mixer_nid = 0x07;
> >   	spec->gen.beep_nid = 0x19;
> >   	set_beep_amp(spec, 0x18, 0, HDA_OUTPUT);
> > @@ -500,6 +501,8 @@ static int patch_ad1983(struct hda_codec *codec)
> >   		return err;
> >   	spec = codec->spec;
> >   
> > +	codec->no_trigger_sense = 1;
> > +
> >   	spec->gen.mixer_nid = 0x0e;
> >   	spec->gen.beep_nid = 0x10;
> >   	set_beep_amp(spec, 0x10, 0, HDA_OUTPUT);
> > @@ -588,6 +591,8 @@ static int patch_ad1981(struct hda_codec *codec)
> >   		return -ENOMEM;
> >   	spec = codec->spec;
> >   
> > +	codec->no_trigger_sense = 1;
> > +
> >   	spec->gen.mixer_nid = 0x0e;
> >   	spec->gen.beep_nid = 0x10;
> >   	set_beep_amp(spec, 0x0d, 0, HDA_OUTPUT);
> > @@ -913,6 +918,8 @@ static int patch_ad1988(struct hda_codec *codec)
> >   		return err;
> >   	spec = codec->spec;
> >   
> > +	codec->no_trigger_sense = 1;
> > +
> >   	spec->gen.mixer_nid = 0x20;
> >   	spec->gen.mixer_merge_nid = 0x21;
> >   	spec->gen.beep_nid = 0x10;
> > @@ -1140,6 +1147,8 @@ static int patch_ad1882(struct hda_codec *codec)
> >   		return err;
> >   	spec = codec->spec;
> >   
> > +	codec->no_trigger_sense = 1;
> > +
> >   	spec->gen.mixer_nid = 0x20;
> >   	spec->gen.mixer_merge_nid = 0x21;
> >   	spec->gen.beep_nid = 0x10;
> > .
> >
> 
> I've applied the patch and rebuild the kernel. But it didn't solve the 
> problem. I have applied the patch to kernel 3.13.11.2. Does it matter? 
> Should I try to download latest kernel and try to apply patch to it?

It should be OK with 3.13.x as long as the patch is cleanly applied,
but better to test with the very latest kernel, I'd say.


> Here is the output of the monitor with PA enabled:

At this moment, let's concentrate on non-PA case.  Then there should
be any events reported.  Especially "XXX Jack" ones shouldn't be
reported unless plugged/unplugged.

Is the power-saving mode disabled?  Check
/sys/module/snd_hda_intel/parameters/power_save.  Echo 0 to that file
for disabling it.

Maybe the surest way (and equivalent with the previous for your
device) is a oneliner like below.  If it doesn't work either (you
still see the spurious jack events), the problem isn't about the
trigger sense setup.


Takashi

---

Comments

Alex Fedora June 4, 2014, 7:29 a.m. UTC | #1
On 06/03/2014 02:08 AM, Takashi Iwai wrote:
> At Tue, 03 Jun 2014 00:41:48 -0700,
> Alex Fedora wrote:
>> On 06/02/2014 05:05 AM, Takashi Iwai wrote:
>>> At Mon, 02 Jun 2014 02:49:16 -0700,
>>> Alex Fedora wrote:
>>>> On 06/02/2014 02:15 AM, Takashi Iwai wrote:
>>>>> At Mon, 02 Jun 2014 01:55:16 -0700,
>>>>> Alex Fedora wrote:
>>>>>> On 06/02/2014 01:03 AM, Takashi Iwai wrote:
>>>>>>> At Sat, 31 May 2014 23:54:26 -0700,
>>>>>>> Alex Fedora wrote:
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> Please see problem description below. I've captured alsa info output for
>>>>>>>> the latest kernel. Kernel just before the regression. And info from the
>>>>>>>> kernel with the offending commit. But I had to calculate diff from first
>>>>>>>> one to fit to 100K limit. If you want, I can send all 3 files as an
>>>>>>>> attachments. Also the latest version of the kernel was took from
>>>>>>>> http://kernel.ubuntu.com/~kernel-ppa/mainline/daily/current/linux-image-3.15.0-999-generic_3.15.0-999.201405310205_amd64.deb
>>>>>>>> .
>>>>>>>>
>>>>>>>> Thank you,
>>>>>>>> Alex
>>>>>>>>
>>>>>>>> [1.] One line summary of the problem: [Lenovo ThinkPad X61s] Speaker
>>>>>>>> volume mutes itself in random intervals after upgrade to latest kernel
>>>>>>>> [2.] Full description of the problem/report:
>>>>>>>>
>>>>>>>> Speaker mutes itself in random intervals. Headphones are working fine at
>>>>>>>> that moment. I can see what volume of the Speaker drops to 0% and then
>>>>>>>> back to 100% using alsamixer. It seems like Internal Mic Boost also
>>>>>>>> jumps from 100% to 0% and back. It is regression from
>>>>>>>> 5ccc618fee67f0f0b2122dd4b32a02fd2b6a1569 (ALSA: hda - Remove static
>>>>>>>> quirks for AD1884/1984 & variants). I've tested previous commit
>>>>>>>> aa95d61b43e0fcb0b2ce68e5efa37174fd9e5cd3 (ALSA: hda - Remove static
>>>>>>>> quirks for AD1882) and audio works as expected.
>>>>>>>>
>>>>>>>> New kernel shows two controls "Headphone Playback Volume" and "Speaker
>>>>>>>> Playback Volume". But old one shows single control "PCM Playback
>>>>>>>> Volume". "Speaker Playback Volume" is the one which gets muted randomly.
>>>>>>> Are you using PulseAudio?  If yes, does the problem happen without PA?
>>>>>>> This kind of random mute/unmute tends to be an issue of bogus
>>>>>>> headphone or mic jack detection.
>>>>>>>
>>>>>>>
>>>>>>> Takashi
>>>>>>>
>>>>>> Hi Takashi,
>>>>>>
>>>>>> Yes, I'm using  PulseAudio. I've removed it and issue gone away. It
>>>>>> returned back after reinstalling it. This is still driver bug, right?
>>>>> Yes.  So PA seems confused by some bogus information by the driver.
>>>>>
>>>>> Try to run "alsactl monitor 0", maybe better without PA at first.
>>>>> Do you see occasional events about the jack detection even if you
>>>>> don't plug/unplug?  And, try it also with PA.
>>>>>
>>>>>
>>>>> Takashi
>>>>>
>>>> Yes, I can see a lot of events even if I don't plug/unplug anything.
>>>> Even more if I'm using PA.
>>>>
>>>> No pulseaudio:
>>>>
>>>> card 0, #22 (0,0,0,Mic Jack,0) VALUE
>>>> card 0, #23 (0,0,0,Headphone Jack,0) VALUE
>>>> card 0, #23 (0,0,0,Headphone Jack,0) VALUE
>>> Thanks.  These are definitely bogus events.  No wonder that PA gets
>>> screwed up.
>>>
>>> Could you try the patch below?
>>>
>>>
>>> Takashi
>>>
>>> ---
>>> diff --git a/sound/pci/hda/patch_analog.c b/sound/pci/hda/patch_analog.c
>>> index 06275f8807a8..fa626648d746 100644
>>> --- a/sound/pci/hda/patch_analog.c
>>> +++ b/sound/pci/hda/patch_analog.c
>>> @@ -191,7 +191,6 @@ static int ad198x_parse_auto_config(struct hda_codec *codec, bool indep_hp)
>>>    	int err;
>>>    
>>>    	codec->spdif_status_reset = 1;
>>> -	codec->no_trigger_sense = 1;
>>>    	codec->no_sticky_stream = 1;
>>>    
>>>    	spec->gen.indep_hp = indep_hp;
>>> @@ -377,6 +376,8 @@ static int patch_ad1986a(struct hda_codec *codec)
>>>    	/* AD1986A has the inverted EAPD implementation */
>>>    	codec->inv_eapd = 1;
>>>    
>>> +	codec->no_trigger_sense = 1;
>>> +
>>>    	spec->gen.mixer_nid = 0x07;
>>>    	spec->gen.beep_nid = 0x19;
>>>    	set_beep_amp(spec, 0x18, 0, HDA_OUTPUT);
>>> @@ -500,6 +501,8 @@ static int patch_ad1983(struct hda_codec *codec)
>>>    		return err;
>>>    	spec = codec->spec;
>>>    
>>> +	codec->no_trigger_sense = 1;
>>> +
>>>    	spec->gen.mixer_nid = 0x0e;
>>>    	spec->gen.beep_nid = 0x10;
>>>    	set_beep_amp(spec, 0x10, 0, HDA_OUTPUT);
>>> @@ -588,6 +591,8 @@ static int patch_ad1981(struct hda_codec *codec)
>>>    		return -ENOMEM;
>>>    	spec = codec->spec;
>>>    
>>> +	codec->no_trigger_sense = 1;
>>> +
>>>    	spec->gen.mixer_nid = 0x0e;
>>>    	spec->gen.beep_nid = 0x10;
>>>    	set_beep_amp(spec, 0x0d, 0, HDA_OUTPUT);
>>> @@ -913,6 +918,8 @@ static int patch_ad1988(struct hda_codec *codec)
>>>    		return err;
>>>    	spec = codec->spec;
>>>    
>>> +	codec->no_trigger_sense = 1;
>>> +
>>>    	spec->gen.mixer_nid = 0x20;
>>>    	spec->gen.mixer_merge_nid = 0x21;
>>>    	spec->gen.beep_nid = 0x10;
>>> @@ -1140,6 +1147,8 @@ static int patch_ad1882(struct hda_codec *codec)
>>>    		return err;
>>>    	spec = codec->spec;
>>>    
>>> +	codec->no_trigger_sense = 1;
>>> +
>>>    	spec->gen.mixer_nid = 0x20;
>>>    	spec->gen.mixer_merge_nid = 0x21;
>>>    	spec->gen.beep_nid = 0x10;
>>> .
>>>
>> I've applied the patch and rebuild the kernel. But it didn't solve the
>> problem. I have applied the patch to kernel 3.13.11.2. Does it matter?
>> Should I try to download latest kernel and try to apply patch to it?
> It should be OK with 3.13.x as long as the patch is cleanly applied,
> but better to test with the very latest kernel, I'd say.
Yes, it have applied to that version without conflicts. I've used that 
repo for bisection of that problem.
>
>
>> Here is the output of the monitor with PA enabled:
> At this moment, let's concentrate on non-PA case.  Then there should
> be any events reported.  Especially "XXX Jack" ones shouldn't be
> reported unless plugged/unplugged.
I've applied the latest  patch you send. It didn't solve the problem. 
Still can see random events (non-PA):

card 0, #22 (0,0,0,Mic Jack,0) VALUE
card 0, #23 (0,0,0,Headphone Jack,0) VALUE
card 0, #23 (0,0,0,Headphone Jack,0) VALUE
card 0, #22 (0,0,0,Mic Jack,0) VALUE
card 0, #22 (0,0,0,Mic Jack,0) VALUE
card 0, #23 (0,0,0,Headphone Jack,0) VALUE
card 0, #23 (0,0,0,Headphone Jack,0) VALUE
card 0, #22 (0,0,0,Mic Jack,0) VALUE
card 0, #22 (0,0,0,Mic Jack,0) VALUE
card 0, #23 (0,0,0,Headphone Jack,0) VALUE
card 0, #23 (0,0,0,Headphone Jack,0) VALUE
card 0, #22 (0,0,0,Mic Jack,0) VALUE
card 0, #22 (0,0,0,Mic Jack,0) VALUE
>
> Is the power-saving mode disabled?  Check
> /sys/module/snd_hda_intel/parameters/power_save.  Echo 0 to that file
> for disabling it.
It was set to 0. I tried to set to 1 and back. Didn't help. Still can 
see Headphone Jack events.
>
> Maybe the surest way (and equivalent with the previous for your
> device) is a oneliner like below.  If it doesn't work either (you
> still see the spurious jack events), the problem isn't about the
> trigger sense setup.
Unfortunately it didn't help.

> Takashi
>
> ---
> diff --git a/sound/pci/hda/patch_analog.c b/sound/pci/hda/patch_analog.c
> index 06275f8807a8..fcbda351e340 100644
> --- a/sound/pci/hda/patch_analog.c
> +++ b/sound/pci/hda/patch_analog.c
> @@ -191,7 +191,7 @@ static int ad198x_parse_auto_config(struct hda_codec *codec, bool indep_hp)
>   	int err;
>   
>   	codec->spdif_status_reset = 1;
> -	codec->no_trigger_sense = 1;
> +	//codec->no_trigger_sense = 1;
>   	codec->no_sticky_stream = 1;
>   
>   	spec->gen.indep_hp = indep_hp;
> .
>
Thanks,
Alex
diff mbox

Patch

diff --git a/sound/pci/hda/patch_analog.c b/sound/pci/hda/patch_analog.c
index 06275f8807a8..fcbda351e340 100644
--- a/sound/pci/hda/patch_analog.c
+++ b/sound/pci/hda/patch_analog.c
@@ -191,7 +191,7 @@  static int ad198x_parse_auto_config(struct hda_codec *codec, bool indep_hp)
 	int err;
 
 	codec->spdif_status_reset = 1;
-	codec->no_trigger_sense = 1;
+	//codec->no_trigger_sense = 1;
 	codec->no_sticky_stream = 1;
 
 	spec->gen.indep_hp = indep_hp;