[Fedora31] Setting touchscreen in Dell XPS 13 7390 2 in 1
A few years ago, my main OS was Fedora and so I installed Fedora 31 on my new laptop. However, the touchscreen was not working in Fedora 31.
Thus, this article describes how to properly use the touchscreen on Fedora 31 on Dell XPS 2n 1 7390 machines.
You can find the same problem in Red hat Bugzilla.
In Fedora 32, the touchscreen is well worked.
1. Check Kernel version, after installing Fedora 31
If you installed properly Fedora 31 on your laptop, kernel version of your machine would be 5.3.7-301.fc31
.
# Check current kernel version
$ uname -a
<kernel version>
You need to install 5.4.x
version kernel in order to use the touchscreen on Fedora 31 because the fixed patch related to use touchscreen was applied after 5.4.0
version kernel.
The under content is the patch related to use the touchscreen on Dell XPS 13 7390 2 in 1.
commit a8ff78f7f773142eb8a8befe5a95dd6858ebd635
...
The BIOS bug is present on Dell XPS 13 7390 2-in-1:
[ 0.001734] 5 base 4000000000 mask 6000000000 write-combining
4000000000-7fffffffff : PCI Bus 0000:00
4000000000-400fffffff : 0000:00:02.0 (i915)
4010000000-4010000fff : 0000:00:15.0 (intel-lpss-pci)
Link: https://bugzilla.kernel.org/show_bug.cgi?id=203485
...
2. Download Kernel 5.4.x version source code
Kernel version 5.4.x is known to have the touch screen setting. However, I used [torvalds/linux] source because I confirmed that the touch screen works well and proceeded based on this source code.
# Download kernel source code
$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
$ cd linux
$ git checkout master
3. Setting config file
# Copy current kernel config file
$ cp /boot/config-5.3.7-301.fc31.x86_64 .
# Setting config details to build (touchscreen module built-in configuration)
$ make menuconfig
After entering the command, which is make memuconfig
, the following screen will appear.
Press /
, and find the intel_lpss_pci module. (Intel_lpss_pci module is a touch screen module.)
If it looks like the screen above, press 1
.
You can see that the intel_lpss_pci module is set to M
(module). However, I want to set this module to built-in and so I changed it by pressing y
.
Now press tab
to press save
and press exit
key.
4. Build Kernel
Build the kernel with the binrpm-pkg
option due to using rpm
command for installation.
$ make prepare
$ make binrpm-pkg -j <the number of cpu core>
binrpm-pkg
option
$ make help
...
Kernel packaging:
...
binrpm-pkg - Build only the binary kernel RPM package
...
5. Install Kernel
Kernel pkg, which has been built in step 4, is stored in $ HOME / rpmbuild / RPMS
. Change path to this directory and start to install the kernel.
$ cd ~/rpmbuild/RPMS/x86_64/
$ ls
kernel-5.4.0+-7.x86_64.rpm kernel-headers-5.4.0+-7.x86_64.rpm
# Kernel installation.
$ sudo rpm -ivh kernel-5.4.0+-7.x86_64.rpm
# Kernel header installation.
$ sudo rpm -Uvh kernel-headers-5.4.0+-7.x86_64.rpm
6. Reboot
Boot the kernel, which is installed in step 5. Check if the kernel version 5.4.0
is properly installed with the following command.
$ uname -a
Linux 5.4.0+
After the kernel installation, there was a problem of not being able to network after booting.
7. Fixed Network issue
Update the network firmware to the latest file through the following procedure and the network will operate normally.
git clone https://chromium.googlesource.com/chromiumos/third_party/linux-firmware chromiumos-linux-firmware
cd chromiumos-linux-firmware
sudo cp iwlwifi-* /lib/firmware/
cd /lib/firmware
sudo ln -s iwlwifi-Qu-c0-hr-b0-50.ucode iwlwifi-Qu-b0-hr-b0-50.ucode