Microphone doesn't work (Thinkpad E14 Gen6 AMD)

Hello there!

The Thinkpad E14 Gen6 AMD is almost perfect for a complete FreeBSD (14.3) desktop experience, except for microphone. Even the camera works!

The device is reconized:
# cat /dev/sndstat
Installed devices:
pcm0: <ATI R6xx (HDMI)> (play)
pcm1: <ATI R6xx (HDMI)> (play)
pcm2: <ATI R6xx (HDMI)> (play)
pcm3: <Conexant (0x1f86) (Analog)> (play/rec) default
pcm4: <Conexant (0x1f86) (Left Analog Headphones)> (play)
No devices installed from userspace.

# mixer
pcm3:mixer: <Conexant (0x1f86) (Analog)> on hdaa1 (play/rec) (default)
vol = 1.00:1.00 pbk
pcm = 1.00:1.00 pbk
speaker = 1.00:1.00 pbk
mic = 1.00:1.00 rec src
rec = 1.00:1.00 pbk
ogain = 1.00:1.00 pbk

Loading the acpi_ibm.ko I can control the microphone led:
# sysctl dev.acpi_ibm.0.mic_led=1

But nothing is recording, It's like hardware mute.

Someone with more experience in this situation can help me?

Thanks
 
Please show us:

dmesg | grep pcm

The codec pin configuration (execute dmesg(8) to see the pindump):

sysctl dev.hdac.1.pindump=1

Code:
# sysctl dev.hdac.1.pindump=1
dev.hdac.1.pindump: 0 -> 0

# dmesg
hdaa1: Dumping AFG pins:
hdaa1: nid   0x    as seq device       conn  jack    loc        color   misc
hdaa1: 18 90a60120 2  0  Mic           Fixed Digital Internal   Unknown 1
hdaa1:     Caps: IN
hdaa1: 19 40000000 0  0  Line-out      None  Unknown 0x00       Unknown 0 DISA
hdaa1:     Caps: IN
hdaa1: 20 90170110 1  0  Speaker       Fixed Analog  Internal   Unknown 1
hdaa1:     Caps:    OUT    EAPD      Sense: 0x00000000 (disconnected)
hdaa1: 24 411111f0 15 0  Speaker       None  1/8     Rear       Black   1 DISA
hdaa1:     Caps: IN             VREF Sense: 0x00000000 (disconnected)
hdaa1: 25 04a11030 3  0  Mic           Jack  1/8     Right      Black   0
hdaa1:     Caps: IN             VREF Sense: 0x00000000 (disconnected)
hdaa1: 26 411111f0 15 0  Speaker       None  1/8     Rear       Black   1 DISA
hdaa1:     Caps: IN             VREF Sense: 0x00000000 (disconnected)
hdaa1: 27 411111f0 15 0  Speaker       None  1/8     Rear       Black   1 DISA
hdaa1:     Caps: IN OUT    EAPD VREF Sense: 0x00000000 (disconnected)
hdaa1: 30 411111f0 15 0  Speaker       None  1/8     Rear       Black   1 DISA
hdaa1:     Caps:    OUT              Sense: 0x00000000 (disconnected)
hdaa1: 33 0421101f 1  15 Headphones    Jack  1/8     Right      Black   0
hdaa1:     Caps:    OUT HP EAPD      Sense: 0x00000000 (disconnected)
hdaa1: NumGPIO=3 NumGPO=0 NumGPI=0 GPIWake=0 GPIUnsol=1
hdaa1:  GPIO0: disabled
hdaa1:  GPIO1: disabled
hdaa1:  GPIO2: disabled
 
Please show us:

dmesg | grep pcm

The codec pin configuration (execute dmesg(8) to see the pindump):

sysctl dev.hdac.1.pindump=1

Code:
# sysctl dev.hdac.1.pindump=1
dev.hdac.1.pindump: 0 -> 0

# dmesg
hdaa1: Dumping AFG pins:
hdaa1: nid   0x    as seq device       conn  jack    loc        color   misc
hdaa1: 18 90a60120 2  0  Mic           Fixed Digital Internal   Unknown 1
hdaa1:     Caps: IN
hdaa1: 19 40000000 0  0  Line-out      None  Unknown 0x00       Unknown 0 DISA
hdaa1:     Caps: IN
hdaa1: 20 90170110 1  0  Speaker       Fixed Analog  Internal   Unknown 1
hdaa1:     Caps:    OUT    EAPD      Sense: 0x00000000 (disconnected)
hdaa1: 24 411111f0 15 0  Speaker       None  1/8     Rear       Black   1 DISA
hdaa1:     Caps: IN             VREF Sense: 0x00000000 (disconnected)
hdaa1: 25 04a11030 3  0  Mic           Jack  1/8     Right      Black   0
hdaa1:     Caps: IN             VREF Sense: 0x00000000 (disconnected)
hdaa1: 26 411111f0 15 0  Speaker       None  1/8     Rear       Black   1 DISA
hdaa1:     Caps: IN             VREF Sense: 0x00000000 (disconnected)
hdaa1: 27 411111f0 15 0  Speaker       None  1/8     Rear       Black   1 DISA
hdaa1:     Caps: IN OUT    EAPD VREF Sense: 0x00000000 (disconnected)
hdaa1: 30 411111f0 15 0  Speaker       None  1/8     Rear       Black   1 DISA
hdaa1:     Caps:    OUT              Sense: 0x00000000 (disconnected)
hdaa1: 33 0421101f 1  15 Headphones    Jack  1/8     Right      Black   0
hdaa1:     Caps:    OUT HP EAPD      Sense: 0x00000000 (disconnected)
hdaa1: NumGPIO=3 NumGPO=0 NumGPI=0 GPIWake=0 GPIUnsol=1
hdaa1:  GPIO0: disabled
hdaa1:  GPIO1: disabled
hdaa1:  GPIO2: disabled


# dmesg | grep pcm
pcm0: <ATI R6xx (HDMI)> at nid 3 on hdaa0
pcm1: <ATI R6xx (HDMI)> at nid 5 on hdaa0
pcm2: <ATI R6xx (HDMI)> at nid 7 on hdaa0
pcm3: <Conexant (0x1f86) (Analog)> at nid 23 and 25 on hdaa1
pcm4: <Conexant (0x1f86) (Left Analog Headphones)> at nid 22 on hdaa1

hdaa1: Dumping AFG pins:
hdaa1: nid 0x as seq device conn jack loc color misc
hdaa1: 22 03211040 4 0 Headphones Jack 1/8 Left Black 0
hdaa1: Caps: OUT HP EAPD Sense: 0x00000000 (disconnected)
hdaa1: 23 91170110 1 0 Speaker Fixed Analog 0x11 Unknown 1
hdaa1: Caps: OUT EAPD
hdaa1: 24 40f001f0 15 0 Other None Unknown 0x00 Unknown 1 DISA
hdaa1: Caps: IN VREF Sense: 0x00000000 (disconnected)
hdaa1: 25 03a11030 3 0 Mic Jack 1/8 Left Black 0
hdaa1: Caps: IN VREF Sense: 0x00000000 (disconnected)
hdaa1: 26 40f001f0 15 0 Other None Unknown 0x00 Unknown 1 DISA
hdaa1: Caps: IN Sense: 0x00000000 (disconnected)
hdaa1: 33 40f001f0 15 0 Other None Unknown 0x00 Unknown 1 DISA
hdaa1: Caps: OUT
hdaa1: NumGPIO=5 NumGPO=0 NumGPI=0 GPIWake=1 GPIUnsol=1
hdaa1: GPIO0: disabled
hdaa1: GPIO1: disabled
hdaa1: GPIO2: disabled
hdaa1: GPIO3: disabled
hdaa1: GPIO4: disabled
 
This looks all in place.
Rich (BB code):
pcm3: <Conexant (0x1f86) (Analog)> at nid 23 and 25 on hdaa1

hdaa1: nid   0x    as seq device       conn  jack    loc        color   misc
hdaa1: 23 91170110 1  0  Speaker       Fixed Analog  0x11       Unknown 1
hdaa1: 25 03a11030 3  0  Mic           Jack  1/8     Left       Black   0

Is the microphone used the built-in or a external plugged-in? How did you test the microphone?

Test:
Code:
ffmpeg -thread_queue_size 1024 -f oss -i /dev/dsp3 test.m4a
dsp3 internal mic device.

I'm on a ThinkPad E15 AMD Gen 3 (the pindump example from post # 2 is from that machine), the microphone (recording) from internal mic works fine here with the above test.
 
It's the built-in.

Yes, I have tried before.
# ffmpeg test.m4a
ffmpeg version 6.1.2 Copyright (c) 2000-2024 the FFmpeg developers
built with FreeBSD clang version 18.1.6 (https://github.com/llvm/llvm-project.git llvmorg-18.1.6-0-g1118c2e05e67)
configuration: --prefix=/usr/local --mandir=/usr/local/share/man --datadir=/usr/local/share/ffmpeg --docdir=/usr/local/share/doc/ffmpeg --pkgconfigdir=/usr/local/libdata/pkgconfig --disable-static --disable-libcelt --enable-shared --enable-pic --enable-gpl --cc=cc --cxx=c++ --disable-alsa --disable-libopencore-amrnb --disable-libopencore-amrwb --enable-libaom --disable-libaribb24 --disable-libaribcaption --enable-asm --enable-libass --disable-libbs2b --disable-libcaca --disable-libcdio --disable-libcodec2 --enable-libdav1d --disable-libdavs2 --disable-libdc1394 --disable-debug --enable-htmlpages --enable-libdrm --disable-libfdk-aac --disable-libflite --enable-fontconfig --enable-libfreetype --enable-frei0r --disable-libfribidi --disable-gcrypt --disable-libglslang --disable-libgme --enable-gmp --enable-gnutls --enable-version3 --disable-libgsm --enable-libharfbuzz --enable-iconv --disable-libilbc --disable-libjack --enable-libjxl --disable-libklvanc --disable-libkvazaar --disable-ladspa --enable-libmp3lame --enable-lcms2 --disable-liblensfun --disable-libbluray --enable-libplacebo --disable-librsvg --enable-libxml2 --enable-lto --disable-lv2 --disable-mbedtls --disable-libmfx --disable-libmodplug --disable-libmysofa --enable-network --disable-nonfree --enable-nvenc --disable-openal --disable-opencl --disable-opengl --disable-libopenh264 --disable-libopenjpeg --disable-libopenmpt --disable-openssl --disable-libopenvino --enable-optimizations --enable-libopus --disable-pocketsphinx --disable-libpulse --disable-librabbitmq --disable-librav1e --disable-librist --enable-runtime-cpudetect --disable-librubberband --disable-sdl2 --enable-libshaderc --disable-libsmbclient --disable-libsnappy --disable-sndio --disable-libsoxr --disable-libspeex --disable-libsrt --disable-libssh --enable-libsvtav1 --disable-libtensorflow --disable-libtesseract --disable-libtheora --disable-libtwolame --disable-libuavs3d --enable-libv4l2 --enable-vaapi --disable-vapoursynth --enable-vdpau --disable-libvidstab --enable-libvmaf --enable-libvorbis --disable-libvo-amrwbenc --disable-libvpl --enable-libvpx --enable-vulkan --enable-libwebp --enable-libx264 --enable-libx265 --disable-libxavs2 --enable-libxcb --disable-libxvid --disable-outdev=xv --disable-libzimg --disable-libzmq --disable-libzvbi
libavutil 58. 29.100 / 58. 29.100
libavcodec 60. 31.102 / 60. 31.102
libavformat 60. 16.100 / 60. 16.100
libavdevice 60. 3.100 / 60. 3.100
libavfilter 9. 12.100 / 9. 12.100
libswscale 7. 5.100 / 7. 5.100
libswresample 4. 12.100 / 4. 12.100
libpostproc 57. 3.100 / 57. 3.100
Output #0, ipod, to 'test.m4a':
[out#0/ipod @ 0x3d087304fd40] Output file does not contain any stream
Error opening output file test.m4a.
Error opening output files: Invalid argument
 
# ffmpeg test.m4a
Try % ffprobe test.m4a

Did you play the file with a media player?

There should be other /dev/dsp* devices, try those as well recording from.

It's the built-in.

Rich (BB code):
hdaa1: 25 03a11030 3  0  Mic           Jack  1/8     Left       Black   0
hdaa1:     Caps: IN             VREF Sense: 0x00000000 (disconnected)
I didn't pay attention earlier as I should have, but nid 25 looks like the headphones / mic port combo microphone pin configuration, not the built-in (“Jack” and ‘disconnected’ imply this):

There is no other ("Internal") "Mic" listed in the pindump.

Check BIOS/UEFI if there is an extra internal microphone on/off switch. On my E15 it's a single on/off slider for both, speaker and mic (Security -> I/O Port Access -> Integrated Audio).
 
Try % ffprobe test.m4a

Did you play the file with a media player?
Yes.
% ffprobe test.m4a
ffprobe version 6.1.2 Copyright (c) 2007-2024 the FFmpeg developers
built with FreeBSD clang version 18.1.6 (https://github.com/llvm/llvm-project.git llvmorg-18.1.6-0-g1118c2e05e67)
configuration: --prefix=/usr/local --mandir=/usr/local/share/man --datadir=/usr/local/share/ffmpeg --docdir=/usr/local/share/doc/ffmpeg --pkgconfigdir=/usr/local/libdata/pkgconfig --disable-static --disable-libcelt --enable-shared --enable-pic --enable-gpl --cc=cc --cxx=c++ --disable-alsa --disable-libopencore-amrnb --disable-libopencore-amrwb --enable-libaom --disable-libaribb24 --disable-libaribcaption --enable-asm --enable-libass --disable-libbs2b --disable-libcaca --disable-libcdio --disable-libcodec2 --enable-libdav1d --disable-libdavs2 --disable-libdc1394 --disable-debug --enable-htmlpages --enable-libdrm --disable-libfdk-aac --disable-libflite --enable-fontconfig --enable-libfreetype --enable-frei0r --disable-libfribidi --disable-gcrypt --disable-libglslang --disable-libgme --enable-gmp --enable-gnutls --enable-version3 --disable-libgsm --enable-libharfbuzz --enable-iconv --disable-libilbc --disable-libjack --enable-libjxl --disable-libklvanc --disable-libkvazaar --disable-ladspa --enable-libmp3lame --enable-lcms2 --disable-liblensfun --disable-libbluray --enable-libplacebo --disable-librsvg --enable-libxml2 --enable-lto --disable-lv2 --disable-mbedtls --disable-libmfx --disable-libmodplug --disable-libmysofa --enable-network --disable-nonfree --enable-nvenc --disable-openal --disable-opencl --disable-opengl --disable-libopenh264 --disable-libopenjpeg --disable-libopenmpt --disable-openssl --disable-libopenvino --enable-optimizations --enable-libopus --disable-pocketsphinx --disable-libpulse --disable-librabbitmq --disable-librav1e --disable-librist --enable-runtime-cpudetect --disable-librubberband --disable-sdl2 --enable-libshaderc --disable-libsmbclient --disable-libsnappy --disable-sndio --disable-libsoxr --disable-libspeex --disable-libsrt --disable-libssh --enable-libsvtav1 --disable-libtensorflow --disable-libtesseract --disable-libtheora --disable-libtwolame --disable-libuavs3d --enable-libv4l2 --enable-vaapi --disable-vapoursynth --enable-vdpau --disable-libvidstab --enable-libvmaf --enable-libvorbis --disable-libvo-amrwbenc --disable-libvpl --enable-libvpx --enable-vulkan --enable-libwebp --enable-libx264 --enable-libx265 --disable-libxavs2 --enable-libxcb --disable-libxvid --disable-outdev=xv --disable-libzimg --disable-libzmq --disable-libzvbi
libavutil 58. 29.100 / 58. 29.100
libavcodec 60. 31.102 / 60. 31.102
libavformat 60. 16.100 / 60. 16.100
libavdevice 60. 3.100 / 60. 3.100
libavfilter 9. 12.100 / 9. 12.100
libswscale 7. 5.100 / 7. 5.100
libswresample 4. 12.100 / 4. 12.100
libpostproc 57. 3.100 / 57. 3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test.m4a':
Metadata:
major_brand : M4A
minor_version : 512
compatible_brands: M4A isomiso2
encoder : Lavf60.16.100
Duration: 00:00:11.45, start: 0.000000, bitrate: 5 kb/s
Stream #0:0[0x1](und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 1 kb/s (default)
Metadata:
handler_name : SoundHandler
vendor_id : [0][0][0][0]
There should be other /dev/dsp* devices, try those as well recording from.



Rich (BB code):
hdaa1: 25 03a11030 3  0  Mic           Jack  1/8     Left       Black   0
hdaa1:     Caps: IN             VREF Sense: 0x00000000 (disconnected)
I didn't pay attention earlier as I should have, but nid 25 looks like the headphones / mic port combo microphone pin configuration, not the built-in (“Jack” and ‘disconnected’ imply this):

There is no other ("Internal") "Mic" listed in the pindump.

Check BIOS/UEFI if there is an extra internal microphone on/off switch. On my E15 it's a single on/off slider for both, speaker and mic (Security -> I/O Port Access -> Integrated Audio).
Here is the same.
 
I'm afraid I've reached a dead end with my help. The "pindump" doesn't show another (internal) "Mic" which might suggest a driver problem, I don't know.

Have you tested recording on another OSs? There was a case with audio issues (speaker) on FreeBSD, assumed resolved by warm reboot from Linux (https://forums.freebsd.org/threads/...although-headphone-out-does.92565/post-645751).

Besides trying that, you could check on 14.2 (in case there is a regression) and CURRENT if the pindump shows a Mic Fixed Digital Internal nid pin configuration.

If the tests don't show a internal mic on those versions as well, ask on the https://lists.freebsd.org/subscription/freebsd-multimedia mailing list, or -questions@, -current@. The FreeBSD developers there may have a better view of the problem.

If you have an external microphone or headset, you can at least test the functionality of the headphone / mic port, see is the mic is working there.
 
I tried in the Linux livecd (Ubuntu Desktop 25.04) and works like a charmy over there.

I will keep trying until I find a workable solution and will update here if I find one.

Thanks for your time.
I'm afraid I've reached a dead end with my help. The "pindump" doesn't show another (internal) "Mic" which might suggest a driver problem, I don't know.

Have you tested recording on another OSs? There was a case with audio issues (speaker) on FreeBSD, assumed resolved by warm reboot from Linux (https://forums.freebsd.org/threads/...although-headphone-out-does.92565/post-645751).

Besides trying that, you could check on 14.2 (in case there is a regression) and CURRENT if the pindump shows a Mic Fixed Digital Internal nid pin configuration.

If the tests don't show a internal mic on those versions as well, ask on the https://lists.freebsd.org/subscription/freebsd-multimedia mailing list, or -questions@, -current@. The FreeBSD developers there may have a better view of the problem.

If you have an external microphone or headset, you can at least test the functionality of the headphone / mic port, see is the mic is working there.
 
Back
Top