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

Alex Fedora alexander.fedora at gmail.com
Wed Jun 4 09:29:26 CEST 2014


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


More information about the Alsa-devel mailing list