[BUG]No input from microphones on Fujitsu Intel Corporation Alder Lake PCH-P High Definition Audio Controller
Describe the bug I am not able to get any input from the microphone(s) on my system. Neither the internal microphone nor the microphone on the plugged in earphones with microphone produce any sound.
See also https://bugzilla.suse.com/show_bug.cgi?id=1236863
To Reproduce
1.Use either internal microphones or microphone from earplugs
2.Use arecord to test microphone input
3.Playback recording from arecord
Actual Results:
No sound is captured from either microphone.
Same result with other audio recording applications, like Audacity, Zoom or Teams
Reproduction Rate All the time
Expected behavior Sound from microphones to be available
Impact Not able to attend zoom or teams meetings from this laptop
Environment Not sure how to get the following information:
- Branch name and commit hash of the 2 repositories: sof (firmware/topology) and linux (kernel driver).
- Kernel: {SHA}
- SOF: {SHA}
- Name of the topology file
- Topology: {FILE}
- Name of the platform(s) on which the bug is observed.
- Platform: {PLATFORM}
Screenshots or console output ``` inxi -Aa Audio: Device-1: Intel Alder Lake PCH-P High Definition Audio vendor: Fujitsu Client driver: sof-audio-pci-intel-tgl alternate: snd_hda_intel, snd_soc_avs, snd_sof_pci_intel_tgl bus-ID: 00:1f.3 chip-ID: 8086:51c8 class-ID: 0401 API: ALSA v: k6.13.1-lp156.6.g93072cc-default status: kernel-api with: aoss type: oss-emulator tools: alsactl,alsamixer,amixer Server-1: PipeWire v: 1.0.5 status: active with: 1: pipewire-pulse status: active 2: wireplumber status: active tools: pactl,pw-cat,pw-cli,wpctl ``` I have attached the output of alsa-info.sh in the attachment.
If applicable, add a screenshot (drag-and-drop an image), or console logs (cut-and-paste text and put a code fence (```) before and after, to help explain the issue.
Please also include the relevant sections from the firmware log and kernel log in the report (and attach the full logs for complete reference). Kernel log is taken from dmesg and firmware log from sof-logger. See https://thesofproject.github.io/latest/developer_guides/debugability/logger/index.html
Important logs parts are below. NHLT reports 2 DMICs, also Mic could be connected to ALC257. @bardliao @ujfalusi any ideas ?
[ 4.874713] sof-audio-pci-intel-tgl 0000:00:1f.3: enabling device (0000 -> 0002)
[ 4.876839] sof-audio-pci-intel-tgl 0000:00:1f.3: DSP detected with PCI class/subclass/prog-if 0x040100
[ 4.876976] sof-audio-pci-intel-tgl 0000:00:1f.3: bound 0000:00:02.0 (ops i915_audio_component_bind_ops [i915])
[ 4.885361] sof-audio-pci-intel-tgl 0000:00:1f.3: use msi interrupt mode
[ 4.923333] sof-audio-pci-intel-tgl 0000:00:1f.3: hda codecs found, mask 5
[ 4.923344] sof-audio-pci-intel-tgl 0000:00:1f.3: using HDA machine driver skl_hda_dsp_generic now
[ 4.923349] sof-audio-pci-intel-tgl 0000:00:1f.3: NHLT device BT(0) detected, ssp_mask 0x4
[ 4.923353] sof-audio-pci-intel-tgl 0000:00:1f.3: BT link detected in NHLT tables: 0x4
[ 4.923357] sof-audio-pci-intel-tgl 0000:00:1f.3: DMICs detected in NHLT tables: 2
[ 4.927245] sof-audio-pci-intel-tgl 0000:00:1f.3: Firmware paths/files for ipc type 0:
[ 4.927254] sof-audio-pci-intel-tgl 0000:00:1f.3: Firmware file: intel/sof/sof-adl.ri
[ 4.927257] sof-audio-pci-intel-tgl 0000:00:1f.3: Topology file: intel/sof-tplg/sof-hda-generic-2ch.tplg
[ 4.928200] sof-audio-pci-intel-tgl 0000:00:1f.3: Firmware info: version 2:2:0-57864
[ 4.928208] sof-audio-pci-intel-tgl 0000:00:1f.3: Firmware: ABI 3:22:1 Kernel ABI 3:23:1
[ 5.027831] sof-audio-pci-intel-tgl 0000:00:1f.3: Firmware info: version 2:2:0-57864
[ 5.027842] sof-audio-pci-intel-tgl 0000:00:1f.3: Firmware: ABI 3:22:1 Kernel ABI 3:23:1
[ 5.039056] sof-audio-pci-intel-tgl 0000:00:1f.3: Topology: ABI 3:22:1 Kernel ABI 3:23:1
[ 5.039692] skl_hda_dsp_generic skl_hda_dsp_generic: ASoC: Parent card not yet available, widget card binding deferred
--
[ 5.071253] iwlwifi 0000:00:14.3: Detected RF GF, rfid=0x2010d000
[ 5.075307] snd_hda_codec_realtek ehdaudio0D0: ALC257: SKU not ready 0x909701f0
[ 5.075543] snd_hda_codec_realtek ehdaudio0D0: autoconfig for ALC257: line_outs=1 (0x14/0x0/0x0/0x0/0x0) type:speaker
[ 5.075548] snd_hda_codec_realtek ehdaudio0D0: speaker_outs=0 (0x0/0x0/0x0/0x0/0x0)
[ 5.075552] snd_hda_codec_realtek ehdaudio0D0: hp_outs=1 (0x21/0x0/0x0/0x0/0x0)
[ 5.075555] snd_hda_codec_realtek ehdaudio0D0: mono: mono_out=0x0
[ 5.075557] snd_hda_codec_realtek ehdaudio0D0: inputs:
[ 5.117628] skl_hda_dsp_generic skl_hda_dsp_generic: hda_dsp_hdmi_build_controls: no PCM in topology for HDMI converter 3
Please check that Dmic0 capture switch is set on, and also make sure Dmic0 volume is set to max.
amixer -c0 cset name='Dmic0 Capture Volume' 70 amixer -c0 cset name='Dmic0 Capture Switch' on
If the problem still persists, attach the the wav file (screenshot is not enough) from e.g. "arecord -Dhw:0,6 -f S32_LE -r 48000 -c 2 -d 5 rec.wav" here. I'll try to determine from start glitch shape if there's a connected microphone or not. If no microphone in PCH-DMIC then it would be in ALC257 codec and a different kind of issue.
We could focus on the PCH-DMIC issue as Takashi is helping the ALC257 issue on https://thesofproject.github.io/latest/developer_guides/debugability/logger/index.html
BTW, I saw control.38 { iface MIXER name 'Dmic0 Capture Switch' value.0 true value.1 true comment { access 'read write' type BOOLEAN count 2 } } from the alsa-info.txt. It seems 'Dmic0 Capture Switch' is already on.
I have tried to record from the internal microphone as per your recommendations. Again the result was a short glitch.
~> amixer -c0 cset name='Dmic0 Capture Volume' 70 numid=37,iface=MIXER,name='Dmic0 Capture Volume' ; type=INTEGER,access=rw---R--,values=2,min=0,max=70,step=0 : values=70,70 | dBscale-min=-50.00dB,step=1.00dB,mute=1
:~> amixer -c0 cset name='Dmic0 Capture Switch' on numid=38,iface=MIXER,name='Dmic0 Capture Switch' ; type=BOOLEAN,access=rw------,values=2 : values=on,on
~> arecord -Dhw:0,6 -f S32_LE -r 48000 -c 2 -d 5 rec.wav Recording WAVE 'rec.wav' : Signed 32 bit Little Endian, Rate 48000 Hz, Stereo
Uploading a wav file is not accepted by the system.
I am attaching a screenshot from Audacity,
I found out that zip files can be uploaded. The audio wav file is zipped up in the attached archive.
I found out that zip files can be uploaded. The audio wav file is zipped up in the attached archive.
Thanks for the wav file. It looks like there's no connected microphone. Could you try to temporarily replace in your PC the topology file "intel/sof-tplg/sof-hda-generic-2ch.tplg" the 4ch version from the same directory. Then try to capture with "-c 4" option for four channels. There are some computers where the two microphones are connected to PDM1 controller instead of default PDM0.
If it would be that then should find a 2ch pdm1 topology version. I'm not sure it's part of SOF releases but such can be build from sof v2.2 sources.
(ADL is an IPC3 system, so need to use SOF v2.2 instead of git main branch)
I hope this is what you wanted me to do.
In /lib/firmware/intel/sof-tplg/ I renamed intel/sof-tplg/sof-hda-generic-2ch.tplg to save it temporarily.
Then copied intel/sof-tplg/sof-hda-generic-4ch.tplg to intel/sof-tplg/sof-hda-generic-2ch.tplg And then I started recording with arecord -Dhw:0,6 -f S32_LE -r 48000 -c 4 -d 5 rec.wav
Helas, same result, a glitch as mentioned earlier.
Helas, same result, a glitch as mentioned earlier.
So, all four channels look the same? Did you check that capture switches and volumes are enabled for every channel.
Checking the settings of the soundcard with the four channel driver:
~> amixer contents numid=4,iface=MIXER,name='Master Playback Switch' ; type=BOOLEAN,access=rw------,values=1 : values=off numid=3,iface=MIXER,name='Master Playback Volume' ; type=INTEGER,access=rw------,values=2,min=0,max=65536,step=1 : values=65536,65536 numid=2,iface=MIXER,name='Capture Switch' ; type=BOOLEAN,access=rw------,values=1 : values=on numid=1,iface=MIXER,name='Capture Volume' ; type=INTEGER,access=rw------,values=2,min=0,max=65536,step=1 : values=65536,65536
The Master Playback Switch is off, the Capture Switch is on.
Trying to toggle the Master Playback Switch on:
~> amixer -c 0 -- sset Master Playback Switch 100% Simple mixer control 'Master',0 Capabilities: pvolume pvolume-joined pswitch pswitch-joined Playback channels: Mono Limits: Playback 0 - 87 Mono: Playback 87 [100%] [0.00dB] [on]
But still the Master Playback Switch stays off:
~> amixer contents numid=4,iface=MIXER,name='Master Playback Switch' ; type=BOOLEAN,access=rw------,values=1 : values=off numid=3,iface=MIXER,name='Master Playback Volume' ; type=INTEGER,access=rw------,values=2,min=0,max=65536,step=1 : values=65536,65536 numid=2,iface=MIXER,name='Capture Switch' ; type=BOOLEAN,access=rw------,values=1 : values=on numid=1,iface=MIXER,name='Capture Volume' ; type=INTEGER,access=rw------,values=2,min=0,max=65536,step=1 : values=65536,65536
And no sound is recorded.
Should I be seeing more channels, with sof-hda-generic-4ch.tplg?
arecord -Dhw:0,6 -f S32_LE -r 48000 -c 4 -d 5 rec.wav Recording WAVE 'rec.wav' : Signed 32 bit Little Endian, Rate 48000 Hz, Channels 4
Does "Channels 4" indicate that I do try to record from any of four channels?
arecord -Dhw:0,6 -f S32_LE -r 48000 -c 4 -d 5 rec.wav Recording WAVE 'rec.wav' : Signed 32 bit Little Endian, Rate 48000 Hz, Channels 4
Does "Channels 4" indicate that I do try to record from any of four channels?
Yes, you should get a four channels wav file.
numid=2,iface=MIXER,name='Capture Switch' ; type=BOOLEAN,access=rw------,values=1 : values=on
The control name should be "Dmic0 Capture Switch". When channels count increased 2 to 4, the controls for the new channels 3-4 may be now with attenuation or mute applied.
Here it shows only two capture devices:
cat /proc/asound/devices 1: : sequencer 2: [ 0- 6]: digital audio capture 3: [ 0- 7]: digital audio capture 4: [ 0- 0]: digital audio playback 5: [ 0- 0]: digital audio capture 6: [ 0-31]: digital audio playback 7: [ 0- 3]: digital audio playback 8: [ 0- 4]: digital audio playback 9: [ 0- 5]: digital audio playback 10: [ 0- 2]: hardware dependent 11: [ 0- 0]: hardware dependent 12: [ 0] : control 33: : timer
Here it shows only two capture devices:
cat /proc/asound/devices 1: : sequencer 2: [ 0- 6]: digital audio capture 3: [ 0- 7]: digital audio capture 4: [ 0- 0]: digital audio playback 5: [ 0- 0]: digital audio capture 6: [ 0-31]: digital audio playback 7: [ 0- 3]: digital audio playback 8: [ 0- 4]: digital audio playback 9: [ 0- 5]: digital audio playback 10: [ 0- 2]: hardware dependent 11: [ 0- 0]: hardware dependent 12: [ 0] : control 33: : timer
Yes, you can capture from headset mic hw:0,0, DMIC 48 kHz hw:0,6 or DMIC 16 kHz hw:0,7. The DMIC capture devices access the same physical microphones but with different sample rate. The 16 kHz DMIC has a separate volume control.
Alsamixer shows two digital microphones, each with L and R, I can only toggle Dmic0 on and off.
Alsamixer shows two digital microphones, each with L and R, I can only toggle Dmic0 on and off.
Looks like you have capture switch set for all four Dmic0 channels. If you still get same zero PCM code capture wav for all channels except start transient, then I wonder if the BIOS that indicates 2 DMIC can be correct.
What if the microphones are analog? You could try to disable SOF with "options snd_intel_dspcfg dsp_driver=1" in a /etc/modprobe.d file for sof, e.g. "sof.conf". In that case the driver would attempt to use analog microhone switched with headset mic. This is again just a guess but if no other ideas here you could try. The capture device would be then hw:0,0. And there would be no topology loaded.
BTW @u20380 Have you tried the same device on Windows?
I did - with a positive outcome.
@u20380 Do you have the product name of the device? Or the audio design is even better. We need to know where does the host dmic connect exactly.
Its a Fujitsu/Siemens Lifebook E5512.
I have submitted a request for Fujitsu customer support to provide information about the audio setup.
Here is the response from Fujitsu customer support. I have asked for more detailed information, like an electrical wiring scheme.
Quote Unfortunately, this was the feedback from our team: “Linux distros are not under the scope of the standard support.”
Nevertheless, here is some information that we were able to gather.
This is the sub board used, the sun board is connect to the MB with an FPC cable. (see attached image)
These are the speakers: (see attached image)
The audio chip is a Realtek ALC 257
For further information about the audio chip, we would advise to contact Realtek support.
**
**
@u20380 I think the most important question is that does the host microphone connect to the Realtek ALC 257 codec or to Intel PCH?
In the meantime, you could add "options snd_sof_intel_hda_common sof_use_tplg_nhlt=1" to /etc/modprobe.d/alsa-base.conf and see if it helps..
With that option you will use the topology nhlt instead of the BIOS nhlt.
Also, did you try my SOF disable suggestion above?
I have added your suggestion above. Then I tried to record from the microphones:
arecord -Dhw:0,6 -f S32_LE -r 48000 -c 4 -d 5 20250224_recording.wav
Resulting in the following error:
arecord: main:850: audio open error: No such file or directory `
Does this help, the ALC247 seems to give an error message now.
sudo dmesg |grep hda [sudo] password for root: [ 4.804812] snd_hda_intel 0000:00:1f.3: enabling device (0000 -> 0002) [ 4.805024] snd_hda_intel 0000:00:1f.3: bound 0000:00:02.0 (ops i915_audio_component_bind_ops [i915]) [ 4.840403] snd_hda_codec_realtek hdaudioC0D0: ALC257: SKU not ready 0x909701f0 [ 4.840574] snd_hda_codec_realtek hdaudioC0D0: autoconfig for ALC257: line_outs=1 (0x14/0x0/0x0/0x0/0x0) type:speaker [ 4.840578] snd_hda_codec_realtek hdaudioC0D0: speaker_outs=0 (0x0/0x0/0x0/0x0/0x0) [ 4.840579] snd_hda_codec_realtek hdaudioC0D0: hp_outs=1 (0x21/0x0/0x0/0x0/0x0) [ 4.840581] snd_hda_codec_realtek hdaudioC0D0: mono: mono_out=0x0 [ 4.840582] snd_hda_codec_realtek hdaudioC0D0: inputs:
arecord: main:850: audio open error: No such file or directory `
If the microphone would be connected to ALC257, the capture device would be Hw:0,0.
This is what I get with Hw:0,0
arecord -Dhw:0,0 -f S32_LE -r 48000 -c 4 -d 5 rec 20240224_recording.wav arecord: set_params:1398: Channels count non available
I have added your suggestion above. Then I tried to record from the microphones:
arecord -Dhw:0,6 -f S32_LE -r 48000 -c 4 -d 5 20250224_recording.wav
Resulting in the following error:
arecord: main:850: audio open error: No such file or directory `
@u20380 Can you share the alsa-info when you disable SOF? Probably DMIC will not be enabled with the legacy HDA driver. BTW, I think we need Realtek's help on the ALC257 part. I don't know how we can work around if the BIOS doesn't provide verb table properly. @KailangYang Can you help?
As requested. 20250225 - alsa-info.txt
BTW, I will not be getting additional information from Fujitsu. They refer to their standard download page.
**** List of CAPTURE Hardware Devices ****
card 0: PCH [HDA Intel PCH], device 0: ALC257 Analog [ALC257 Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 2: ALC257 Alt Analog [ALC257 Alt Analog]
Subdevices: 2/2
Subdevice #0: subdevice #0
Subdevice thesofproject/sof#1: subdevice thesofproject/sof#1496
There is no dmic device if SOF is disabled. That's why you can't use arecord -Dhw:0,6