[alsa-devel] Strange findings about the microphone in SigmaTel STAC9221 A1
My hda-intel card is with the following codec:
Codec: SigmaTel STAC9221 A1 Address: 0 Vendor Id: 0x83847680 Subsystem Id: 0x106b1700 Revision Id: 0x103401
I am using alsa 1.0.14rc4. I have a built-in microphone, which doesn't work, but today I found out something interesting. If I set the capture to minimum and place Mux at specific positions (Works with middle-ish and top, not bottom-ish) suddenly the mic started recording, but the quality is extremly bad. I have attached amixer and co. Does anyone have a clue what the issue is and how could possibly this little bit of random foundings to be used to possibly fix the mic?
Regards.
At Fri, 11 May 2007 10:48:44 +0100, Ivan N. Zlatev wrote:
My hda-intel card is with the following codec:
Codec: SigmaTel STAC9221 A1 Address: 0 Vendor Id: 0x83847680 Subsystem Id: 0x106b1700 Revision Id: 0x103401
I am using alsa 1.0.14rc4. I have a built-in microphone, which doesn't work, but today I found out something interesting. If I set the capture to minimum and place Mux at specific positions (Works with middle-ish and top, not bottom-ish) suddenly the mic started recording, but the quality is extremly bad. I have attached amixer and co. Does anyone have a clue what the issue is and how could possibly this little bit of random foundings to be used to possibly fix the mic?
If this is 100% reproducible, you'll see likely a difference in /proc/asound/card0/codec#* file between working and non-working states. Could you attach codec files in both states?
The quality problem is perhaps because of the wrong pin setting. It's set in Hi-Z without vref. But it's a bit strange because stac92xx_get_vref() should return the proper vref value. Could you check whether this really gets called and which value is returned, e.g. by adding printk() there?
Takashi
On 5/15/07, Takashi Iwai tiwai@suse.de wrote:
If this is 100% reproducible, you'll see likely a difference in /proc/asound/card0/codec#* file between working and non-working states. Could you attach codec files in both states?
I have to do 4 things to enable the microphone (a built-in one) as follows (with diffs of codec between steps)
1) Turn on capture and mux on and set them on max
Node 0x12 [Audio Selector] wcaps 0x30010d: Stereo Amp-Out Amp-Out caps: ofs=0x00, nsteps=0x04, stepsize=0x27, mute=0 - Amp-Out vals: [0x00 0x00] + Amp-Out vals: [0x04 0x04] Connection: 7 0x0e* 0x15 0x0f 0x0b 0x0c 0x0d 0x0a
Node 0x17 [Audio Selector] wcaps 0x300903: Stereo Amp-In Amp-In caps: N/A - Amp-In vals: [0x80 0x80] + Amp-In vals: [0x0e 0x0e] Connection: 1 0x12
2) Switch from Mic to Front Mic - no changes 3) Switch from Front Mic back to Mic
Node 0x12 [Audio Selector] wcaps 0x30010d: Stereo Amp-Out Amp-Out caps: ofs=0x00, nsteps=0x04, stepsize=0x27, mute=0 Amp-Out vals: [0x04 0x04] Connection: 7 - 0x0e* 0x15 0x0f 0x0b 0x0c 0x0d 0x0a + 0x0e 0x15 0x0f 0x0b* 0x0c 0x0d 0x0a
4) Put Capture on minimum and the mic will start recording with dodgy quality.
Node 0x17 [Audio Selector] wcaps 0x300903: Stereo Amp-In Amp-In caps: N/A - Amp-In vals: [0x0e 0x0e] + Amp-In vals: [0x00 0x00]
On 5/15/07, Takashi Iwai tiwai@suse.de wrote:
The quality problem is perhaps because of the wrong pin setting. It's set in Hi-Z without vref. But it's a bit strange because stac92xx_get_vref() should return the proper vref value. Could you check whether this really gets called and which value is returned, e.g. by adding printk() there?
It doesn't get called according to my tests.
I've also tested with Alsa HG, but I can no longer make the mic work with the steps descrived, not to mention that with imac-intel model I get no sound.
Regards.
At Tue, 15 May 2007 15:41:40 +0100, Ivan N. Zlatev wrote:
On 5/15/07, Takashi Iwai tiwai@suse.de wrote:
If this is 100% reproducible, you'll see likely a difference in /proc/asound/card0/codec#* file between working and non-working states. Could you attach codec files in both states?
I have to do 4 things to enable the microphone (a built-in one) as follows (with diffs of codec between steps)
- Turn on capture and mux on and set them on max
Node 0x12 [Audio Selector] wcaps 0x30010d: Stereo Amp-Out Amp-Out caps: ofs=0x00, nsteps=0x04, stepsize=0x27, mute=0
- Amp-Out vals: [0x00 0x00]
- Amp-Out vals: [0x04 0x04] Connection: 7 0x0e* 0x15 0x0f 0x0b 0x0c 0x0d 0x0a
Node 0x17 [Audio Selector] wcaps 0x300903: Stereo Amp-In Amp-In caps: N/A
- Amp-In vals: [0x80 0x80]
- Amp-In vals: [0x0e 0x0e] Connection: 1 0x12
- Switch from Mic to Front Mic - no changes
- Switch from Front Mic back to Mic
Node 0x12 [Audio Selector] wcaps 0x30010d: Stereo Amp-Out Amp-Out caps: ofs=0x00, nsteps=0x04, stepsize=0x27, mute=0 Amp-Out vals: [0x04 0x04] Connection: 7
0x0e* 0x15 0x0f 0x0b 0x0c 0x0d 0x0a
0x0e 0x15 0x0f 0x0b* 0x0c 0x0d 0x0a
- Put Capture on minimum and the mic will start recording with dodgy quality.
Node 0x17 [Audio Selector] wcaps 0x300903: Stereo Amp-In Amp-In caps: N/A
- Amp-In vals: [0x0e 0x0e]
- Amp-In vals: [0x00 0x00]
Perhaps the crutial point is "Input Source". The value currently shown there and the value the hardware is set are different. Could you check the connection of node 0x12 at the very beginning? I guess it's not 0x0b.
The other actions seem just for volume / mute controls. What happens if you use different values for "Capture Volume" and "Capture Mux Volume"?
On 5/15/07, Takashi Iwai tiwai@suse.de wrote:
The quality problem is perhaps because of the wrong pin setting. It's set in Hi-Z without vref. But it's a bit strange because stac92xx_get_vref() should return the proper vref value. Could you check whether this really gets called and which value is returned, e.g. by adding printk() there?
It doesn't get called according to my tests.
Hmm strange. This should be called from stac92xx_init(), line 1695.
I've also tested with Alsa HG, but I can no longer make the mic work with the steps descrived, not to mention that with imac-intel model I get no sound.
Then try to add model=macbook or model=macbook-pro-v2. Now iMac has its own pin setting (corresponding to model=imac-intel).
Takashi
I was wrong about _vref. Output %X of pincap and returned vref as follows on modprobe:
hda_codec: STAC922x, Apple subsys_id=106b1700 ALSA /root/tmp/alsa-driver-1.0.14rc4/pci/hda/hda_codec.c:2270: autoconfig: line_outs=1 (0xd/0x0/0x0/0x0/0x0) ALSA /root/tmp/alsa-driver-1.0.14rc4/pci/hda/hda_codec.c:2274: speaker_outs=1 (0xc/0x0/0x0/0x0/0x0) ALSA /root/tmp/alsa-driver-1.0.14rc4/pci/hda/hda_codec.c:2278: hp_outs=1 (0xa/0x0/0x0/0x0/0x0) ALSA /root/tmp/alsa-driver-1.0.14rc4/pci/hda/hda_codec.c:2286: inputs: mic=0xb, fmic=0xe, line=0xf, fline=0x0, cd=0x0, aux=0x0 17 - AC_PINCTL_VREF_80 0 - AC_PINCTL_VREF_0 17 - AC_PINCTL_VREF_80
Could you check the connection of node 0x12 at the very beginning? I guess it's not 0x0b.
Node 0x12 [Audio Selector] wcaps 0x30010d: Stereo Amp-Out Amp-Out caps: ofs=0x00, nsteps=0x04, stepsize=0x27, mute=0 Amp-Out vals: [0x00 0x00] Connection: 7 0x0e* 0x15 0x0f 0x0b 0x0c 0x0d 0x0a
Then try to add model=macbook or model=macbook-pro-v2. Now iMac has its own pin setting (corresponding to model=imac-intel).
I am on an intel imac. Also I wanted to mention that I have manged to get hold of the pin configs supplied by apple for windows for all apple systems. I mailed them last month to the list. I don't honestly know if they could be of any use to you. For example according to them for my codec subsystem's the pin config is:
[HKR\Settings\Pin\0A] CfgDflt = dword: 0x0121E21F Action = hex: 01,0A,81,0C,81,10,85,51,05,21 [HKR\Settings\Pin\0B] CfgDflt = dword: 0x90A7012E [HKR\Settings\Pin\0C] CfgDflt = dword: 0x9017E110 [HKR\Settings\Pin\0D] CfgDflt = dword: 0x400000FD [HKR\Settings\Pin\0E] CfgDflt = dword: 0x400000FE Action = hex: 01,10,81,0A,81,0C [HKR\Settings\Pin\0F] CfgDflt = dword: 0x0181E020 Action = hex: 09,0F [HKR\Settings\Pin\10] CfgDflt = dword: 0x1145E230 [HKR\Settings\Pin\11] CfgDflt = dword: 0x11C5E240 [HKR\Settings\Pin\15] CfgDflt = dword: 0x400000FC [HKR\Settings\Pin\1B] CfgDflt = dword: 0x400000FB [HKR\Settings\GPIO] 00 = hex: 85 01 = hex: 82
This in comparison to the current imac-intel pinconfig
static unsigned int imac_intel_pin_configs[10] = { 0x0121e230, 0x90a70120, 0x9017e110, 0x400000fe, 0x400000fd, 0x0181e021, 0x1145e040, 0x400000fa, 0x400000fc, 0x400000fb, };
My mail on the archive with the pinconfigs is http://mailman.alsa-project.org/pipermail/alsa-devel/2007-April/000731.html
I have tried using this pinconfig with rc4 and the input is set okay, but I still need to set capture to 0. A major issue is that there is no sound with this pinconfig. This is the output of modprobe:
ALSA /root/tmp/alsa-driver-1.0.14rc4/pci/hda/hda_codec.c:1795: hda_codec: model 'imac-intel' is selected ALSA /root/tmp/alsa-driver-1.0.14rc4/pci/hda/hda_codec.c:2270: autoconfig: line_outs=0 (0x0/0x0/0x0/0x0/0x0) ALSA /root/tmp/alsa-driver-1.0.14rc4/pci/hda/hda_codec.c:2274: speaker_outs=1 (0xc/0x0/0x0/0x0/0x0) ALSA /root/tmp/alsa-driver-1.0.14rc4/pci/hda/hda_codec.c:2278: hp_outs=1 (0xa/0x0/0x0/0x0/0x0) ALSA /root/tmp/alsa-driver-1.0.14rc4/pci/hda/hda_codec.c:2286: inputs: mic=0xb, fmic=0x0, line=0xf, fline=0x0, cd=0x0, aux=0x0 17 - AC_PINCTL_VREF_80 17 - AC_PINCTL_VREF_80
I have attached the initial codec info after modprobing with the pinconfig from apple.
What happens if you use different values for "Capture Volume" and "Capture Mux Volume"?
There seems to be a proportional dependancy. If I increase caption vol by 1 and lower capture mux vol by 1 it will record (not 100% sure on the 1 to 1 factor here).
Else, recording doesn't work if I change capture volume to something > 0. This is the change in the codec:
Node 0x17 [Audio Selector] wcaps 0x300903: Stereo Amp-In Amp-In caps: N/A - Amp-In vals: [0x00 0x00] + Amp-In vals: [0x0e 0x0e] Connection: 1 0x12
I can provide you a root ssh account on the machine if you want?
On 5/15/07, Ivan N. Zlatev contact@i-nz.net wrote:
I have tried using this pinconfig with rc4 and the input is set okay, but I still need to set capture to 0.
Actually wrong. I still have to change from mic to line and back.
At Tue, 15 May 2007 18:11:58 +0100, Ivan N. Zlatev wrote:
I was wrong about _vref. Output %X of pincap and returned vref as follows on modprobe:
hda_codec: STAC922x, Apple subsys_id=106b1700 ALSA /root/tmp/alsa-driver-1.0.14rc4/pci/hda/hda_codec.c:2270: autoconfig: line_outs=1 (0xd/0x0/0x0/0x0/0x0) ALSA /root/tmp/alsa-driver-1.0.14rc4/pci/hda/hda_codec.c:2274: speaker_outs=1 (0xc/0x0/0x0/0x0/0x0) ALSA /root/tmp/alsa-driver-1.0.14rc4/pci/hda/hda_codec.c:2278: hp_outs=1 (0xa/0x0/0x0/0x0/0x0) ALSA /root/tmp/alsa-driver-1.0.14rc4/pci/hda/hda_codec.c:2286: inputs: mic=0xb, fmic=0xe, line=0xf, fline=0x0, cd=0x0, aux=0x0 17 - AC_PINCTL_VREF_80 0 - AC_PINCTL_VREF_0 17 - AC_PINCTL_VREF_80
Hmm, what is the second call with the number 0?
Could you check the connection of node 0x12 at the very beginning? I guess it's not 0x0b.
Node 0x12 [Audio Selector] wcaps 0x30010d: Stereo Amp-Out Amp-Out caps: ofs=0x00, nsteps=0x04, stepsize=0x27, mute=0 Amp-Out vals: [0x00 0x00] Connection: 7 0x0e* 0x15 0x0f 0x0b 0x0c 0x0d 0x0a
Then try to add model=macbook or model=macbook-pro-v2. Now iMac has its own pin setting (corresponding to model=imac-intel).
I am on an intel imac. Also I wanted to mention that I have manged to get hold of the pin configs supplied by apple for windows for all apple systems. I mailed them last month to the list. I don't honestly know if they could be of any use to you. For example according to them for my codec subsystem's the pin config is:
[HKR\Settings\Pin\0A] CfgDflt = dword: 0x0121E21F Action = hex: 01,0A,81,0C,81,10,85,51,05,21 [HKR\Settings\Pin\0B] CfgDflt = dword: 0x90A7012E [HKR\Settings\Pin\0C] CfgDflt = dword: 0x9017E110 [HKR\Settings\Pin\0D] CfgDflt = dword: 0x400000FD [HKR\Settings\Pin\0E] CfgDflt = dword: 0x400000FE Action = hex: 01,10,81,0A,81,0C [HKR\Settings\Pin\0F] CfgDflt = dword: 0x0181E020 Action = hex: 09,0F [HKR\Settings\Pin\10] CfgDflt = dword: 0x1145E230 [HKR\Settings\Pin\11] CfgDflt = dword: 0x11C5E240 [HKR\Settings\Pin\15] CfgDflt = dword: 0x400000FC [HKR\Settings\Pin\1B] CfgDflt = dword: 0x400000FB [HKR\Settings\GPIO] 00 = hex: 85 01 = hex: 82
This in comparison to the current imac-intel pinconfig
static unsigned int imac_intel_pin_configs[10] = { 0x0121e230, 0x90a70120, 0x9017e110, 0x400000fe, 0x400000fd, 0x0181e021, 0x1145e040, 0x400000fa, 0x400000fc, 0x400000fb, };
My mail on the archive with the pinconfigs is http://mailman.alsa-project.org/pipermail/alsa-devel/2007-April/000731.html
Oh, then please give a similar array expression instead of files. It's so sucking to retrieve files from this ML archive and then doing something what you already did...
I have tried using this pinconfig with rc4 and the input is set okay, but I still need to set capture to 0. A major issue is that there is no sound with this pinconfig. This is the output of modprobe:
ALSA /root/tmp/alsa-driver-1.0.14rc4/pci/hda/hda_codec.c:1795: hda_codec: model 'imac-intel' is selected ALSA /root/tmp/alsa-driver-1.0.14rc4/pci/hda/hda_codec.c:2270: autoconfig: line_outs=0 (0x0/0x0/0x0/0x0/0x0) ALSA /root/tmp/alsa-driver-1.0.14rc4/pci/hda/hda_codec.c:2274: speaker_outs=1 (0xc/0x0/0x0/0x0/0x0) ALSA /root/tmp/alsa-driver-1.0.14rc4/pci/hda/hda_codec.c:2278: hp_outs=1 (0xa/0x0/0x0/0x0/0x0) ALSA /root/tmp/alsa-driver-1.0.14rc4/pci/hda/hda_codec.c:2286: inputs: mic=0xb, fmic=0x0, line=0xf, fline=0x0, cd=0x0, aux=0x0 17 - AC_PINCTL_VREF_80 17 - AC_PINCTL_VREF_80
I have attached the initial codec info after modprobing with the pinconfig from apple.
Which one? There are so many posts...
What happens if you use different values for "Capture Volume" and "Capture Mux Volume"?
There seems to be a proportional dependancy. If I increase caption vol by 1 and lower capture mux vol by 1 it will record (not 100% sure on the 1 to 1 factor here).
Wait - I thought that "Capture Mux Volume" is zero at initialization?
Else, recording doesn't work if I change capture volume to something > 0. This is the change in the codec:
So, you mean that "Capture volume" must be zero?
Node 0x17 [Audio Selector] wcaps 0x300903: Stereo Amp-In Amp-In caps: N/A
- Amp-In vals: [0x00 0x00]
- Amp-In vals: [0x0e 0x0e] Connection: 1 0x12
Is this the non-working state? I'm puzzled now...
OK, let's make things straight. To make the things clear, please attach the codec info file at each state. The step is like below:
- Build the latest driver with your pingconfig patch. - Unload the driver module. - Remove /etc/asound.state (or whatever alsactl stores -- the path is depending on distro) - Load the module again; at this state, mixers are muted - Get the first codec dump here once - Unmute the playbacks as usual. Check playback. - Turn on only "Capture Switch". Don't adjust "Capture Volume" and "Mux Capture Volume" if they are zero. Test recording once here. Get codec dump again. - If not working, try resetting the input source. Test recording. Get codec dump. - Raise "Capture Volume". Test recording, get codec dump. - Raise "Mux Capture Volume". Test recording, get codec dump. - If still not working, tune as you like. Then get codec dump.
Either attach each codec dump as it is, or make diff incrementally so that we can follow the codec register changes, too.
thanks,
Takashi
- Build the latest driver with your pingconfig patch.
Patch, which adds an "intel-imac-20" pinconfig attached.
- Unload the driver module.
- Remove /etc/asound.state (or whatever alsactl stores -- the path is depending on distro)
- Load the module again; at this state, mixers are muted
- Get the first codec dump here once
initial-codec attached.
- Unmute the playbacks as usual. Check playback.
Playback works.
- Turn on only "Capture Switch". Don't adjust "Capture Volume" and "Mux Capture Volume" if they are zero. Test recording once here. Get codec dump again.
Recording doesn't work. Codec diff:
Node 0x02 [Audio Output] wcaps 0xd0c05: Stereo Amp-Out Amp-Out caps: N/A - Amp-Out vals: [0x7f 0x7f] + Amp-Out vals: [0xff 0xff] Power: 0x0 Node 0x03 [Audio Output] wcaps 0xd0c05: Stereo Amp-Out Amp-Out caps: N/A - Amp-Out vals: [0x7f 0x7f] + Amp-Out vals: [0xff 0xff] Power: 0x0 Node 0x04 [Audio Output] wcaps 0xd0c05: Stereo Amp-Out Amp-Out caps: N/A - Amp-Out vals: [0x7f 0x7f] + Amp-Out vals: [0xff 0xff] Power: 0x0 Node 0x05 [Audio Output] wcaps 0xd0c05: Stereo Amp-Out Amp-Out caps: N/A - Amp-Out vals: [0x7f 0x7f] + Amp-Out vals: [0xff 0xff] Power: 0x0
- If not working, try resetting the input source. Test recording. Get codec dump.
Reseting the input source doesn't result a difference in the codec info and recording still doesn't work.
- Raise "Capture Volume". Test recording, get codec dump.
After this recording works! Woho! :-)
Node 0x17 [Audio Selector] wcaps 0x300903: Stereo Amp-In Amp-In caps: N/A - Amp-In vals: [0x0e 0x0e] + Amp-In vals: [0x00 0x00] Connection: 1 0x12
- Raise "Mux Capture Volume". Test recording, get codec dump.
For the sake of the test I have also umuted and increased Mux, which results the following diff and a non-working recording
Node 0x12 [Audio Selector] wcaps 0x30010d: Stereo Amp-Out Amp-Out caps: ofs=0x00, nsteps=0x04, stepsize=0x27, mute=0 - Amp-Out vals: [0x04 0x04] + Amp-Out vals: [0x00 0x00] Connection: 7 0x0e 0x15 0x0f 0x0b* 0x0c 0x0d 0x0a
Regards.
Please appologise me for making the diffs the wrong way round. Below you will find the information corrected.
Also one addition thing I just found out is that it even with capture volume on max the recorded volume is *very* low. This problem seems not to be present with the auto-config from alsa rc4.
- Build the latest driver with your pingconfig patch.
Patch, which adds an "intel-imac-20" pinconfig attached.
- Unload the driver module.
- Remove /etc/asound.state (or whatever alsactl stores -- the path is depending on distro)
- Load the module again; at this state, mixers are muted
- Get the first codec dump here once
initial-codec attached.
- Unmute the playbacks as usual. Check playback.
Playback works.
- Turn on only "Capture Switch". Don't adjust "Capture Volume" and "Mux Capture Volume" if they are zero. Test recording once here. Get codec dump again.
Recording doesn't work. Codec diff:
Node 0x02 [Audio Output] wcaps 0xd0c05: Stereo Amp-Out Amp-Out caps: N/A - Amp-Out vals: [0xff 0xff] + Amp-Out vals: [0x7f 0x7f] Power: 0x0 Node 0x03 [Audio Output] wcaps 0xd0c05: Stereo Amp-Out Amp-Out caps: N/A - Amp-Out vals: [0xff 0xff] + Amp-Out vals: [0x7f 0x7f] Power: 0x0 Node 0x04 [Audio Output] wcaps 0xd0c05: Stereo Amp-Out Amp-Out caps: N/A - Amp-Out vals: [0xff 0xff] + Amp-Out vals: [0x7f 0x7f] Power: 0x0 Node 0x05 [Audio Output] wcaps 0xd0c05: Stereo Amp-Out Amp-Out caps: N/A - Amp-Out vals: [0xff 0xff] + Amp-Out vals: [0x7f 0x7f] Power: 0x0
- If not working, try resetting the input source. Test recording. Get codec dump.
Reseting the input source doesn't result a difference in the codec info and recording still doesn't work.
- Raise "Capture Volume". Test recording, get codec dump.
After this recording works! Woho! :-)
Node 0x17 [Audio Selector] wcaps 0x300903: Stereo Amp-In Amp-In caps: N/A - Amp-In vals: [0x00 0x00] + Amp-In vals: [0x0e 0x0e] Connection: 1 0x12
- Raise "Mux Capture Volume". Test recording, get codec dump.
For the sake of the test I have also umuted and increased Mux, which results the following diff and a non-working recording
Node 0x12 [Audio Selector] wcaps 0x30010d: Stereo Amp-Out Amp-Out caps: ofs=0x00, nsteps=0x04, stepsize=0x27, mute=0 - Amp-Out vals: [0x00 0x00] + Amp-Out vals: [0x04 0x04] Connection: 7 0x0e 0x15 0x0f 0x0b* 0x0c 0x0d 0x0a
Regards. - Show quoted text - -- Ivan N. Zlatev
Web: http://www.i-nZ.net "It's all some kind of whacked out conspiracy."
participants (2)
-
Ivan N. Zlatev
-
Takashi Iwai