[alsa-devel] ALC892, Clevo P150HM: Input Source gets reset to "Mic" every resume

Raymond Yau superquad.vortex2 at gmail.com
Fri Feb 24 02:13:15 CET 2012


2012/2/24, Julian Sikorski <belegdol at gmail.com>:
> W dniu 09.12.2011 14:32, Raymond Yau pisze:
>> 2011/12/4 Julian Sikorski <belegdol at gmail.com>:
>>> Hi,
>>>
>>> whenever I resume the machine, the Input Source would get changed back
>>> from "Internal Mic" to "Mic". This is a bit annoying, because pulseaudio
>>> is unaware of that change. As a result, everything looks fine in
>>> pavucontrol but no sound gets recorded. A quick look at alsamixer -c0
>>> revealed the problem. My alsa info:
>>>
>>> http://www.alsa-project.org/db/?f=c5776b615a5f3b9ae624e4250fb0c2b69118ce26
>>>
>>> This is unrelated to the other problems I have been reporting, since
>>> this happens on a mostly-stock Fedora 3.1.2 kernel (the patch I added
>>> deals with xhci, not alsa).
>>
>> The problem seem can be reproduced by using hda-emu,
>> it is init_capsrc_for_pin() and alc_auto_init_input_src() write value
>> to cache before snd_hda_codec_resume_app() from cache
>>
>>
>>> get 28
>> 28 Input Source:0
>> ITEM: 0:Mic, 1:Internal Mic, 2:Line, VAL: [Mic]
>>> set 28 1
>> send: NID=0x23, VERB=0x360(set_amp_gain_mute,I:L#0), PARM=0x80
>> send: NID=0x23, VERB=0x350(set_amp_gain_mute,I:R#0), PARM=0x80
>> send: NID=0x23, VERB=0x361(set_amp_gain_mute,I:L#1), PARM=0x0
>> send: NID=0x23, VERB=0x351(set_amp_gain_mute,I:R#1), PARM=0x0
>>> get 28
>> 28 Input Source:0
>> ITEM: 0:Mic, 1:Internal Mic, 2:Line, VAL: [Internal Mic]
>>
>> pm
>> ** SUSPENDING **
>> ...
>> ** RESUMING **
>> PM-Notified
>> ...
>> exec_init_verbs
>> ...
>>
>> init_capsrc_for_pin 18
>> send: NID=0x23, VERB=0xb20(get_amp_gain_mute,I:L#0), PARM=0x0
>> receive: 0x0
>> send: NID=0x23, VERB=0xb00(get_amp_gain_mute,I:R#0), PARM=0x0
>> receive: 0x0
>> init capsrc for pin 19
>> send: NID=0x23, VERB=0xb20(get_amp_gain_mute,I:L#0), PARM=0x1
>> receive: 0x80
>> send: NID=0x23, VERB=0x361(set_amp_gain_mute,I:L#1), PARM=0x0
>> send: NID=0x23, VERB=0xb00(get_amp_gain_mute,I:R#0), PARM=0x1
>> receive: 0x80
>> send: NID=0x23, VERB=0x351(set_amp_gain_mute,I:R#1), PARM=0x0
>> init capsrc for pin 1a
>> send: NID=0x23, VERB=0xb20(get_amp_gain_mute,I:L#0), PARM=0x2
>> receive: 0x80
>> send: NID=0x23, VERB=0x362(set_amp_gain_mute,I:L#2), PARM=0x0
>>
>> alc_auto_init_input_src
>> send: NID=0x23, VERB=0x361(set_amp_gain_mute,I:L#1), PARM=0x80
>> send: NID=0x23, VERB=0x351(set_amp_gain_mute,I:R#1), PARM=0x80
>> send: NID=0x23, VERB=0x362(set_amp_gain_mute,I:L#2), PARM=0x80
>> send: NID=0x23, VERB=0x352(set_amp_gain_mute,I:R#2), PARM=0x80
>>
>> snd_hda_codec_resume_app
>> send: NID=0x23, VERB=0x363(set_amp_gain_mute,I:L#3), PARM=0x80
>> send: NID=0x23, VERB=0x353(set_amp_gain_mute,I:R#3), PARM=0x80
>> send: NID=0x23, VERB=0x364(set_amp_gain_mute,I:L#4), PARM=0x80
>> send: NID=0x23, VERB=0x354(set_amp_gain_mute,I:R#4), PARM=0x80
>> send: NID=0x23, VERB=0x365(set_amp_gain_mute,I:L#5), PARM=0x80
>> send: NID=0x23, VERB=0x355(set_amp_gain_mute,I:R#5), PARM=0x80
>> send: NID=0x23, VERB=0x366(set_amp_gain_mute,I:L#6), PARM=0x80
>> send: NID=0x23, VERB=0x356(set_amp_gain_mute,I:R#6), PARM=0x80
>> send: NID=0x23, VERB=0x367(set_amp_gain_mute,I:L#7), PARM=0x80
>> send: NID=0x23, VERB=0x357(set_amp_gain_mute,I:R#7), PARM=0x80
>> send: NID=0x23, VERB=0x368(set_amp_gain_mute,I:L#8), PARM=0x80
>> send: NID=0x23, VERB=0x358(set_amp_gain_mute,I:R#8), PARM=0x80
>> send: NID=0x23, VERB=0x369(set_amp_gain_mute,I:L#9), PARM=0x80
>> send: NID=0x23, VERB=0x359(set_amp_gain_mute,I:R#9), PARM=0x80
>> send: NID=0x23, VERB=0x36a(set_amp_gain_mute,I:L#10), PARM=0x80
>> send: NID=0x23, VERB=0x35a(set_amp_gain_mute,I:R#10), PARM=0x80
>> ...
>>
>>> get 28
>> 28 Input Source:0
>> ITEM: 0:Mic, 1:Internal Mic, 2:Line, VAL: [Mic]
> The problem still exists in 3.2.7-1.fc16.x86_64 kernel, is there any
> chance for a fix?
>
> Julian

A dirty hack is to swap the order of the external mic and internal mic
at the end of sort_autocfg_input_pins()


+	if (cfg->num_inputs > 1) {
+		struct auto_pin_cfg_item tmp;
+		tmp = cfg->inputs[0];
+		cfg->inputs[0] = cfg->inputs[1];
+		cfg->inputs[1] = tmp;
+	}


25 Input Source:0
ITEM: 0:Internal Mic, 1:Mic, 2:Line, VAL: [Internal Mic]


More information about the Alsa-devel mailing list