Bug 12779

Summary: hda-intel [IDT 92HD71B7X]: built-in digital microphone and jack mic. does not work (Dell Latitude E6400)
Product: Drivers Reporter: Adam Piątyszek (ediap)
Component: Sound(ALSA)Assignee: Takashi Iwai (tiwai)
Status: CLOSED OBSOLETE    
Severity: high CC: alan, rui.zhang
Priority: P1    
Hardware: All   
OS: Linux   
Kernel Version: 2.6.28.7 Subsystem:
Regression: No Bisected commit-id:
Bug Depends on:    
Bug Blocks: 56331    
Attachments: alsa-info.sh output for 2.6.28.7 vanilla kernel
alsa-info.sh output for 2.6.29-rc6 git kernel
Enable digital-mic for Dell
alsa-info.sh output for git sound master branch kernel with digital-mic patch applied
alsa-info.sh output with probe_only=1 option passed to the driver
alsa-info.txt with git "sound" kernel 2.6.29-rc8-00977-g560d237
Output of "acpidump > acpidump_dell_latitude_e6400.log" command

Description Adam Piątyszek 2009-02-25 11:43:33 UTC
Latest working kernel version: -
Earliest failing kernel version: 2.6.27
Distribution: Gentoo Linux

Hardware Environment:
  - Dell Latitude E6400 (Centrino 2 vPro platform with Core2Duo P8600 and Intel GM45 integrated graphics)
  - HDA-Intel sound card with codec: IDT 92HD71B7X

Software Environment:
  - vanilla-sources-2.6.28.7
  - alsa-lib-1.0.17a
  - alsa-headers-1.0.17
  - alsa-utils-1.0.17

Problem Description:

Both, the built-in digital microphone and external microphone connected to the jack input does not work. Basically, I can not use Skype and any other VoIP software due to this problem. This situation has not changed since stable kernels 2.6.27.x, which I was using initially on this laptop.

In alsamixer, I can see the following [Capture] sliders/switches:
- Capture
- Capture 1
- DAC0
- DAC1
- Digital
- Import0 Mux
- Import1 Mux
- Input Source [Mix or Front Mic] (switch)
- Input Source 1 [Mix or Front Mic] (switch)
- Mux
- Mux 1

The output of alsa-info.sh script run on 2.6.28.7 kernel is attached.
Comment 1 Adam Piątyszek 2009-02-25 11:45:22 UTC
Created attachment 20366 [details]
alsa-info.sh output for 2.6.28.7 vanilla kernel
Comment 2 Takashi Iwai 2009-02-25 15:54:50 UTC
Try 2.6.29-rc*.  There was some successful report with the recent kernel / driver.
Comment 3 Adam Piątyszek 2009-02-26 03:00:10 UTC
I have just tried it and still no success. Both the built-in and jack microphones do not work, whereas I can successfully use them under MS Windows XP.

The only difference in alsamixer is now an additional IEC958 switch. alsa-info.txt for this new kernel is attached as well.
Comment 4 Adam Piątyszek 2009-02-26 03:01:17 UTC
Created attachment 20371 [details]
alsa-info.sh output for 2.6.29-rc6 git kernel
Comment 5 Takashi Iwai 2009-02-26 03:06:29 UTC
Hmm...
Could you try to run hda-verb like the following?
    hda-verb /dev/snd/hwC0D0 0x28 SET_VOLUME_KNOB 0x00

You need to build the driver with CONFIG_SND_HDA_HWDEP=y for that.
See $LINUX/Documentation/sound/alsa/HD-Audio.txt for details.
Comment 6 Takashi Iwai 2009-02-26 03:07:21 UTC
Also, if possible, try the very latest sound git tree (master branch),
    git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6.git master
Comment 7 Takashi Iwai 2009-02-26 03:12:58 UTC
Ah, wait.  The above hda-verb command is likely irrelevant.  It's just for the speaker output, and I was confused.

Your problem can be a simple mixer setup issue.
Try to turn on "Capture Switch".  I guess this allows to record from the mic-in jack, at least.
Comment 8 Takashi Iwai 2009-02-26 03:23:23 UTC
I see the problem now.  The BIOS gives three mic-inputs although the driver supports up to two mic inputs.

It shows two mic-jacks (left and rigt) and one internal mic.  Does the machine have really such?
In the current situation, "Input Source" mixer element chooses either one of two mic jacks.
Comment 9 Adam Piątyszek 2009-02-26 03:24:07 UTC
I have both the Capture and Capture 1 sliders set to 100% and while I am testing a Skype call, Skype automatically slides the Capture switch to about 50%. But no sound is recorded.
Besides, I have tried to switch Input Source and Input Source 1 between the two available values [Mic] and [Front Mic]. BTW, what is the difference between these two? I know that this laptop has support for 3 different microphones:
- above the LCD panel (digital microphone)
- jack microphone input (analog)
- dock station microphone input, which I can not test at the moment.

BTW, I do not have [Digital Mic] in this list, but I remember having it once when I was testing different kernels and model options a 2-3 months ago.

I will try to build the sound git master branch as well.
Comment 10 Takashi Iwai 2009-02-26 03:26:09 UTC
Don't use skype as a primary test.  Never ever.
Just use arecord such as:
    % arecord -vv -fdat foo.wav
Comment 11 Adam Piątyszek 2009-02-26 03:31:28 UTC
(In reply to comment #10)
> Don't use skype as a primary test.  Never ever.
> Just use arecord such as:
>     % arecord -vv -fdat foo.wav

No luck. Here is the output of arecord. Nothing is being recorded:

ediap@tataj ~ $ arecord -vv -fdat foo.wav
Recording WAVE 'foo.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Stereo
Plug PCM: Linear conversion PCM (S32_LE)
Its setup is:
  stream       : CAPTURE
  access       : RW_INTERLEAVED
  format       : S16_LE
  subformat    : STD
  channels     : 2
  rate         : 48000
  exact rate   : 48000 (48000/1)
  msbits       : 16
  buffer_size  : 8192
  period_size  : 1024
  period_time  : 21333
  tstamp_mode  : NONE
  period_step  : 1
  avail_min    : 1024
  period_event : 0
  start_threshold  : 1
  stop_threshold   : 8192
  silence_threshold: 0
  silence_size : 0
  boundary     : 4611686018427387904
Slave: Soft volume PCM
Control: Digital Capture Volume
min_dB: -30
max_dB: 30
resolution: 121
Its setup is:
  stream       : CAPTURE
  access       : MMAP_INTERLEAVED
  format       : S32_LE
  subformat    : STD
  channels     : 2
  rate         : 48000
  exact rate   : 48000 (48000/1)
  msbits       : 32
  buffer_size  : 8192
  period_size  : 1024
  period_time  : 21333
  tstamp_mode  : NONE
  period_step  : 1
  avail_min    : 1024
  period_event : 0
  start_threshold  : 1
  stop_threshold   : 8192
  silence_threshold: 0
  silence_size : 0
  boundary     : 4611686018427387904
Slave: Direct Snoop PCM
Its setup is:
  stream       : CAPTURE
  access       : MMAP_INTERLEAVED
  format       : S32_LE
  subformat    : STD
  channels     : 2
  rate         : 48000
  exact rate   : 48000 (48000/1)
  msbits       : 32
  buffer_size  : 8192
  period_size  : 1024
  period_time  : 21333
  tstamp_mode  : NONE
  period_step  : 1
  avail_min    : 1024
  period_event : 0
  start_threshold  : 1
  stop_threshold   : 8192
  silence_threshold: 0
  silence_size : 0
  boundary     : 4611686018427387904
Hardware PCM card 0 'HDA Intel' device 0 subdevice 0
Its setup is:
  stream       : CAPTURE
  access       : MMAP_INTERLEAVED
  format       : S32_LE
  subformat    : STD
  channels     : 2
  rate         : 48000
  exact rate   : 48000 (48000/1)
  msbits       : 32
  buffer_size  : 8192
  period_size  : 1024
  period_time  : 21333
  tstamp_mode  : ENABLE
  period_step  : 1
  avail_min    : 1024
  period_event : 0
  start_threshold  : 1
  stop_threshold   : 4611686018427387904
  silence_threshold: 0
  silence_size : 0
  boundary     : 4611686018427387904
#+                                                 | 00%^C
Aborted by signal Przerwanie...
Comment 12 Adam Piątyszek 2009-02-26 03:34:20 UTC
BTW, here are my kernel settings for this codec:

tataj linux # grep HDA .config
# CONFIG_SENSORS_HDAPS is not set
CONFIG_SND_HDA_INTEL=m
CONFIG_SND_HDA_HWDEP=y
# CONFIG_SND_HDA_RECONFIG is not set
# CONFIG_SND_HDA_INPUT_BEEP is not set
# CONFIG_SND_HDA_CODEC_REALTEK is not set
# CONFIG_SND_HDA_CODEC_ANALOG is not set
CONFIG_SND_HDA_CODEC_SIGMATEL=y
# CONFIG_SND_HDA_CODEC_VIA is not set
# CONFIG_SND_HDA_CODEC_ATIHDMI is not set
# CONFIG_SND_HDA_CODEC_NVHDMI is not set
CONFIG_SND_HDA_CODEC_INTELHDMI=y
CONFIG_SND_HDA_ELD=y
# CONFIG_SND_HDA_CODEC_CONEXANT is not set
# CONFIG_SND_HDA_CODEC_CMEDIA is not set
# CONFIG_SND_HDA_CODEC_SI3054 is not set
CONFIG_SND_HDA_GENERIC=y
CONFIG_SND_HDA_POWER_SAVE=y
CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0
Comment 13 Takashi Iwai 2009-02-26 03:50:49 UTC
Choose a different item of "Input Source" mixer element.  One of them should point to the mic-jack you are trying.

Also, I guess the digital mic comes back if you reboot without the docking station.  BIOS may check the existence and change the default pin config values.
Comment 14 Adam Piątyszek 2009-02-26 04:02:16 UTC
(In reply to comment #13)
> Choose a different item of "Input Source" mixer element.  One of them should
> point to the mic-jack you are trying.

I tried all options for both 2.6.29-rc6 and git sound master branch. This does not change anything:
1) Capture = 100%, Input Source = Mic        -> nothing is being recorded
2) Capture = 100%, Input Source = Front Mic  -> nothing is being recorded

BTW, I have all playback sliders/switches unmuted, but I guess this should not interfere. The only muted switches are [Analog Loopback] and [Analog Loopback 1].

> Also, I guess the digital mic comes back if you reboot without the docking
> station.  BIOS may check the existence and change the default pin config
> values.

I do not use docking station at all. So this is not the case.
My BIOS is the latest released by DELL for this laptop (A12). But with previous versions (A11 and A09) microphone did not work either.
Comment 15 Adam Piątyszek 2009-02-26 04:14:36 UTC
BTW, I am really glad you are trying to solve this issue. This is really critical for my work. Otherwise, I would have to reboot to MS Windows every time I have a conference (with Skype or other VoIP tool).

Should you need more information from me, please let me know.
Comment 16 Takashi Iwai 2009-02-26 05:17:44 UTC
Hm, you are trying to record from the mic jack, not from the internal mic, right?

Anyway, the patch below should enable the digital mic again.
Comment 17 Takashi Iwai 2009-02-26 05:18:16 UTC
Created attachment 20373 [details]
Enable digital-mic for Dell
Comment 18 Adam Piątyszek 2009-02-26 05:22:54 UTC
(In reply to comment #16)
> Hm, you are trying to record from the mic jack, not from the internal mic,
> right?

In fact, I tried both. No success with either of them.
 
> Anyway, the patch below should enable the digital mic again.

I will patch my kernel and let you know if that changes something.
Comment 19 Adam Piątyszek 2009-02-26 05:35:14 UTC
(In reply to comment #17)
> Created an attachment (id=20373) [details]
> Enable digital-mic for Dell

The patch does not change anything after clean reboot. Still only [Mic] and [Front Mic] are available.

Should I pass some specific model to the driver, e.g. dell-m4-3?
Comment 20 Adam Piątyszek 2009-02-26 05:38:57 UTC
One more comment...

I can not successfully remove snd_hda_codec_intelhdmi module from memory:

root      6158  6146  0 14:35 pts/1    00:00:00 /bin/bash /sbin/runscript.sh /etc/init.d/alsasound stop
root      6188  6158  0 14:35 pts/1    00:00:00 /bin/bash /sbin/runscript.sh /etc/init.d/alsasound stop
root      6251  6188  0 14:35 pts/1    00:00:00 rmmod --wait snd_hda_codec_intelhdmi

It freezes the console I used to execute "/etc/init.d/alsasound stop".
I have compiled this Intel HDMI module in the latest 2.6.29.x kernels.
Comment 21 Takashi Iwai 2009-02-26 06:09:32 UTC
Ah, a Gentoo user...
   http://bugzilla.kernel.org/show_bug.cgi?id=12321

The patch should give the difference, at least on the latest sound git tree.
Comment 22 Adam Piątyszek 2009-02-26 06:38:53 UTC
(In reply to comment #21)
> Ah, a Gentoo user...
>    http://bugzilla.kernel.org/show_bug.cgi?id=12321
> 
> The patch should give the difference, at least on the latest sound git tree.

OK. So that is unrelated...

I disabled the kernel configuration option for Intel HDMI Codec, so now I have the following settings enabled:

CONFIG_SND_HDA_INTEL=m
CONFIG_SND_HDA_HWDEP=y
CONFIG_SND_HDA_CODEC_SIGMATEL=y
CONFIG_SND_HDA_GENERIC=y
CONFIG_SND_HDA_POWER_SAVE=y
CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0

I am not sure if SND_HDA_GENERIC makes any difference...

Now after clean reboot and not passing any specific model to the driver the following chip is reported by alsamixer: "Intel ID 2802". Previously it was some "Intel G54 ...".
With your patch, I have now one more switch "Digital Input Source" with the following three possible options:
- Analog Inputs
- Mixer
- Digital Mic 1

I tried to record something with "arecord" setting this switch to "Digital Mic 1" and later also to "Analog Inputs". "Capture" and "Caputre 1" are set to 100%. I also tried to switch "Intput Source" and "Input Source 1" between [Mic] and [Front Mic]. Still no success...

Something is really weird with this IDT driver...
Comment 23 Takashi Iwai 2009-02-26 06:49:44 UTC
"Digital Mic" corresponds to the built-in mic.  For digital-mic, "Capture Volume" should be irrelevant.

Could you upload alsa-info output again?

Also, try to probe once with probe_only=1 option.  Then run alsa-info and give the content.  With this option, the driver won't create any mixer / PCM stuff but gives the initial BIOS setup.
Comment 24 Adam Piątyszek 2009-02-26 06:53:14 UTC
Created attachment 20374 [details]
alsa-info.sh output for git sound master branch kernel with digital-mic patch applied
Comment 25 Adam Piątyszek 2009-02-26 07:01:59 UTC
Created attachment 20375 [details]
alsa-info.sh output with probe_only=1 option passed to the driver
Comment 26 Adam Piątyszek 2009-02-27 03:23:35 UTC
(In reply to comment #23)
> Could you upload alsa-info output again?

I did it yesterday.

> Also, try to probe once with probe_only=1 option.  Then run alsa-info and
> give
> the content.  With this option, the driver won't create any mixer / PCM stuff
> but gives the initial BIOS setup.

Have you been looking at the latest alsa-info.txt files?
Comment 27 Adam Piątyszek 2009-03-03 05:37:06 UTC
Short update:

I have tried today's sound git tree (master branch; commit 320ab9e8e66) and I am still not able to record anything from microphones on this laptop.

The only difference in alsamixer is that "Analog loopback" switches are not shown any more.
Comment 28 Nadav Kavalerchik 2009-03-19 15:57:17 UTC
cat /proc/asound/card*/codec#*
Codec: IDT 92HD71B7X 

i think i have the same hardware as you have but on HP dv7 and i have the same issue "unable to record sound from internal mic" BUT i can plugin the headset (mic + speakers) and record sound and hear sound just fine and of course... use voip (ekiga)

see more info : https://bugtrack.alsa-project.org/alsa-bug/view.php?id=4314
Comment 29 Adam Piątyszek 2009-03-23 08:25:05 UTC
Nadav,

Thanks for your comment. Anyway, it did not help me much. Still no sound from my jack microphone input. I guess the difference is due to the fact that I use newer kernels (2.6.28 and 2.6.29-rc?). Unfortunately, I can not downgrade to older kernels due to other hardware in my laptop not supported well by anything older than 2.6.28 (Intel Integrated Graphics - GM45 & Intel 5300 AGN wireless card).

/Adam
Comment 30 Takashi Iwai 2009-03-23 08:47:25 UTC
Hmm, weird that it doesn't work only on yours.  I have multiple reports that the recording basically works on E6400 and E6500 with the latest alsa-driver.
Comment 31 Adam Piątyszek 2009-03-23 14:49:42 UTC
Hi Takashi,

I agree that this is really strange. Especially that under MS Windows both microphones work like a charm.

Today I tried the latest kernel from git sound master branch. Unfortunately, with no success. I attach my latest alsa-info.txt results once again.

Thanks in advance for any hints.
BR,
/Adam
Comment 32 Adam Piątyszek 2009-03-23 14:50:49 UTC
Created attachment 20652 [details]
alsa-info.txt with git "sound" kernel 2.6.29-rc8-00977-g560d237
Comment 33 Adam Piątyszek 2009-03-23 15:30:32 UTC
Takashi,

Shame on me! Finally after another hour of fight with my ALSA settings, I managed to make both microphones to work! The problem was probably in an outdated configuration in /etc/modprobe.d/alsa. Originally I had this config:

=====8<======
alias char-major-116 snd
alias char-major-14 soundcore

alias snd-card-0 snd-hda-intel
alias sound-slot-0 snd-hda-intel

alias sound-service-0-0 snd-mixer-oss
alias sound-service-0-1 snd-seq-oss
alias sound-service-0-3 snd-pcm-oss
alias sound-service-0-8 snd-seq-oss
alias sound-service-0-12 snd-pcm-oss

alias /dev/mixer snd-mixer-oss
alias /dev/dsp snd-pcm-oss
alias /dev/midi snd-seq-oss

options snd cards_limit=1
=====8<======

Now I commented out everything except:

=====8<======
alias snd-card-0 snd-hda-intel
alias sound-slot-0 snd-hda-intel
=====8<======

One more question to you: Is such a simple configuration of ALSA modules sufficient nowadays?

Once again thanks for your help and patience with this bug report. You can close it now as "INVALID".

/Adam
Comment 34 Zhang Rui 2009-06-09 03:06:45 UTC
hi, adam,
can you do me a favor to get the acpidump of your dell latitude e6400 laptop?
I need this to support a new feature in Linux kernel.

BTW: you can get the latest pmtools at http://www.lesswatts.org/projects/acpi/utilities.php
build and run "acpidump > acpidump.log" to get the acpidump output.

thanks,
rui
Comment 35 Adam Piątyszek 2009-06-09 07:07:56 UTC
Hi Zhang,

Please find the output of acpidump on my machine attached to this bug report.

BR,
/Adam
Comment 36 Adam Piątyszek 2009-06-09 07:09:02 UTC
Created attachment 21823 [details]
Output of "acpidump > acpidump_dell_latitude_e6400.log" command
Comment 37 Zhang Rui 2009-06-09 07:12:56 UTC
get it, thanks!!