Lenovo Yoga c940
Overview
Most functionality works out of the box, a kernel of version 5.4 is recommended due to Ice Lake's new Thunderbolt.
Device | Status | Modules |
Graphics | Working | i915 |
Wireless | Working | iwlwifi |
Audio | Partially | snd_sof |
Touchscreen | Working | wacom |
Stylus | Working ¹ | wacom,usbhid |
Accelerometer | Working | hid_sensor_accel_3d |
Touchpad | Working | libinput |
Camera | Working | uvcvideo |
Bluetooth | Working | btintel |
Fingerprint Reader | Not Working |
Installation
Newer kernels boot without problems and the wifi should be available. If you get a blank screen after booting, the power modes are not supported by your kernel; refer to Troubleshooting.
Booting the install USB
To access the boot menu and BIOS, use F1
. Disable secure boot from the BIOS. UEFI boot mode works fine.
Configuration
TrackPad
TrackPad works fine with xf86-input-libinput.
TouchScreen and Stylus
Touchscreen works with the Wacom driver (package: xf86-input-wacom). Also using the Stylus, the bottom button of the pen is defined as the eraser and the top button works as a middle mouse button
Video
The kernel supports Iris Plus Gen11 from version 5.3. With default configuration, tearing is apparent when playing videos. To fix tearing, create the file /etc/X11/xorg.conf.d/20-intel.conf
with the following content:
Section "Device" Identifier "Intel Graphics" Driver "intel" Option "TearFree" "true" EndSection
That said there seems to be issues with Chromium based GPU acceleration, so either disabling that via Chromium flags, removing xf86-video-intel, or adding the following options to /etc/X11/xorg.conf.d/20-intel.conf
:
Option "NoAccel" "true" Option "DRI" "false"
Audio
Pre linux 5.5
Audio works when using the snd_hda_intel driver, so make a file in /etc/modprobe.d/alsa-base.conf
with
options snd_hda_intel enable=1 index=1
However Audio is partially working as there are some limitations.
Linux 5.5 and later
Audio (not including bottom facing speakers) and microphone works with sof-firmware and Linux 5.5 just add the following to /etc/modprobe.d/blacklist.conf
blacklist snd_hda_intel blacklist snd_soc_skl
Configure PulseAudio's to load Alsa modules with the correct device
and channnel
settings, by adding these two lines to /etc/pulse/default.pa
:
load-module module-alsa-sink device=hw:0,0 channels=4 load-module module-alsa-source device=hw:0,6 channels=4
Unmute the Master channel:
$ alsamixer -c 0
Then press m
on your keyboard.
Microphone
Microphone requires sof-firmware and linux kernel 5.5. blacklist the above and it will work.
Bug reports for Microphone
Speakers
Audio is OK, there are 5.1 speakers, 2.1 in the soundbar, and 2 under the palmrest on either side of the laptop. Only the 2 speakers in the soundbar work, and not the subwoofer. This is not optimal, but Alsa/Pulseaudio report that its a 2 channel audio device. I have read in other articles from other Lenovo devices, like the X1 Yoga that they solve this by making the alsa/pulseaudio use 4 channels instead of 2. I have not tried this so I cannot report on it.
Thread on Alsa-devel about 5.1 speakers https://mailman.alsa-project.org/pipermail/alsa-devel/2018-November/142369.html
The problem appears to be that the amplifiers for the extra speakers are turned off by default and there is no available documentation on how to turn them on; more details on bugzilla.kernel.org#205755.
If the speakers are detected, unmuted, and the volume is turned up yet the audio does not seem to play through the speakers, try adding options snd-hda-intel dmic_detect=0
to /etc/modprobe.d/alsa-base.conf
. Then, reboot.
Bluetooth
The Bluetooth adapter works out of the box.
Screen Rotation
I personally use bspwm and for that I use iio-sensor-proxy and screenrotator-gitAUR. But theres a whole article on this in Tablet PC.
Thermal Config
Thermal shutdowns are a problem unless you install thermald and make a few changes:
1. Add the following thermald config at /etc/thermald/thermal-conf.xml
:
<?xml version="1.0"?> <ThermalConfiguration> <Platform> <Name> Auto generated </Name> <ProductName>81Q9</ProductName> <Preference>QUIET</Preference> <ThermalZones> <ThermalZone> <Type>auto_zone_0</Type> <TripPoints> <TripPoint> <SensorType>SEN2</SensorType> <Temperature>63000</Temperature> <Type>Passive</Type> <CoolingDevice> <Type>B0D4</Type> <SamplingPeriod>8</SamplingPeriod> <TargetState>2147483647</TargetState> </CoolingDevice> </TripPoint> <TripPoint> <SensorType>x86_pkg_temp</SensorType> <Temperature>64000</Temperature> <Type>Passive</Type> <CoolingDevice> <Type>Processor</Type> <SamplingPeriod>1</SamplingPeriod> </CoolingDevice> </TripPoint> </TripPoints> </ThermalZone> </ThermalZones> </Platform> </ThermalConfiguration>
You might wish to tweak the target temperature (i.e. 64000) if you are OK with your machine running a bit hotter.
2. Edit /usr/lib/systemd/system/thermald.service
and remove --adaptive
from the ExecStart
line:
ExecStart=/usr/bin/thermald --systemd --dbus-enable
3. Ignore the thermald package in /etc/pacman.conf
so that the config doesn't get overwritten:
[options] IgnorePkg=thermald
ACPI
Suspend on lid works.
Manual fan control does not work at all.
Tablet/Laptop usage mode detection works with yoga-usage-mode-dkms-gitAUR.
Battery Conservation Mode (charge to max 50%) can be set with a 0/1 in "/sys/bus/platform/drivers/ideapad_acpi/VPC2004\:00/conservation_mode" where VPC2004\:00 could vary depending on the computer.
Hardware information
The output of lspci is
00:00.0 Host bridge: Intel Corporation Device 8a12 (rev 03) 00:02.0 VGA compatible controller: Intel Corporation Iris Plus Graphics G7 (rev 07) 00:04.0 Signal processing controller: Intel Corporation Device 8a03 (rev 03) 00:07.0 PCI bridge: Intel Corporation Ice Lake Thunderbolt 3 PCI Express Root Port #0 (rev 03) 00:07.1 PCI bridge: Intel Corporation Ice Lake Thunderbolt 3 PCI Express Root Port #1 (rev 03) 00:0d.0 USB controller: Intel Corporation Ice Lake Thunderbolt 3 USB Controller (rev 03) 00:0d.2 System peripheral: Intel Corporation Ice Lake Thunderbolt 3 NHI #0 (rev 03) 00:12.0 Serial controller: Intel Corporation Device 34fc (rev 30) 00:14.0 USB controller: Intel Corporation Ice Lake-LP USB 3.1 xHCI Host Controller (rev 30) 00:14.2 RAM memory: Intel Corporation Device 34ef (rev 30) 00:14.3 Network controller: Intel Corporation Killer Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201NGW) (rev 30) 00:15.0 Serial bus controller [0c80]: Intel Corporation Ice Lake-LP Serial IO I2C Controller #0 (rev 30) 00:15.1 Serial bus controller [0c80]: Intel Corporation Ice Lake-LP Serial IO I2C Controller #1 (rev 30) 00:15.2 Serial bus controller [0c80]: Intel Corporation Ice Lake-LP Serial IO I2C Controller #2 (rev 30) 00:16.0 Communication controller: Intel Corporation Management Engine Interface (rev 30) 00:1d.0 PCI bridge: Intel Corporation Ice Lake-LP PCI Express Root Port #9 (rev 30) 00:1f.0 ISA bridge: Intel Corporation Ice Lake-LP LPC Controller (rev 30) 00:1f.3 Multimedia audio controller: Intel Corporation Smart Sound Technology Audio Controller (rev 30) 00:1f.4 SMBus: Intel Corporation Ice Lake-LP SMBus Controller (rev 30) 00:1f.5 Serial bus controller [0c80]: Intel Corporation Ice Lake-LP SPI Controller (rev 30) 55:00.0 Non-Volatile memory controller: Samsung Electronics Co Ltd NVMe SSD Controller SM981/PM981/PM983
The output of lsusb is
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 003 Device 003: ID 06cb:00be Synaptics, Inc. Bus 003 Device 004: ID 8087:0026 Intel Corp. Bus 003 Device 002: ID 13d3:56b2 IMC Networks Integrated Camera Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Troubleshooting
Most of the difficulty is getting screen rotation, sound, and the microphone to work. Other issues like Chromium/Electron apps being slow, or graphics weirdness can be solved by uninstalling the xf86-video-intel package
If shutdown is not working and the system hangs on "reboot: Shutting down" on post 5.5 installations, try adding intel_iommu=off
to GRUB_CMDLINE_LINUX_DEFAULT
in /etc/default/grub
. Then update via update-grub
.