Lenovo IdeaPad 5 14are05
The IdeaPad 5 14are05 is a 14-inch Lenovo AMD Renoir (Ryzen 4000)-based laptop.
Hardware Support
BIOS
BIOS can be accessed by pressing F2
at the Splash screen. The 15-inch model has BIOS updates that are compatible with DOS, so its BIOS can be flashed without Windows (see Flashing BIOS from Linux#FreeDOS). Unfortunately, the update files for this model require Windows. In theory, Windows can be installed on a USB drive through woeusbAUR.
Video
X works natively with a current linux and xf86-video-amdgpu.
Sound
Sound works with PulseAudio in linux out of the box.
Microphone
The internal microphone is properly recognized and working for linux >=5.8rc3 as long as the snd-acp3x-rn
kernel module is loaded.
If the internal microphone is no longer recognized on linux >=5.10, you may need to add the following to the kernel parameters:
snd_rn_pci_acp3x.dmic_acpi_check=1
Wireless
It is available with different wifi chips but they should work out of the box. Bluetooth also works with the btusb
module, and remote audio playback with A2DP works through pulseaudio-bluetooth (see Bluetooth headset on setting it up).
Touchpad
The touchpad works almost as expected starting from linux 5.9-rc1. It is still random whether it will work or not after going out of suspend mode, but in that case it is an easy fix: just add a keyboard shortcut for the touchpad toggle and you should be able to make it work again.
For older kernels, it is important to make sure that the BIOS is updated to the latest version (atm 1.06), otherwise it is possible that the touchpad will not even be discovered let alone work. If touchpad device is found it is still possible that it will not work (either right after startup or after going out of suspend mode). In this case a new cold start might help (sometimes a reboot might be enough).
Additionally, while there is no explicit option to disable the touchpad in the BIOS, some option combinations in the BIOS can make the touchpad inaccessible. Thus, if you are running on linux 5.9 or newer and you still have issues with this module, try checking your BIOS settings first.
Display
The brightness works for linux >=5.7.6.1, since the patch to fix brightness has been merged. The xbacklight utility provided with xorg-xbacklight only works with Intel drivers (see Backlight#xbacklight), but you can use its replacement from acpilight to increase and decrease brightness levels. Since the latter requires different permissions for the files in /sys/class/backlight/
to control the backlight brightness levels, you should set up a file in /etc/udev/rules.d/90-backlight.rules
containing:
SUBSYSTEM=="backlight", ACTION=="add", \ RUN+="/usr/bin/chgrp video /sys/class/backlight/amdgpu_bl0/brightness", \ RUN+="/usr/bin/chmod g+w /sys/class/backlight/amdgpu_bl0/brightness"
You would also need to add your users to the video
group.
In order to preserve the brightness level when resuming from suspend, you should add the following kernel parameter to your bootloader's configuration file:
acpi_backlight=vendor
Issues
Suspend issues (S3 sleep fix)
Note: suspending works as expected out of the box starting from linux 5.14-rc1 (that is, AMD's s2idle is now properly supported, although s3 sleep can still be achieved with the method below). So for kernels <= 5.10 and >= 5.14, the solution is provided below. Note that this does not work in kernels from 5.11 to 5.13. Original solution is described on reddit.
About issue
Windows has introduced a new sleep mode a.k.a. Modern Standby. It is supposed to be more like a smartphone's deep sleep, which lets the system keep the wifi active and check for emails without needing to fully wake up.
For some reason, this new S0ix sleep mode only works if BIOS does not advertise support for the traditional S3 suspend-to-RAM sleep state. So Linux will do suspend-to-idle sleep, which results in bigger energy consumption.
Some systems have a "Sleep Mode: Windows / Linux" switch in the BIOS to turn S3 support on or off. This is unfortunately not the case for this Lenovo laptop.
Solution
- Get acpidump and iasl, provided by the acpica package.
- Dump all your ACPI files into a directory:
$ mkdir ~/acpi/ $ cd ~/acpi/ # acpidump -b
- Decompile the DSDT table
$ iasl -e *.dat -d dsdt.dat
- Patch the decompiled DSDT table (dsdt.dsl). Use this patch for Linux <= 5.10 and this patch for Linux 5.14.
$ patch -p1 < dsdt.patch
- Compile the modified DSDT table
$ iasl -ve -tc dsdt.dsl
- Make a cpio archive
$ mkdir -p kernel/firmware/acpi $ cp dsdt.aml kernel/firmware/acpi $ find kernel | cpio -H newc --create > acpi_override
- Copy created cpio file to boot:
# cp acpi_override /boot
- GRUB needs to boot the kernel with a parameter setting the deep sleep state as default. Edit
/etc/default/grub
and add the following:
GRUB_CMDLINE_LINUX_DEFAULT="mem_sleep_default=deep"
GRUB_EARLY_INITRD_LINUX_CUSTOM=acpi_override
- Regenerate the GRUB configuration:
# grub-mkconfig -o /boot/grub/grub.cfg
as a result in the /boot/grub/grub.cfg
for the corresponding menu entry(ies) one should be able to find lines that look similar to: initrd /boot/acpi_override
- Reboot
- To verify that things are working:
# dmesg | grep ACPI | grep supports
[ 0.195933] ACPI: (supports S0 S3 S4 S5)
$ cat /sys/power/mem_sleep
s2idle [deep]
- Do not forget to set your system to go into 'deep' sleep
# echo deep > /sys/power/mem_sleep
- Now try new suspend. Power led should have a slowly pulsing light.
Tips and tricks
System Performance Mode
There are 3 modes available: Intelligent Cooling, Extreme Performance and Battery Saving. To toggle it, you need to call some ACPI methods.
First install acpi_call (or acpi_call-lts for LTS kernel, acpi_call-dkms for other kernels) and load the kernel module:
# modprobe acpi_call
Set it to Intelligent Cooling mode:
# echo '\_SB.PCI0.LPC0.EC0.VPC0.DYTC 0x000FB001' | tee /proc/acpi/call
Set it to Extreme Performance mode:
# echo '\_SB.PCI0.LPC0.EC0.VPC0.DYTC 0x0012B001' | tee /proc/acpi/call
Set it to Battery Saving mode:
# echo '\_SB.PCI0.LPC0.EC0.VPC0.DYTC 0x0013B001' | tee /proc/acpi/call
To verify your setting:
# echo '\_SB.PCI0.LPC0.EC0.STMD' | tee /proc/acpi/call # cat /proc/acpi/call; printf '\n'
As a result you get the value for the bit STMD (either 0x0
or 0x1
).
# echo '\_SB.PCI0.LPC0.EC0.QTMD' | tee /proc/acpi/call # cat /proc/acpi/call; printf '\n'
As a result you get the value for the bit QTMD (either 0x0
or 0x1
).
To interpret the results the following table can be used:
STMD | QTMD | Mode |
---|---|---|
0x0 | 0x0 | Extreme Performance |
0x0 | 0x1 | Battery Saving |
0x1 | 0x0 | Intelligent Cooling |
Rapid Charge
Make sure you have set up acpi_call.
Turn on:
# echo '\_SB.PCI0.LPC0.EC0.VPC0.SBMC 0x07' | tee /proc/acpi/call
Turn off:
# echo '\_SB.PCI0.LPC0.EC0.VPC0.SBMC 0x08' | tee /proc/acpi/call
To verify your setting:
# echo '\_SB.PCI0.LPC0.EC0.FCGM' | tee /proc/acpi/call # cat /proc/acpi/call; printf '\n'
where 0x0
stands for off and 0x1
stands for on.
Also see the note
Battery Conservation
Similarly to the #Rapid Charge, make sure you have set up acpi_call.
Turn on:
# echo '\_SB.PCI0.LPC0.EC0.VPC0.SBMC 0x03' | tee /proc/acpi/call
Turn off:
# echo '\_SB.PCI0.LPC0.EC0.VPC0.SBMC 0x05' | tee /proc/acpi/call
To verify your setting:
# echo '\_SB.PCI0.LPC0.EC0.BTSG' | tee /proc/acpi/call # cat /proc/acpi/call; printf '\n'
where 0x0
stands for off and 0x1
stands for on.
There is also an alternative way to control the conservation mode of the battery.
Note
It is worth noting that the Lenovo Vantage software for Windows when turning on Battery Conservation mode also turns off #Rapid Charge (if it was on). The same is also valid for the #Rapid Charge: turning it on will bring the battery conservation mode down. The aforementioned acpi calls (#Rapid Charge and #Battery Conservation) will not do this for you. So it is possible to get the state where both battery conservation and rapid charge modes are active.