Thinkpad E14 Gen4 special keys (mic mute, etc.) stop working after S3 sleep

I’m running Manjaro on a Lenovo Thinkpad E14 Gen4 (CPU: i7-1255U, firmware version: 1.13) with the Linux kernel in version 6.0.0. While I generally like the hardware, there are two issues regarding after waking up the system from sleep (S3 sleep state). The touchpad is unresponsive, but this can be fixed by automatically reloading the “psmouse”-kernel module on wake-up.

The second issue seems to be more of a challenge. After the first sleep, all extra buttons and LEDs (e.g. volume control, mic mute, etc.) stop working and the system fails to recognize when the lid is closed. I have already tried different kernel versions and experimented with reloading or blacklisting the corresponding kernel module (thinkpad_acpi), so far without success. Nothing related is logged to the kernel log. Any ideas what else I could still try?

Another question, a bit less technical: My uneducated guess is that this is a firmware issue. Knowing that the E-series does not have official Linux support by Lenovo, is there any experience whether to expect this to be fixed by Lenovo? I could live with the limitation for a couple of months. However, if no fix is to be expected, I would need to return the device in the next days.

check if there is a bios update available for you

Thanks for your input. I have re-checked, but I am using the most recent version 1.13.

post output from:
lsmod | grep thinkpad
do you have dual graphics?

lsmod | grep thinkpad:

thinkpad_acpi         184320  0
ledtrig_audio          16384  3 snd_ctl_led,snd_hda_codec_generic,thinkpad_acpi
platform_profile       16384  1 thinkpad_acpi
snd                   126976  26 snd_ctl_led,snd_hda_codec_generic,snd_hda_codec_hdmi,snd_hwdep,snd_hda_intel,snd_hda_codec,snd_hda_codec_realtek,snd_sof,snd_timer,snd_soc_hdac_hdmi,snd_compress,thinkpad_acpi,snd_soc_core,snd_pcm
video                  61440  2 thinkpad_acpi,i915
rfkill                 32768  10 iwlmvm,bluetooth,thinkpad_acpi,cfg80211

No, I’m using the CPU’s graphics chip.

suspend, resume from suspend,and try modprobing these parameters:

sudo modprobe -r ledtrig_audio platform_profile snd_ctl_led thinkpad_acpi && sudo modprobe ledtrig_audio platform_profile snd_ctl_led thinkpad_acpi

if it doenst work we try adding a kernel parameter
what de are you using? kde, gnome…?

# modprobe -r ledtrig_audio platform_profile snd_ctl_led thinkpad_acpi && modprobe ledtrig_audio platform_profile snd_ctl_led thinkpad_acpi
modprobe: FATAL: Module ledtrig_audio is in use.
# modprobe -r platform_profile snd_ctl_led thinkpad_acpi && modprobe platform_profile snd_ctl_led thinkpad_acpi

No changes, unfortunately. Which kernel parameter do you suggest to try?

I’m using KDE Plasma, but the problem persists when I use systemctl suspend.

output from:
lsmod | grep ledtrig_audio

so when you dont use the command the keys are working?

# lsmod | grep ledtrig_audio
ledtrig_audio          16384  1 snd_hda_codec_generic

No, that was unclear, sorry. The keys don’t work after the first sleep, independent from the method of sending the system to sleep (systemctl suspend vs. using Plasma).

so try again with:

sudo modprobe -r snd_hda_codec_generic ledtrig_audio platform_profile snd_ctl_led thinkpad_acpi && sudo modprobe snd_hda_codec_generic ledtrig_audio platform_profile snd_ctl_led thinkpad_acpi

if it doesnt work we try the kernel parameter

# sudo modprobe -r snd_hda_codec_generic ledtrig_audio platform_profile snd_ctl_led thinkpad_acpi && sudo modprobe snd_hda_codec_generic ledtrig_audio platform_profile snd_ctl_led thinkpad_acpi
modprobe: FATAL: Module snd_hda_codec_generic is in use.
# lsmod | grep snd_hda_codec_generic
snd_hda_codec_generic    98304  1 snd_hda_codec_realtek
snd_hda_codec         188416  7 snd_hda_codec_generic,snd_hda_codec_hdmi,snd_hda_intel,snd_hda_codec_realtek,snd_soc_intel_hda_dsp_common,snd_soc_hdac_hda,snd_soc_skl_hda_dsp
snd_hda_core          118784  11 snd_hda_codec_generic,snd_hda_codec_hdmi,snd_hda_intel,snd_hda_ext_core,snd_hda_codec,snd_hda_codec_realtek,snd_soc_intel_hda_dsp_common,snd_sof_intel_hda_common,snd_soc_hdac_hdmi,snd_soc_hdac_hda,snd_sof_intel_hda
ledtrig_audio          16384  1 snd_hda_codec_generic
snd                   126976  24 snd_hda_codec_generic,snd_hda_codec_hdmi,snd_hwdep,snd_hda_intel,snd_hda_codec,snd_hda_codec_realtek,snd_sof,snd_timer,snd_soc_hdac_hdmi,snd_compress,snd_soc_core,snd_pcm

ok, so forget about it, lets try the kernel parameter
open this file:
kate /etc/default/grub
and in this line: GRUB_CMDLINE_LINUX_DEFAULT - inside the quotes add this parameter:
mem_sleep_default=s2idle
dont remove anything from there, just add it to the existing parameters, save the file, update grub with:
sudo update-grub
reboot and test
this sleep mode is ‘freeze’ so there will be bigger batery drainage when using this mode

The problem does not occur when using s2idle. (I tried that by changing the BIOS setting, but that shouldn’t make any difference compared to changing the GRUB config, right?) However, this light sleep mode is no real use to me, as the battery is basically empty after a day.

that i dont know if it makes any difference…
the battery drain should be around 2-3% with s2idle parameter an hour when your pc is suspended, so thats not that bad

I will test whether the kernel parameter helps bring down the battery drain in s2idle, but can only really conclude on that tomorrow.
I would like to make S3 work, so if somebody has another idea on that, please share. However, if it’s a firmware issue, I’m afraid there not much to do except for hoping for Lenovo, right?

Anyway, thanks a lot for your help so far!